classMapper->createInstance('organisation')->newQuery()->joinMemberCounts(); } /** * Filter by status (approved, pending). * * @param Builder $query * @param mixed $value * * @return self */ 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 == 'approved') { $query->orWhere('flag_approved', 1); } elseif ($value == 'pending') { $query->orWhere('flag_approved', 0); } } }); return $this; } /** * Filter by name (case insensitive). * * @param Builder $query * @param mixed $value * * @return self */ 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->orWhereRaw('LOWER(name) LIKE ?', [ '%' . strtolower($value) . '%' ]); } }); return $this; } /** * Filter by description (case insensitive). * * @param Builder $query * @param mixed $value * * @return self */ protected function filterDescription($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->orWhereRaw('LOWER(description) LIKE ?', [ '%' . strtolower($value) . '%' ]); } }); return $this; } /** * Return a list of possible user statuses. * * @return array */ protected function listStatus() { return [ [ 'value' => 'approved', 'text' => Translator::translate('APPROVED'), ], [ 'value' => 'pending', 'text' => Translator::translate('PENDING'), ], ]; } /** * Sort approved, pending * * @param Builder $query * @param string $direction * * @return self */ protected function sortStatus($query, $direction) { $query->orderBy('flag_approved', ($direction === 'desc' ? 'asc' : 'desc')); return $this; } /** * Sort based on created date. * * @param Builder $query * @param string $direction * * @return self */ protected function sortCreatedAt($query, $direction) { $query->orderBy('organisations.created_at', $direction) ->orderby('organisations.id', $direction); return $this; } }