diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-07-06 18:38:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-06 18:38:53 +0200 |
commit | ddfe6cc49c7e8bc06baa8e94cfd92f54c9f3c040 (patch) | |
tree | 186091bfbb5667e3c0bceb05c280ae177088d6dc | |
parent | 51fda57d59642835b4d7bfacaab14740f7c45626 (diff) | |
parent | 1b83c6302a96b77c9f204bf258353f14ba26a382 (diff) | |
download | nextcloud-server-ddfe6cc49c7e8bc06baa8e94cfd92f54c9f3c040.tar.gz nextcloud-server-ddfe6cc49c7e8bc06baa8e94cfd92f54c9f3c040.zip |
Merge pull request #39194 from nextcloud/fix/stable26/tag-search-short-circuit-master
[stable26] fix(TagSearchProvider): Short circuit if no tag matches the query
-rw-r--r-- | apps/systemtags/lib/Search/TagSearchProvider.php | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/apps/systemtags/lib/Search/TagSearchProvider.php b/apps/systemtags/lib/Search/TagSearchProvider.php index 7a7cb0b061c..5c731e42cc3 100644 --- a/apps/systemtags/lib/Search/TagSearchProvider.php +++ b/apps/systemtags/lib/Search/TagSearchProvider.php @@ -113,6 +113,11 @@ class TagSearchProvider implements IProvider { * @inheritDoc */ public function search(IUser $user, ISearchQuery $query): SearchResult { + $matchingTags = $this->tagManager->getAllTags(true, $query->getTerm()); + if (count($matchingTags) === 0) { + return SearchResult::complete($this->l10n->t('Tags'), []); + } + $userFolder = $this->rootFolder->getUserFolder($user->getUID()); $fileQuery = new SearchQuery( new SearchBinaryOperator(SearchBinaryOperator::OPERATOR_OR, [ @@ -133,7 +138,6 @@ class TagSearchProvider implements IProvider { return $node->getId(); }, $searchResults); $matchedTags = $this->objectMapper->getTagIdsForObjects($resultIds, 'files'); - $relevantTags = $this->tagManager->getTagsByIds(array_unique($this->flattenArray($matchedTags))); // prepare direct tag results $tagResults = array_map(function(ISystemTag $tag) { @@ -149,9 +153,7 @@ class TagSearchProvider implements IProvider { 'icon-tag' ); return $searchResultEntry; - }, array_filter($relevantTags, function($tag) use ($query) { - return $tag->isUserVisible() && strpos($tag->getName(), $query->getTerm()) !== false; - })); + }, $matchingTags); // prepare files results return SearchResult::paginated( |