1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Schedule; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\CalDAV\Backend; 6*a1a3b679SAndreas Boehleruse Sabre\DAV\Exception\MethodNotAllowed; 7*a1a3b679SAndreas Boehler 8*a1a3b679SAndreas Boehler/** 9*a1a3b679SAndreas Boehler * The SchedulingObject represents a scheduling object in the Inbox collection 10*a1a3b679SAndreas Boehler * 11*a1a3b679SAndreas Boehler * @author Brett (https://github.com/bretten) 12*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 13*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 14*a1a3b679SAndreas Boehler */ 15*a1a3b679SAndreas Boehlerclass SchedulingObject extends \Sabre\CalDAV\CalendarObject implements ISchedulingObject { 16*a1a3b679SAndreas Boehler 17*a1a3b679SAndreas Boehler /** 18*a1a3b679SAndreas Boehler /* The CalDAV backend 19*a1a3b679SAndreas Boehler * 20*a1a3b679SAndreas Boehler * @var Backend\SchedulingSupport 21*a1a3b679SAndreas Boehler */ 22*a1a3b679SAndreas Boehler protected $caldavBackend; 23*a1a3b679SAndreas Boehler 24*a1a3b679SAndreas Boehler /** 25*a1a3b679SAndreas Boehler * Array with information about this SchedulingObject 26*a1a3b679SAndreas Boehler * 27*a1a3b679SAndreas Boehler * @var array 28*a1a3b679SAndreas Boehler */ 29*a1a3b679SAndreas Boehler protected $objectData; 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler /** 32*a1a3b679SAndreas Boehler * Constructor 33*a1a3b679SAndreas Boehler * 34*a1a3b679SAndreas Boehler * The following properties may be passed within $objectData: 35*a1a3b679SAndreas Boehler * 36*a1a3b679SAndreas Boehler * * uri - A unique uri. Only the 'basename' must be passed. 37*a1a3b679SAndreas Boehler * * principaluri - the principal that owns the object. 38*a1a3b679SAndreas Boehler * * calendardata (optional) - The iCalendar data 39*a1a3b679SAndreas Boehler * * etag - (optional) The etag for this object, MUST be encloded with 40*a1a3b679SAndreas Boehler * double-quotes. 41*a1a3b679SAndreas Boehler * * size - (optional) The size of the data in bytes. 42*a1a3b679SAndreas Boehler * * lastmodified - (optional) format as a unix timestamp. 43*a1a3b679SAndreas Boehler * * acl - (optional) Use this to override the default ACL for the node. 44*a1a3b679SAndreas Boehler * 45*a1a3b679SAndreas Boehler * @param Backend\BackendInterface $caldavBackend 46*a1a3b679SAndreas Boehler * @param array $objectData 47*a1a3b679SAndreas Boehler */ 48*a1a3b679SAndreas Boehler function __construct(Backend\SchedulingSupport $caldavBackend, array $objectData) { 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler $this->caldavBackend = $caldavBackend; 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler if (!isset($objectData['uri'])) { 53*a1a3b679SAndreas Boehler throw new \InvalidArgumentException('The objectData argument must contain an \'uri\' property'); 54*a1a3b679SAndreas Boehler } 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler $this->objectData = $objectData; 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler } 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler /** 61*a1a3b679SAndreas Boehler * Returns the ICalendar-formatted object 62*a1a3b679SAndreas Boehler * 63*a1a3b679SAndreas Boehler * @return string 64*a1a3b679SAndreas Boehler */ 65*a1a3b679SAndreas Boehler function get() { 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler // Pre-populating the 'calendardata' is optional, if we don't have it 68*a1a3b679SAndreas Boehler // already we fetch it from the backend. 69*a1a3b679SAndreas Boehler if (!isset($this->objectData['calendardata'])) { 70*a1a3b679SAndreas Boehler $this->objectData = $this->caldavBackend->getSchedulingObject($this->objectData['principaluri'], $this->objectData['uri']); 71*a1a3b679SAndreas Boehler } 72*a1a3b679SAndreas Boehler return $this->objectData['calendardata']; 73*a1a3b679SAndreas Boehler 74*a1a3b679SAndreas Boehler } 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler /** 77*a1a3b679SAndreas Boehler * Updates the ICalendar-formatted object 78*a1a3b679SAndreas Boehler * 79*a1a3b679SAndreas Boehler * @param string|resource $calendarData 80*a1a3b679SAndreas Boehler * @return string 81*a1a3b679SAndreas Boehler */ 82*a1a3b679SAndreas Boehler function put($calendarData) { 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler throw new MethodNotAllowed('Updating scheduling objects is not supported'); 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler } 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler /** 89*a1a3b679SAndreas Boehler * Deletes the scheduling message 90*a1a3b679SAndreas Boehler * 91*a1a3b679SAndreas Boehler * @return void 92*a1a3b679SAndreas Boehler */ 93*a1a3b679SAndreas Boehler function delete() { 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler $this->caldavBackend->deleteSchedulingObject($this->objectData['principaluri'], $this->objectData['uri']); 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler } 98*a1a3b679SAndreas Boehler 99*a1a3b679SAndreas Boehler /** 100*a1a3b679SAndreas Boehler * Returns the owner 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 getOwner() { 107*a1a3b679SAndreas Boehler 108*a1a3b679SAndreas Boehler return $this->objectData['principaluri']; 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler } 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler /** 114*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 115*a1a3b679SAndreas Boehler * 116*a1a3b679SAndreas Boehler * Each ACE has the following properties: 117*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 118*a1a3b679SAndreas Boehler * currently the only supported privileges 119*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 120*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 121*a1a3b679SAndreas Boehler * be updated. 122*a1a3b679SAndreas Boehler * 123*a1a3b679SAndreas Boehler * @return array 124*a1a3b679SAndreas Boehler */ 125*a1a3b679SAndreas Boehler function getACL() { 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler // An alternative acl may be specified in the object data. 128*a1a3b679SAndreas Boehler // 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler if (isset($this->objectData['acl'])) { 131*a1a3b679SAndreas Boehler return $this->objectData['acl']; 132*a1a3b679SAndreas Boehler } 133*a1a3b679SAndreas Boehler 134*a1a3b679SAndreas Boehler // The default ACL 135*a1a3b679SAndreas Boehler return [ 136*a1a3b679SAndreas Boehler [ 137*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 138*a1a3b679SAndreas Boehler 'principal' => $this->objectData['principaluri'], 139*a1a3b679SAndreas Boehler 'protected' => true, 140*a1a3b679SAndreas Boehler ], 141*a1a3b679SAndreas Boehler [ 142*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 143*a1a3b679SAndreas Boehler 'principal' => $this->objectData['principaluri'], 144*a1a3b679SAndreas Boehler 'protected' => true, 145*a1a3b679SAndreas Boehler ], 146*a1a3b679SAndreas Boehler [ 147*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 148*a1a3b679SAndreas Boehler 'principal' => $this->objectData['principaluri'] . '/calendar-proxy-write', 149*a1a3b679SAndreas Boehler 'protected' => true, 150*a1a3b679SAndreas Boehler ], 151*a1a3b679SAndreas Boehler [ 152*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 153*a1a3b679SAndreas Boehler 'principal' => $this->objectData['principaluri'] . '/calendar-proxy-write', 154*a1a3b679SAndreas Boehler 'protected' => true, 155*a1a3b679SAndreas Boehler ], 156*a1a3b679SAndreas Boehler [ 157*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 158*a1a3b679SAndreas Boehler 'principal' => $this->objectData['principaluri'] . '/calendar-proxy-read', 159*a1a3b679SAndreas Boehler 'protected' => true, 160*a1a3b679SAndreas Boehler ], 161*a1a3b679SAndreas Boehler ]; 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler } 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler} 166