Browse Source
fix: cannot apply limit+offset on multi-tag-search
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
pull/37969/head
Arthur Schiwon
2 years ago
No known key found for this signature in database
GPG Key ID: 7424F1874854DF23
1 changed files with
11 additions and
1 deletions
-
apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
|
|
|
@ -338,9 +338,15 @@ class FilesReportPlugin extends ServerPlugin { |
|
|
|
// exposed in API yet
|
|
|
|
if (!empty($systemTagIds)) { |
|
|
|
$tags = $this->tagManager->getTagsByIds($systemTagIds, $this->userSession->getUser()); |
|
|
|
|
|
|
|
// For we run DB queries per tag and require intersection, we cannot apply limit and offset for DB queries on multi tag search.
|
|
|
|
$oneTagSearch = count($tags) === 1; |
|
|
|
$dbLimit = $oneTagSearch ? $limit ?? 0 : 0; |
|
|
|
$dbOffset = $oneTagSearch ? $offset ?? 0 : 0; |
|
|
|
|
|
|
|
foreach ($tags as $tag) { |
|
|
|
$tagName = $tag->getName(); |
|
|
|
$tmpNodes = $this->userFolder->searchBySystemTag($tagName, $this->userSession->getUser()->getUID(), $limit ?? 0, $offset ?? 0); |
|
|
|
$tmpNodes = $this->userFolder->searchBySystemTag($tagName, $this->userSession->getUser()->getUID(), $dbLimit, $dbOffset); |
|
|
|
if (count($nodes) === 0) { |
|
|
|
$nodes = $tmpNodes; |
|
|
|
} else { |
|
|
|
@ -353,6 +359,10 @@ class FilesReportPlugin extends ServerPlugin { |
|
|
|
return $nodes; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!$oneTagSearch && ($limit !== null || $offset !== null)) { |
|
|
|
$nodes = array_slice($nodes, $offset, $limit); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return $nodes; |
|
|
|
|