1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Notifications; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV; 6*a1a3b679SAndreas Boehleruse Sabre\CalDAV; 7*a1a3b679SAndreas Boehleruse Sabre\CalDAV\Xml\Notification\NotificationInterface; 8*a1a3b679SAndreas Boehleruse Sabre\DAVACL; 9*a1a3b679SAndreas Boehler 10*a1a3b679SAndreas Boehler/** 11*a1a3b679SAndreas Boehler * This node represents a single notification. 12*a1a3b679SAndreas Boehler * 13*a1a3b679SAndreas Boehler * The signature is mostly identical to that of Sabre\DAV\IFile, but the get() method 14*a1a3b679SAndreas Boehler * MUST return an xml document that matches the requirements of the 15*a1a3b679SAndreas Boehler * 'caldav-notifications.txt' spec. 16*a1a3b679SAndreas Boehler * 17*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 18*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 19*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 20*a1a3b679SAndreas Boehler */ 21*a1a3b679SAndreas Boehlerclass Node extends DAV\File implements INode, DAVACL\IACL { 22*a1a3b679SAndreas Boehler 23*a1a3b679SAndreas Boehler /** 24*a1a3b679SAndreas Boehler * The notification backend 25*a1a3b679SAndreas Boehler * 26*a1a3b679SAndreas Boehler * @var Sabre\CalDAV\Backend\NotificationSupport 27*a1a3b679SAndreas Boehler */ 28*a1a3b679SAndreas Boehler protected $caldavBackend; 29*a1a3b679SAndreas Boehler 30*a1a3b679SAndreas Boehler /** 31*a1a3b679SAndreas Boehler * The actual notification 32*a1a3b679SAndreas Boehler * 33*a1a3b679SAndreas Boehler * @var Sabre\CalDAV\Notifications\INotificationType 34*a1a3b679SAndreas Boehler */ 35*a1a3b679SAndreas Boehler protected $notification; 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler /** 38*a1a3b679SAndreas Boehler * Owner principal of the notification 39*a1a3b679SAndreas Boehler * 40*a1a3b679SAndreas Boehler * @var string 41*a1a3b679SAndreas Boehler */ 42*a1a3b679SAndreas Boehler protected $principalUri; 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler /** 45*a1a3b679SAndreas Boehler * Constructor 46*a1a3b679SAndreas Boehler * 47*a1a3b679SAndreas Boehler * @param CalDAV\Backend\NotificationSupport $caldavBackend 48*a1a3b679SAndreas Boehler * @param string $principalUri 49*a1a3b679SAndreas Boehler * @param NotificationInterface $notification 50*a1a3b679SAndreas Boehler */ 51*a1a3b679SAndreas Boehler function __construct(CalDAV\Backend\NotificationSupport $caldavBackend, $principalUri, NotificationInterface $notification) { 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler $this->caldavBackend = $caldavBackend; 54*a1a3b679SAndreas Boehler $this->principalUri = $principalUri; 55*a1a3b679SAndreas Boehler $this->notification = $notification; 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler } 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler /** 60*a1a3b679SAndreas Boehler * Returns the path name for this notification 61*a1a3b679SAndreas Boehler * 62*a1a3b679SAndreas Boehler * @return id 63*a1a3b679SAndreas Boehler */ 64*a1a3b679SAndreas Boehler function getName() { 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler return $this->notification->getId() . '.xml'; 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler /** 71*a1a3b679SAndreas Boehler * Returns the etag for the notification. 72*a1a3b679SAndreas Boehler * 73*a1a3b679SAndreas Boehler * The etag must be surrounded by litteral double-quotes. 74*a1a3b679SAndreas Boehler * 75*a1a3b679SAndreas Boehler * @return string 76*a1a3b679SAndreas Boehler */ 77*a1a3b679SAndreas Boehler function getETag() { 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler return $this->notification->getETag(); 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler } 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler /** 84*a1a3b679SAndreas Boehler * This method must return an xml element, using the 85*a1a3b679SAndreas Boehler * Sabre\CalDAV\Notifications\INotificationType classes. 86*a1a3b679SAndreas Boehler * 87*a1a3b679SAndreas Boehler * @return INotificationType 88*a1a3b679SAndreas Boehler */ 89*a1a3b679SAndreas Boehler function getNotificationType() { 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler return $this->notification; 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler } 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler /** 96*a1a3b679SAndreas Boehler * Deletes this notification 97*a1a3b679SAndreas Boehler * 98*a1a3b679SAndreas Boehler * @return void 99*a1a3b679SAndreas Boehler */ 100*a1a3b679SAndreas Boehler function delete() { 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler $this->caldavBackend->deleteNotification($this->getOwner(), $this->notification); 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler } 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler /** 107*a1a3b679SAndreas Boehler * Returns the owner principal 108*a1a3b679SAndreas Boehler * 109*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 110*a1a3b679SAndreas Boehler * 111*a1a3b679SAndreas Boehler * @return string|null 112*a1a3b679SAndreas Boehler */ 113*a1a3b679SAndreas Boehler function getOwner() { 114*a1a3b679SAndreas Boehler 115*a1a3b679SAndreas Boehler return $this->principalUri; 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler } 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler /** 120*a1a3b679SAndreas Boehler * Returns a group principal 121*a1a3b679SAndreas Boehler * 122*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 123*a1a3b679SAndreas Boehler * 124*a1a3b679SAndreas Boehler * @return string|null 125*a1a3b679SAndreas Boehler */ 126*a1a3b679SAndreas Boehler function getGroup() { 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler return null; 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler } 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler /** 133*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 134*a1a3b679SAndreas Boehler * 135*a1a3b679SAndreas Boehler * Each ACE has the following properties: 136*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 137*a1a3b679SAndreas Boehler * currently the only supported privileges 138*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 139*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 140*a1a3b679SAndreas Boehler * be updated. 141*a1a3b679SAndreas Boehler * 142*a1a3b679SAndreas Boehler * @return array 143*a1a3b679SAndreas Boehler */ 144*a1a3b679SAndreas Boehler function getACL() { 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler return [ 147*a1a3b679SAndreas Boehler [ 148*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 149*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 150*a1a3b679SAndreas Boehler 'protected' => true, 151*a1a3b679SAndreas Boehler ], 152*a1a3b679SAndreas Boehler [ 153*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 154*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 155*a1a3b679SAndreas Boehler 'protected' => true, 156*a1a3b679SAndreas Boehler ] 157*a1a3b679SAndreas Boehler ]; 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler } 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler /** 162*a1a3b679SAndreas Boehler * Updates the ACL 163*a1a3b679SAndreas Boehler * 164*a1a3b679SAndreas Boehler * This method will receive a list of new ACE's as an array argument. 165*a1a3b679SAndreas Boehler * 166*a1a3b679SAndreas Boehler * @param array $acl 167*a1a3b679SAndreas Boehler * @return void 168*a1a3b679SAndreas Boehler */ 169*a1a3b679SAndreas Boehler function setACL(array $acl) { 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler throw new DAV\Exception\NotImplemented('Updating ACLs is not implemented here'); 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler } 174*a1a3b679SAndreas Boehler 175*a1a3b679SAndreas Boehler /** 176*a1a3b679SAndreas Boehler * Returns the list of supported privileges for this node. 177*a1a3b679SAndreas Boehler * 178*a1a3b679SAndreas Boehler * The returned data structure is a list of nested privileges. 179*a1a3b679SAndreas Boehler * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple 180*a1a3b679SAndreas Boehler * standard structure. 181*a1a3b679SAndreas Boehler * 182*a1a3b679SAndreas Boehler * If null is returned from this method, the default privilege set is used, 183*a1a3b679SAndreas Boehler * which is fine for most common usecases. 184*a1a3b679SAndreas Boehler * 185*a1a3b679SAndreas Boehler * @return array|null 186*a1a3b679SAndreas Boehler */ 187*a1a3b679SAndreas Boehler function getSupportedPrivilegeSet() { 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler return null; 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler } 192*a1a3b679SAndreas Boehler 193*a1a3b679SAndreas Boehler} 194