getUser($request))) { throw new AuthorizationFailedException(); } $this->validateFilters(); $filters = $this->getFilters(); list($offset, $limit) = $this->getOffsetAndLimit(); $partSQL = \GlobalSearchUsers::getSQL($filters['search'], [], $limit + $offset); $users = \User::findMany( array_map(function ($array) { return $array['user_id']; }, \DBManager::get()->fetchAll($partSQL)) ); $total = (int) \DBManager::get()->fetchColumn('SELECT FOUND_ROWS() as found_rows'); return $this->getPaginatedContentResponse($users, $total); } private function validateFilters(): void { $filtering = $this->getQueryParameters()->getFilteringParameters() ?? []; if (array_key_exists('search', $filtering)) { if (mb_strlen(trim($filtering['search'])) < 3) { throw new BadRequestException('Filter `search` should be at least 3 characters long.'); } } } private function getFilters() { $filtering = $this->getQueryParameters()->getFilteringParameters() ?? []; $filters['search'] = $filtering['search'] ?? '%%%'; return $filters; } }