diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-12-18 17:27:56 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-12-18 17:27:56 +0100 |
commit | 11b3aa2dbe792c306dab6f17b9633393ae739090 (patch) | |
tree | e8318cab8fe5fe7c0cb302f9b40c1f0ec31ac917 /apps/files_sharing/lib | |
parent | 10a0fc2856bfa68ff04a42f141829a6e66a9b2da (diff) | |
download | nextcloud-server-11b3aa2dbe792c306dab6f17b9633393ae739090.tar.gz nextcloud-server-11b3aa2dbe792c306dab6f17b9633393ae739090.zip |
Fix issues with searchByTag in shared storage
Diffstat (limited to 'apps/files_sharing/lib')
-rw-r--r-- | apps/files_sharing/lib/cache.php | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index e3bee145876..21f807f3533 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -345,6 +345,20 @@ class Shared_Cache extends Cache { } /** + * Checks whether the given file has the given tag. + * + * @param \OCP\ITags $tagger + * @param array $fileData file data + * @param string $tag tag to check for + * @return boolean true if the given file has the expected tag, + * false otherwise + */ + private function hasTag($tagger, $fileData, $tag) { + $tags = $tagger->getTagsForObjects(array((int)$fileData['fileid'])); + return (!empty($tags) && in_array($tag, current($tags))); + } + + /** * search for files by tag * * @param string|int $tag tag to search for @@ -356,28 +370,24 @@ class Shared_Cache extends Cache { $tagger = \OC::$server->getTagManager()->load('files', null, null, $userId); $result = array(); $exploreDirs = array(''); + // check if root is tagged + $file = $this->get(''); + if ($this->hasTag($tagger, $file, $tag)) { + $result[] = $file; + } // FIXME: this is so wrong and unefficient, need to replace with actual DB queries while (count($exploreDirs) > 0) { $dir = array_pop($exploreDirs); $files = $this->getFolderContents($dir); - // no results? if (!$files) { - // maybe it's a single shared file - $file = $this->get(''); - $tags = $tagger->getTagsForObjects(array((int)$file['fileid'])); - if (!empty($tags) && in_array($tag, current($tags))) { - $result[] = $file; - } continue; } foreach ($files as $file) { + if ($this->hasTag($tagger, $file, $tag)) { + $result[] = $file; + } if ($file['mimetype'] === 'httpd/unix-directory') { $exploreDirs[] = ltrim($dir . '/' . $file['name'], '/'); - } else { - $tags = $tagger->getTagsForObjects(array((int)$file['fileid'])); - if (!empty($tags) && in_array($tag, current($tags))) { - $result[] = $file; - } } } } |