aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2023-07-06 18:38:53 +0200
committerGitHub <noreply@github.com>2023-07-06 18:38:53 +0200
commitddfe6cc49c7e8bc06baa8e94cfd92f54c9f3c040 (patch)
tree186091bfbb5667e3c0bceb05c280ae177088d6dc
parent51fda57d59642835b4d7bfacaab14740f7c45626 (diff)
parent1b83c6302a96b77c9f204bf258353f14ba26a382 (diff)
downloadnextcloud-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.php10
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(