1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Schedule; 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 * The CalDAV scheduling outbox 11*a1a3b679SAndreas Boehler * 12*a1a3b679SAndreas Boehler * The outbox is mainly used as an endpoint in the tree for a client to do 13*a1a3b679SAndreas Boehler * free-busy requests. This functionality is completely handled by the 14*a1a3b679SAndreas Boehler * Scheduling plugin, so this object is actually mostly static. 15*a1a3b679SAndreas Boehler * 16*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 17*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 18*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 19*a1a3b679SAndreas Boehler */ 20*a1a3b679SAndreas Boehlerclass Outbox extends DAV\Collection implements IOutbox { 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler /** 23*a1a3b679SAndreas Boehler * The principal Uri 24*a1a3b679SAndreas Boehler * 25*a1a3b679SAndreas Boehler * @var string 26*a1a3b679SAndreas Boehler */ 27*a1a3b679SAndreas Boehler protected $principalUri; 28*a1a3b679SAndreas Boehler 29*a1a3b679SAndreas Boehler /** 30*a1a3b679SAndreas Boehler * Constructor 31*a1a3b679SAndreas Boehler * 32*a1a3b679SAndreas Boehler * @param string $principalUri 33*a1a3b679SAndreas Boehler */ 34*a1a3b679SAndreas Boehler function __construct($principalUri) { 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler $this->principalUri = $principalUri; 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler } 39*a1a3b679SAndreas Boehler 40*a1a3b679SAndreas Boehler /** 41*a1a3b679SAndreas Boehler * Returns the name of the node. 42*a1a3b679SAndreas Boehler * 43*a1a3b679SAndreas Boehler * This is used to generate the url. 44*a1a3b679SAndreas Boehler * 45*a1a3b679SAndreas Boehler * @return string 46*a1a3b679SAndreas Boehler */ 47*a1a3b679SAndreas Boehler function getName() { 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler return 'outbox'; 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler } 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler /** 54*a1a3b679SAndreas Boehler * Returns an array with all the child nodes 55*a1a3b679SAndreas Boehler * 56*a1a3b679SAndreas Boehler * @return \Sabre\DAV\INode[] 57*a1a3b679SAndreas Boehler */ 58*a1a3b679SAndreas Boehler function getChildren() { 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler return []; 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler } 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler /** 65*a1a3b679SAndreas Boehler * Returns the owner principal 66*a1a3b679SAndreas Boehler * 67*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 68*a1a3b679SAndreas Boehler * 69*a1a3b679SAndreas Boehler * @return string|null 70*a1a3b679SAndreas Boehler */ 71*a1a3b679SAndreas Boehler function getOwner() { 72*a1a3b679SAndreas Boehler 73*a1a3b679SAndreas Boehler return $this->principalUri; 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler } 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler /** 78*a1a3b679SAndreas Boehler * Returns a group principal 79*a1a3b679SAndreas Boehler * 80*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 81*a1a3b679SAndreas Boehler * 82*a1a3b679SAndreas Boehler * @return string|null 83*a1a3b679SAndreas Boehler */ 84*a1a3b679SAndreas Boehler function getGroup() { 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler return null; 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler } 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler /** 91*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 92*a1a3b679SAndreas Boehler * 93*a1a3b679SAndreas Boehler * Each ACE has the following properties: 94*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 95*a1a3b679SAndreas Boehler * currently the only supported privileges 96*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 97*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 98*a1a3b679SAndreas Boehler * be updated. 99*a1a3b679SAndreas Boehler * 100*a1a3b679SAndreas Boehler * @return array 101*a1a3b679SAndreas Boehler */ 102*a1a3b679SAndreas Boehler function getACL() { 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler return [ 105*a1a3b679SAndreas Boehler [ 106*a1a3b679SAndreas Boehler 'privilege' => '{' . CalDAV\Plugin::NS_CALDAV . '}schedule-query-freebusy', 107*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 108*a1a3b679SAndreas Boehler 'protected' => true, 109*a1a3b679SAndreas Boehler ], 110*a1a3b679SAndreas Boehler [ 111*a1a3b679SAndreas Boehler 'privilege' => '{' . CalDAV\Plugin::NS_CALDAV . '}schedule-post-vevent', 112*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 113*a1a3b679SAndreas Boehler 'protected' => true, 114*a1a3b679SAndreas Boehler ], 115*a1a3b679SAndreas Boehler [ 116*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 117*a1a3b679SAndreas Boehler 'principal' => $this->getOwner(), 118*a1a3b679SAndreas Boehler 'protected' => true, 119*a1a3b679SAndreas Boehler ], 120*a1a3b679SAndreas Boehler [ 121*a1a3b679SAndreas Boehler 'privilege' => '{' . CalDAV\Plugin::NS_CALDAV . '}schedule-query-freebusy', 122*a1a3b679SAndreas Boehler 'principal' => $this->getOwner() . '/calendar-proxy-write', 123*a1a3b679SAndreas Boehler 'protected' => true, 124*a1a3b679SAndreas Boehler ], 125*a1a3b679SAndreas Boehler [ 126*a1a3b679SAndreas Boehler 'privilege' => '{' . CalDAV\Plugin::NS_CALDAV . '}schedule-post-vevent', 127*a1a3b679SAndreas Boehler 'principal' => $this->getOwner() . '/calendar-proxy-write', 128*a1a3b679SAndreas Boehler 'protected' => true, 129*a1a3b679SAndreas Boehler ], 130*a1a3b679SAndreas Boehler [ 131*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 132*a1a3b679SAndreas Boehler 'principal' => $this->getOwner() . '/calendar-proxy-read', 133*a1a3b679SAndreas Boehler 'protected' => true, 134*a1a3b679SAndreas Boehler ], 135*a1a3b679SAndreas Boehler [ 136*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 137*a1a3b679SAndreas Boehler 'principal' => $this->getOwner() . '/calendar-proxy-write', 138*a1a3b679SAndreas Boehler 'protected' => true, 139*a1a3b679SAndreas Boehler ], 140*a1a3b679SAndreas Boehler ]; 141*a1a3b679SAndreas Boehler 142*a1a3b679SAndreas Boehler } 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler /** 145*a1a3b679SAndreas Boehler * Updates the ACL 146*a1a3b679SAndreas Boehler * 147*a1a3b679SAndreas Boehler * This method will receive a list of new ACE's. 148*a1a3b679SAndreas Boehler * 149*a1a3b679SAndreas Boehler * @param array $acl 150*a1a3b679SAndreas Boehler * @return void 151*a1a3b679SAndreas Boehler */ 152*a1a3b679SAndreas Boehler function setACL(array $acl) { 153*a1a3b679SAndreas Boehler 154*a1a3b679SAndreas Boehler throw new DAV\Exception\MethodNotAllowed('You\'re not allowed to update the ACL'); 155*a1a3b679SAndreas Boehler 156*a1a3b679SAndreas Boehler } 157*a1a3b679SAndreas Boehler 158*a1a3b679SAndreas Boehler /** 159*a1a3b679SAndreas Boehler * Returns the list of supported privileges for this node. 160*a1a3b679SAndreas Boehler * 161*a1a3b679SAndreas Boehler * The returned data structure is a list of nested privileges. 162*a1a3b679SAndreas Boehler * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple 163*a1a3b679SAndreas Boehler * standard structure. 164*a1a3b679SAndreas Boehler * 165*a1a3b679SAndreas Boehler * If null is returned from this method, the default privilege set is used, 166*a1a3b679SAndreas Boehler * which is fine for most common usecases. 167*a1a3b679SAndreas Boehler * 168*a1a3b679SAndreas Boehler * @return array|null 169*a1a3b679SAndreas Boehler */ 170*a1a3b679SAndreas Boehler function getSupportedPrivilegeSet() { 171*a1a3b679SAndreas Boehler 172*a1a3b679SAndreas Boehler $default = DAVACL\Plugin::getDefaultSupportedPrivilegeSet(); 173*a1a3b679SAndreas Boehler $default['aggregates'][] = [ 174*a1a3b679SAndreas Boehler 'privilege' => '{' . CalDAV\Plugin::NS_CALDAV . '}schedule-query-freebusy', 175*a1a3b679SAndreas Boehler ]; 176*a1a3b679SAndreas Boehler $default['aggregates'][] = [ 177*a1a3b679SAndreas Boehler 'privilege' => '{' . CalDAV\Plugin::NS_CALDAV . '}schedule-post-vevent', 178*a1a3b679SAndreas Boehler ]; 179*a1a3b679SAndreas Boehler 180*a1a3b679SAndreas Boehler return $default; 181*a1a3b679SAndreas Boehler 182*a1a3b679SAndreas Boehler } 183*a1a3b679SAndreas Boehler 184*a1a3b679SAndreas Boehler} 185