diff options
Diffstat (limited to 'apps/dav/lib/Comments/CommentNode.php')
-rw-r--r-- | apps/dav/lib/Comments/CommentNode.php | 134 |
1 files changed, 44 insertions, 90 deletions
diff --git a/apps/dav/lib/Comments/CommentNode.php b/apps/dav/lib/Comments/CommentNode.php index 1fa8e057b99..5dbefa82d93 100644 --- a/apps/dav/lib/Comments/CommentNode.php +++ b/apps/dav/lib/Comments/CommentNode.php @@ -1,103 +1,59 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\DAV\Comments; - use OCP\Comments\IComment; use OCP\Comments\ICommentsManager; use OCP\Comments\MessageTooLongException; -use OCP\ILogger; use OCP\IUserManager; use OCP\IUserSession; +use Psr\Log\LoggerInterface; use Sabre\DAV\Exception\BadRequest; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\MethodNotAllowed; use Sabre\DAV\PropPatch; class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { - const NS_OWNCLOUD = 'http://owncloud.org/ns'; - - const PROPERTY_NAME_UNREAD = '{http://owncloud.org/ns}isUnread'; - const PROPERTY_NAME_MESSAGE = '{http://owncloud.org/ns}message'; - const PROPERTY_NAME_ACTOR_DISPLAYNAME = '{http://owncloud.org/ns}actorDisplayName'; - const PROPERTY_NAME_MENTIONS = '{http://owncloud.org/ns}mentions'; - const PROPERTY_NAME_MENTION = '{http://owncloud.org/ns}mention'; - const PROPERTY_NAME_MENTION_TYPE = '{http://owncloud.org/ns}mentionType'; - const PROPERTY_NAME_MENTION_ID = '{http://owncloud.org/ns}mentionId'; - const PROPERTY_NAME_MENTION_DISPLAYNAME = '{http://owncloud.org/ns}mentionDisplayName'; - - /** @var IComment */ - public $comment; - - /** @var ICommentsManager */ - protected $commentsManager; + public const NS_OWNCLOUD = 'http://owncloud.org/ns'; - /** @var ILogger */ - protected $logger; + public const PROPERTY_NAME_UNREAD = '{http://owncloud.org/ns}isUnread'; + public const PROPERTY_NAME_MESSAGE = '{http://owncloud.org/ns}message'; + public const PROPERTY_NAME_ACTOR_DISPLAYNAME = '{http://owncloud.org/ns}actorDisplayName'; + public const PROPERTY_NAME_MENTIONS = '{http://owncloud.org/ns}mentions'; + public const PROPERTY_NAME_MENTION = '{http://owncloud.org/ns}mention'; + public const PROPERTY_NAME_MENTION_TYPE = '{http://owncloud.org/ns}mentionType'; + public const PROPERTY_NAME_MENTION_ID = '{http://owncloud.org/ns}mentionId'; + public const PROPERTY_NAME_MENTION_DISPLAYNAME = '{http://owncloud.org/ns}mentionDisplayName'; /** @var array list of properties with key being their name and value their setter */ protected $properties = []; - /** @var IUserManager */ - protected $userManager; - - /** @var IUserSession */ - protected $userSession; - /** * CommentNode constructor. - * - * @param ICommentsManager $commentsManager - * @param IComment $comment - * @param IUserManager $userManager - * @param IUserSession $userSession - * @param ILogger $logger */ public function __construct( - ICommentsManager $commentsManager, - IComment $comment, - IUserManager $userManager, - IUserSession $userSession, - ILogger $logger + protected ICommentsManager $commentsManager, + public IComment $comment, + protected IUserManager $userManager, + protected IUserSession $userSession, + protected LoggerInterface $logger, ) { - $this->commentsManager = $commentsManager; - $this->comment = $comment; - $this->logger = $logger; - $methods = get_class_methods($this->comment); - $methods = array_filter($methods, function($name){ - return strpos($name, 'get') === 0; + $methods = array_filter($methods, function ($name) { + return str_starts_with($name, 'get'); }); - foreach($methods as $getter) { - if($getter === 'getMentions') { + foreach ($methods as $getter) { + if ($getter === 'getMentions') { continue; // special treatment } - $name = '{'.self::NS_OWNCLOUD.'}' . lcfirst(substr($getter, 3)); + $name = '{' . self::NS_OWNCLOUD . '}' . lcfirst(substr($getter, 3)); $this->properties[$name] = $getter; } - $this->userManager = $userManager; - $this->userSession = $userSession; } /** @@ -105,7 +61,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * * @return array */ - static public function getPropertyNames() { + public static function getPropertyNames() { return [ '{http://owncloud.org/ns}id', '{http://owncloud.org/ns}parentId', @@ -132,7 +88,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { protected function checkWriteAccessOnComment() { $user = $this->userSession->getUser(); - if( $this->comment->getActorType() !== 'users' + if ($this->comment->getActorType() !== 'users' || is_null($user) || $this->comment->getActorId() !== $user->getUID() ) { @@ -145,7 +101,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * * @return void */ - function delete() { + public function delete() { $this->checkWriteAccessOnComment(); $this->commentsManager->delete($this->comment->getId()); } @@ -157,7 +113,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * * @return string */ - function getName() { + public function getName() { return $this->comment->getId(); } @@ -167,16 +123,14 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * @param string $name The new name * @throws MethodNotAllowed */ - function setName($name) { + public function setName($name) { throw new MethodNotAllowed(); } /** * Returns the last modification time, as a unix timestamp - * - * @return int */ - function getLastModified() { + public function getLastModified(): ?int { return null; } @@ -195,8 +149,8 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { $this->commentsManager->save($this->comment); return true; } catch (\Exception $e) { - $this->logger->logException($e, ['app' => 'dav/comments']); - if($e instanceof MessageTooLongException) { + $this->logger->error($e->getMessage(), ['app' => 'dav/comments', 'exception' => $e]); + if ($e instanceof MessageTooLongException) { $msg = 'Message exceeds allowed character limit of '; throw new BadRequest($msg . IComment::MAX_MESSAGE_LENGTH, 0, $e); } @@ -216,7 +170,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * @param PropPatch $propPatch * @return void */ - function propPatch(PropPatch $propPatch) { + public function propPatch(PropPatch $propPatch) { // other properties than 'message' are read only $propPatch->handle(self::PROPERTY_NAME_MESSAGE, [$this, 'updateComment']); } @@ -236,18 +190,18 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * @param array $properties * @return array */ - function getProperties($properties) { + public function getProperties($properties) { $properties = array_keys($this->properties); $result = []; - foreach($properties as $property) { + foreach ($properties as $property) { $getter = $this->properties[$property]; - if(method_exists($this->comment, $getter)) { + if (method_exists($this->comment, $getter)) { $result[$property] = $this->comment->$getter(); } } - if($this->comment->getActorType() === 'users') { + if ($this->comment->getActorType() === 'users') { $user = $this->userManager->get($this->comment->getActorId()); $displayName = is_null($user) ? null : $user->getDisplayName(); $result[self::PROPERTY_NAME_ACTOR_DISPLAYNAME] = $displayName; @@ -256,14 +210,14 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { $result[self::PROPERTY_NAME_MENTIONS] = $this->composeMentionsPropertyValue(); $unread = null; - $user = $this->userSession->getUser(); - if(!is_null($user)) { + $user = $this->userSession->getUser(); + if (!is_null($user)) { $readUntil = $this->commentsManager->getReadMark( $this->comment->getObjectType(), $this->comment->getObjectId(), $user ); - if(is_null($readUntil)) { + if (is_null($readUntil)) { $unread = 'true'; } else { $unread = $this->comment->getCreationDateTime() > $readUntil; @@ -284,19 +238,19 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { * @return array */ protected function composeMentionsPropertyValue() { - return array_map(function($mention) { + return array_map(function ($mention) { try { $displayName = $this->commentsManager->resolveDisplayName($mention['type'], $mention['id']); } catch (\OutOfBoundsException $e) { - $this->logger->logException($e); + $this->logger->error($e->getMessage(), ['exception' => $e]); // No displayname, upon client's discretion what to display. $displayName = ''; } return [ self::PROPERTY_NAME_MENTION => [ - self::PROPERTY_NAME_MENTION_TYPE => $mention['type'], - self::PROPERTY_NAME_MENTION_ID => $mention['id'], + self::PROPERTY_NAME_MENTION_TYPE => $mention['type'], + self::PROPERTY_NAME_MENTION_ID => $mention['id'], self::PROPERTY_NAME_MENTION_DISPLAYNAME => $displayName, ] ]; |