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\DAVACL; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler/** 10*a1a3b679SAndreas Boehler * This node represents a list of notifications. 11*a1a3b679SAndreas Boehler * 12*a1a3b679SAndreas Boehler * It provides no additional functionality, but you must implement this 13*a1a3b679SAndreas Boehler * interface to allow the Notifications plugin to mark the collection 14*a1a3b679SAndreas Boehler * as a notifications collection. 15*a1a3b679SAndreas Boehler * 16*a1a3b679SAndreas Boehler * This collection should only return Sabre\CalDAV\Notifications\INode nodes as 17*a1a3b679SAndreas Boehler * its children. 18*a1a3b679SAndreas Boehler * 19*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 20*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 21*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 22*a1a3b679SAndreas Boehler */ 23*a1a3b679SAndreas Boehlerclass Collection extends DAV\Collection implements ICollection, DAVACL\IACL { 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler /** 26*a1a3b679SAndreas Boehler * The notification backend 27*a1a3b679SAndreas Boehler * 28*a1a3b679SAndreas Boehler * @var Sabre\CalDAV\Backend\NotificationSupport 29*a1a3b679SAndreas Boehler */ 30*a1a3b679SAndreas Boehler protected $caldavBackend; 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler /** 33*a1a3b679SAndreas Boehler * Principal uri 34*a1a3b679SAndreas Boehler * 35*a1a3b679SAndreas Boehler * @var string 36*a1a3b679SAndreas Boehler */ 37*a1a3b679SAndreas Boehler protected $principalUri; 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler /** 40*a1a3b679SAndreas Boehler * Constructor 41*a1a3b679SAndreas Boehler * 42*a1a3b679SAndreas Boehler * @param CalDAV\Backend\NotificationSupport $caldavBackend 43*a1a3b679SAndreas Boehler * @param string $principalUri 44*a1a3b679SAndreas Boehler */ 45*a1a3b679SAndreas Boehler function __construct(CalDAV\Backend\NotificationSupport $caldavBackend, $principalUri) { 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler $this->caldavBackend = $caldavBackend; 48*a1a3b679SAndreas Boehler $this->principalUri = $principalUri; 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler } 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler /** 53*a1a3b679SAndreas Boehler * Returns all notifications for a principal 54*a1a3b679SAndreas Boehler * 55*a1a3b679SAndreas Boehler * @return array 56*a1a3b679SAndreas Boehler */ 57*a1a3b679SAndreas Boehler function getChildren() { 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler $children = []; 60*a1a3b679SAndreas Boehler $notifications = $this->caldavBackend->getNotificationsForPrincipal($this->principalUri); 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler foreach ($notifications as $notification) { 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler $children[] = new Node( 65*a1a3b679SAndreas Boehler $this->caldavBackend, 66*a1a3b679SAndreas Boehler $this->principalUri, 67*a1a3b679SAndreas Boehler $notification 68*a1a3b679SAndreas Boehler ); 69*a1a3b679SAndreas Boehler } 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler return $children; 72*a1a3b679SAndreas Boehler 73*a1a3b679SAndreas Boehler } 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler /** 76*a1a3b679SAndreas Boehler * Returns the name of this object 77*a1a3b679SAndreas Boehler * 78*a1a3b679SAndreas Boehler * @return string 79*a1a3b679SAndreas Boehler */ 80*a1a3b679SAndreas Boehler function getName() { 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler return 'notifications'; 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler } 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler /** 87*a1a3b679SAndreas Boehler * Returns the owner principal 88*a1a3b679SAndreas Boehler * 89*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 90*a1a3b679SAndreas Boehler * 91*a1a3b679SAndreas Boehler * @return string|null 92*a1a3b679SAndreas Boehler */ 93*a1a3b679SAndreas Boehler function getOwner() { 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler return $this->principalUri; 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler } 98*a1a3b679SAndreas Boehler 99*a1a3b679SAndreas Boehler /** 100*a1a3b679SAndreas Boehler * Returns a group principal 101*a1a3b679SAndreas Boehler * 102*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 103*a1a3b679SAndreas Boehler * 104*a1a3b679SAndreas Boehler * @return string|null 105*a1a3b679SAndreas Boehler */ 106*a1a3b679SAndreas Boehler function getGroup() { 107*a1a3b679SAndreas Boehler 108*a1a3b679SAndreas Boehler return null; 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler } 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler /** 113*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 114*a1a3b679SAndreas Boehler * 115*a1a3b679SAndreas Boehler * Each ACE has the following properties: 116*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 117*a1a3b679SAndreas Boehler * currently the only supported privileges 118*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 119*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 120*a1a3b679SAndreas Boehler * be updated. 121*a1a3b679SAndreas Boehler * 122*a1a3b679SAndreas Boehler * @return array 123*a1a3b679SAndreas Boehler */ 124*a1a3b679SAndreas Boehler function getACL() { 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler return [ 127*a1a3b679SAndreas Boehler [ 128*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 129*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 130*a1a3b679SAndreas Boehler 'protected' => true, 131*a1a3b679SAndreas Boehler ], 132*a1a3b679SAndreas Boehler [ 133*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 134*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 135*a1a3b679SAndreas Boehler 'protected' => true, 136*a1a3b679SAndreas Boehler ] 137*a1a3b679SAndreas Boehler ]; 138*a1a3b679SAndreas Boehler 139*a1a3b679SAndreas Boehler } 140*a1a3b679SAndreas Boehler 141*a1a3b679SAndreas Boehler /** 142*a1a3b679SAndreas Boehler * Updates the ACL 143*a1a3b679SAndreas Boehler * 144*a1a3b679SAndreas Boehler * This method will receive a list of new ACE's as an array argument. 145*a1a3b679SAndreas Boehler * 146*a1a3b679SAndreas Boehler * @param array $acl 147*a1a3b679SAndreas Boehler * @return void 148*a1a3b679SAndreas Boehler */ 149*a1a3b679SAndreas Boehler function setACL(array $acl) { 150*a1a3b679SAndreas Boehler 151*a1a3b679SAndreas Boehler throw new DAV\Exception\NotImplemented('Updating ACLs is not implemented here'); 152*a1a3b679SAndreas Boehler 153*a1a3b679SAndreas Boehler } 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler /** 156*a1a3b679SAndreas Boehler * Returns the list of supported privileges for this node. 157*a1a3b679SAndreas Boehler * 158*a1a3b679SAndreas Boehler * The returned data structure is a list of nested privileges. 159*a1a3b679SAndreas Boehler * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple 160*a1a3b679SAndreas Boehler * standard structure. 161*a1a3b679SAndreas Boehler * 162*a1a3b679SAndreas Boehler * If null is returned from this method, the default privilege set is used, 163*a1a3b679SAndreas Boehler * which is fine for most common usecases. 164*a1a3b679SAndreas Boehler * 165*a1a3b679SAndreas Boehler * @return array|null 166*a1a3b679SAndreas Boehler */ 167*a1a3b679SAndreas Boehler function getSupportedPrivilegeSet() { 168*a1a3b679SAndreas Boehler 169*a1a3b679SAndreas Boehler return null; 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler } 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler} 174