classMapper->createInstance('user'); // Join user's most recent activity return $query->joinLastActivity()->with('lastActivity'); } /** * Filter LIKE the last activity description. * * @param Builder $query * @param mixed $value * @return $this */ protected function filterLastActivity($query, $value) { // Split value on separator for OR queries $values = explode($this->orSeparator, $value); $query->where(function ($query) use ($values) { foreach ($values as $value) { $query->orLike('activities.description', $value); } }); return $this; } /** * Filter LIKE the first name, last name, or email. * * @param Builder $query * @param mixed $value * @return $this */ protected function filterName($query, $value) { // Split value on separator for OR queries $values = explode($this->orSeparator, $value); $query->where(function ($query) use ($values) { foreach ($values as $value) { $query->orLike('first_name', $value) ->orLike('last_name', $value) ->orLike('email', $value); } }); return $this; } /** * Filter by status (active, disabled, unactivated) * * @param Builder $query * @param mixed $value * @return $this */ protected function filterStatus($query, $value) { // Split value on separator for OR queries $values = explode($this->orSeparator, $value); $query->where(function ($query) use ($values) { foreach ($values as $value) { if ($value == 'disabled') { $query->orWhere('flag_enabled', 0); } else if ($value == 'unactivated') { $query->orWhere('flag_verified', 0); } else if ($value == 'active') { $query->orWhere(function ($query) { $query->where('flag_enabled', 1)->where('flag_verified', 1); }); } } }); return $this; } /** * Return a list of possible user statuses. * * @return array */ protected function listStatus() { return [ [ 'value' => 'active', 'text' => Translator::translate('ACTIVE') ], [ 'value' => 'unactivated', 'text' => Translator::translate('UNACTIVATED') ], [ 'value' => 'disabled', 'text' => Translator::translate('DISABLED') ] ]; } /** * Sort based on last activity time. * * @param Builder $query * @param string $direction * @return $this */ protected function sortLastActivity($query, $direction) { $query->orderBy('activities.occurred_at', $direction); return $this; } /** * Sort based on last name. * * @param Builder $query * @param string $direction * @return $this */ protected function sortName($query, $direction) { $query->orderBy('last_name', $direction); return $this; } /** * Sort active, unactivated, disabled * * @param Builder $query * @param string $direction * @return $this */ protected function sortStatus($query, $direction) { $query->orderBy('flag_enabled', $direction)->orderBy('flag_verified', $direction); return $this; } }