diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-05-04 21:58:08 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-05-16 12:47:01 +0200 |
commit | f50ce8b3bd3e119167f48972f5e5a55686145d72 (patch) | |
tree | 080b02c0ce910dee4f330b766d245398e67fcc78 | |
parent | b1c8fc38a2713dae12f796c1f48e6cb6088bd2cf (diff) | |
download | nextcloud-server-f50ce8b3bd3e119167f48972f5e5a55686145d72.tar.gz nextcloud-server-f50ce8b3bd3e119167f48972f5e5a55686145d72.zip |
chore: polish SystemTagsInUseCollection
- DI SystemTagManager
- add some comments and doc
- catch NoUserException
- add return type hints
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | apps/dav/lib/RootCollection.php | 5 | ||||
-rw-r--r-- | apps/dav/lib/SystemTag/SystemTagsInUseCollection.php | 40 |
2 files changed, 33 insertions, 12 deletions
diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index ffc2c262cae..6e009875ddc 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -133,10 +133,7 @@ class RootCollection extends SimpleCollection { $groupManager, \OC::$server->getEventDispatcher() ); - $systemTagInUseCollection = new SystemTag\SystemTagsInUseCollection( - $userSession, - $rootFolder - ); + $systemTagInUseCollection = \OCP\Server::get(SystemTag\SystemTagsInUseCollection::class); $commentsCollection = new Comments\RootCollection( \OC::$server->getCommentsManager(), $userManager, diff --git a/apps/dav/lib/SystemTag/SystemTagsInUseCollection.php b/apps/dav/lib/SystemTag/SystemTagsInUseCollection.php index 790ebee792f..aa45e7d8f07 100644 --- a/apps/dav/lib/SystemTag/SystemTagsInUseCollection.php +++ b/apps/dav/lib/SystemTag/SystemTagsInUseCollection.php @@ -27,20 +27,31 @@ declare(strict_types=1); namespace OCA\DAV\SystemTag; use OC\SystemTag\SystemTag; +use OC\User\NoUserException; use OCP\Files\IRootFolder; +use OCP\Files\NotPermittedException; use OCP\IUserSession; use OCP\SystemTag\ISystemTagManager; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\NotFound; +use Sabre\DAV\SimpleCollection; -class SystemTagsInUseCollection extends \Sabre\DAV\SimpleCollection { +class SystemTagsInUseCollection extends SimpleCollection { protected IUserSession $userSession; protected IRootFolder $rootFolder; protected string $mediaType; + private ISystemTagManager $systemTagManager; - public function __construct(IUserSession $userSession, IRootFolder $rootFolder, string $mediaType = '') { + /** @noinspection PhpMissingParentConstructorInspection */ + public function __construct( + IUserSession $userSession, + IRootFolder $rootFolder, + ISystemTagManager $systemTagManager, + string $mediaType = '' + ) { $this->userSession = $userSession; $this->rootFolder = $rootFolder; + $this->systemTagManager = $systemTagManager; $this->mediaType = $mediaType; $this->name = 'systemtags-assigned'; if ($this->mediaType != '') { @@ -52,25 +63,38 @@ class SystemTagsInUseCollection extends \Sabre\DAV\SimpleCollection { throw new Forbidden('Permission denied to rename this collection'); } - public function getChild($name) { + public function getChild($name): self { if ($this->mediaType !== '') { throw new NotFound('Invalid media type'); } - return new self($this->userSession, $this->rootFolder, $name); + return new self($this->userSession, $this->rootFolder, $this->systemTagManager, $name); } - public function getChildren() { + /** + * @return SystemTagNode[] + * @throws NotPermittedException + * @throws Forbidden + */ + public function getChildren(): array { $user = $this->userSession->getUser(); - if ($user === null) { + $userFolder = null; + try { + if ($user) { + $userFolder = $this->rootFolder->getUserFolder($user->getUID()); + } + } catch (NoUserException) { + // will throw a Sabre exception in the next step. + } + if ($user === null || $userFolder === null) { throw new Forbidden('Permission denied to read this collection'); } - $userFolder = $this->rootFolder->getUserFolder($user->getUID()); $result = $userFolder->getSystemTags($this->mediaType); $children = []; foreach ($result as $tagData) { $tag = new SystemTag((string)$tagData['id'], $tagData['name'], (bool)$tagData['visibility'], (bool)$tagData['editable']); - $node = new SystemTagNode($tag, $user, false, \OCP\Server::get(ISystemTagManager::class)); + // read only, so we can submit the isAdmin parameter as false generally + $node = new SystemTagNode($tag, $user, false, $this->systemTagManager); $node->setNumberOfFiles($tagData['number_files']); $node->setReferenceFileId($tagData['ref_file_id']); $children[] = $node; |