diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-06-27 22:49:08 +0200 |
---|---|---|
committer | backportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com> | 2023-07-07 14:54:57 +0000 |
commit | db1306b9551b20ae6d616aaf0de14ba5f305db64 (patch) | |
tree | 39fe55beff30b3504c6f271b3fda5fe11f177cc6 | |
parent | dfbedda0a221670fb9e69bd4d90a7d3354e9fce7 (diff) | |
download | nextcloud-server-db1306b9551b20ae6d616aaf0de14ba5f305db64.tar.gz nextcloud-server-db1306b9551b20ae6d616aaf0de14ba5f305db64.zip |
fix: cannot apply limit+offset on multi-tag-search
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | apps/dav/lib/Connector/Sabre/FilesReportPlugin.php | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php index 6122ba1bfe7..4b26d837779 100644 --- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php +++ b/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; |