|
|
|
@ -26,12 +26,17 @@ use OCP\Comments\IComment; |
|
|
|
use OCP\Comments\ICommentsManager; |
|
|
|
use OCP\ILogger; |
|
|
|
use OCP\IUserManager; |
|
|
|
use OCP\IUserSession; |
|
|
|
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'; |
|
|
|
|
|
|
|
/** @var IComment */ |
|
|
|
public $comment; |
|
|
|
|
|
|
|
@ -47,18 +52,23 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { |
|
|
|
/** @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 |
|
|
|
) { |
|
|
|
$this->commentsManager = $commentsManager; |
|
|
|
@ -74,6 +84,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { |
|
|
|
$this->properties[$name] = $getter; |
|
|
|
} |
|
|
|
$this->userManager = $userManager; |
|
|
|
$this->userSession = $userSession; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -87,15 +98,17 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { |
|
|
|
'{http://owncloud.org/ns}parentId', |
|
|
|
'{http://owncloud.org/ns}topmostParentId', |
|
|
|
'{http://owncloud.org/ns}childrenCount', |
|
|
|
'{http://owncloud.org/ns}message', |
|
|
|
'{http://owncloud.org/ns}verb', |
|
|
|
'{http://owncloud.org/ns}actorType', |
|
|
|
'{http://owncloud.org/ns}actorId', |
|
|
|
'{http://owncloud.org/ns}actorDisplayName', |
|
|
|
'{http://owncloud.org/ns}creationDateTime', |
|
|
|
'{http://owncloud.org/ns}latestChildDateTime', |
|
|
|
'{http://owncloud.org/ns}objectType', |
|
|
|
'{http://owncloud.org/ns}objectId', |
|
|
|
// re-used property names are defined as constants
|
|
|
|
self::PROPERTY_NAME_MESSAGE, |
|
|
|
self::PROPERTY_NAME_ACTOR_DISPLAYNAME, |
|
|
|
self::PROPERTY_NAME_UNREAD |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
@ -169,7 +182,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { |
|
|
|
*/ |
|
|
|
function propPatch(PropPatch $propPatch) { |
|
|
|
// other properties than 'message' are read only
|
|
|
|
$propPatch->handle('{'.self::NS_OWNCLOUD.'}message', [$this, 'updateComment']); |
|
|
|
$propPatch->handle(self::PROPERTY_NAME_MESSAGE, [$this, 'updateComment']); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -201,8 +214,26 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { |
|
|
|
if($this->comment->getActorType() === 'users') { |
|
|
|
$user = $this->userManager->get($this->comment->getActorId()); |
|
|
|
$displayName = is_null($user) ? null : $user->getDisplayName(); |
|
|
|
$result['{' . self::NS_OWNCLOUD . '}actorDisplayName'] = $displayName; |
|
|
|
$result[self::PROPERTY_NAME_ACTOR_DISPLAYNAME] = $displayName; |
|
|
|
} |
|
|
|
|
|
|
|
$unread = null; |
|
|
|
$user = $this->userSession->getUser(); |
|
|
|
if(!is_null($user)) { |
|
|
|
$readUntil = $this->commentsManager->getReadMark( |
|
|
|
$this->comment->getObjectType(), |
|
|
|
$this->comment->getObjectId(), |
|
|
|
$user |
|
|
|
); |
|
|
|
if(is_null($readUntil)) { |
|
|
|
$unread = 'true'; |
|
|
|
} else { |
|
|
|
$unread = $this->comment->getCreationDateTime() > $readUntil; |
|
|
|
// re-format for output
|
|
|
|
$unread = $unread ? 'true' : 'false'; |
|
|
|
} |
|
|
|
} |
|
|
|
$result[self::PROPERTY_NAME_UNREAD] = $unread; |
|
|
|
|
|
|
|
return $result; |
|
|
|
} |
|
|
|
|