aboutsummaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/Comments/CommentNode.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dav/lib/Comments/CommentNode.php')
-rw-r--r--apps/dav/lib/Comments/CommentNode.php134
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,
]
];