l10n = $l10n; $this->federatedUserService = $federatedUserService; $this->searchService = $searchService; } /** * return unique id of the provider */ public function getId(): string { return self::PROVIDER_ID; } /** * @return string */ public function getName(): string { return $this->l10n->t('Teams'); } /** * @param string $route * @param array $routeParameters * * @return int */ public function getOrder(string $route, array $routeParameters): int { return self::ORDER; } /** * @param IUser $user * @param ISearchQuery $query * * @return SearchResult */ public function search(IUser $user, ISearchQuery $query): SearchResult { $term = $query->getTerm(); $options = $this->extractOptions($term); $result = []; try { $this->federatedUserService->setLocalCurrentUser($user); $result = $this->searchService->unifiedSearch($term, $options); } catch (Exception $e) { } return SearchResult::paginated( $this->l10n->t('Teams'), $result, ($query->getCursor() ?? 0) + $query->getLimit() ); } /** * This is temporary, should be handled by core to extract Options from Term * * @param string $term * * @return array */ private function extractOptions(string &$term): array { $new = $options = []; foreach (explode(' ', $term) as $word) { $word = trim($word); if (strtolower(substr($word, 0, 3)) === 'is:') { try { $options['level'] = Member::parseLevelString(substr($word, 3)); } catch (ParseMemberLevelException $e) { } } else { $new[] = $word; } } $term = trim(implode(' ', $new)); return $options; } }