diff options
Diffstat (limited to 'apps/files_sharing/lib/ShareBackend/Folder.php')
-rw-r--r-- | apps/files_sharing/lib/ShareBackend/Folder.php | 129 |
1 files changed, 41 insertions, 88 deletions
diff --git a/apps/files_sharing/lib/ShareBackend/Folder.php b/apps/files_sharing/lib/ShareBackend/Folder.php index 80b141326d3..df5529c3c4a 100644 --- a/apps/files_sharing/lib/ShareBackend/Folder.php +++ b/apps/files_sharing/lib/ShareBackend/Folder.php @@ -1,108 +1,61 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bart Visscher <bartv@thisnet.nl> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Michael Gapczynski <GapczynskiM@gmail.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\Files_Sharing\ShareBackend; -class Folder extends File implements \OCP\Share_Backend_Collection { - - /** - * get shared parents - * - * @param int $itemSource item source ID - * @param string $shareWith with whom should the item be shared - * @param string $owner owner of the item - * @return array with shares - */ - public function getParents($itemSource, $shareWith = null, $owner = null) { - $result = array(); - $parent = $this->getParentId($itemSource); - while ($parent) { - $shares = \OCP\Share::getItemSharedWithUser('folder', $parent, $shareWith, $owner); - if ($shares) { - foreach ($shares as $share) { - $name = basename($share['path']); - $share['collection']['path'] = $name; - $share['collection']['item_type'] = 'folder'; - $share['file_path'] = $name; - $displayNameOwner = \OCP\User::getDisplayName($share['uid_owner']); - $displayNameShareWith = \OCP\User::getDisplayName($share['share_with']); - $share['displayname_owner'] = $displayNameOwner ? $displayNameOwner : $share['uid_owner']; - $share['share_with_displayname'] = $displayNameShareWith ? $displayNameShareWith : $share['uid_owner']; - - $result[] = $share; - } - } - $parent = $this->getParentId($parent); - } - - return $result; - } - - /** - * get file cache ID of parent - * - * @param int $child file cache ID of child - * @return mixed parent ID or null - */ - private function getParentId($child) { - $query = \OCP\DB::prepare('SELECT `parent` FROM `*PREFIX*filecache` WHERE `fileid` = ?'); - $result = $query->execute(array($child)); - $row = $result->fetchRow(); - $parent = $row ? $row['parent'] : null; - - return $parent; - } +use OCP\IDBConnection; +use OCP\Server; +use OCP\Share_Backend_Collection; +class Folder extends File implements Share_Backend_Collection { public function getChildren($itemSource) { - $children = array(); - $parents = array($itemSource); - $query = \OCP\DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?'); - $result = $query->execute(array('httpd/unix-directory')); + $children = []; + $parents = [$itemSource]; + + $qb = Server::get(IDBConnection::class)->getQueryBuilder(); + $qb->select('id') + ->from('mimetypes') + ->where( + $qb->expr()->eq('mimetype', $qb->createNamedParameter('httpd/unix-directory')) + ); + $result = $qb->execute(); + $row = $result->fetch(); + $result->closeCursor(); + if ($row = $result->fetchRow()) { - $mimetype = (int) $row['id']; + $mimetype = (int)$row['id']; } else { $mimetype = -1; } while (!empty($parents)) { - $parents = "'".implode("','", $parents)."'"; - $query = \OCP\DB::prepare('SELECT `fileid`, `name`, `mimetype` FROM `*PREFIX*filecache`' - .' WHERE `parent` IN ('.$parents.')'); - $result = $query->execute(); - $parents = array(); - while ($file = $result->fetchRow()) { - $children[] = array('source' => $file['fileid'], 'file_path' => $file['name']); + $qb = Server::get(IDBConnection::class)->getQueryBuilder(); + + $parents = array_map(function ($parent) use ($qb) { + return $qb->createNamedParameter($parent); + }, $parents); + + $qb->select('`fileid', 'name', '`mimetype') + ->from('filecache') + ->where( + $qb->expr()->in('parent', $parents) + ); + + $result = $qb->execute(); + + $parents = []; + while ($file = $result->fetch()) { + $children[] = ['source' => $file['fileid'], 'file_path' => $file['name']]; // If a child folder is found look inside it - if ((int) $file['mimetype'] === $mimetype) { + if ((int)$file['mimetype'] === $mimetype) { $parents[] = $file['fileid']; } } + $result->closeCursor(); } return $children; } - } |