1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehler/** 6*a1a3b679SAndreas Boehler * This object represents a CalDAV calendar that is shared by a different user. 7*a1a3b679SAndreas Boehler * 8*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 9*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 10*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 11*a1a3b679SAndreas Boehler */ 12*a1a3b679SAndreas Boehlerclass SharedCalendar extends Calendar implements ISharedCalendar { 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler /** 15*a1a3b679SAndreas Boehler * Constructor 16*a1a3b679SAndreas Boehler * 17*a1a3b679SAndreas Boehler * @param Backend\BackendInterface $caldavBackend 18*a1a3b679SAndreas Boehler * @param array $calendarInfo 19*a1a3b679SAndreas Boehler */ 20*a1a3b679SAndreas Boehler function __construct(Backend\BackendInterface $caldavBackend, $calendarInfo) { 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler $required = [ 23*a1a3b679SAndreas Boehler '{http://calendarserver.org/ns/}shared-url', 24*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}owner-principal', 25*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}read-only', 26*a1a3b679SAndreas Boehler ]; 27*a1a3b679SAndreas Boehler foreach ($required as $r) { 28*a1a3b679SAndreas Boehler if (!isset($calendarInfo[$r])) { 29*a1a3b679SAndreas Boehler throw new \InvalidArgumentException('The ' . $r . ' property must be specified for SharedCalendar(s)'); 30*a1a3b679SAndreas Boehler } 31*a1a3b679SAndreas Boehler } 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler parent::__construct($caldavBackend, $calendarInfo); 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler } 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler /** 38*a1a3b679SAndreas Boehler * This method should return the url of the owners' copy of the shared 39*a1a3b679SAndreas Boehler * calendar. 40*a1a3b679SAndreas Boehler * 41*a1a3b679SAndreas Boehler * @return string 42*a1a3b679SAndreas Boehler */ 43*a1a3b679SAndreas Boehler function getSharedUrl() { 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler return $this->calendarInfo['{http://calendarserver.org/ns/}shared-url']; 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler } 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler /** 50*a1a3b679SAndreas Boehler * Returns the owner principal 51*a1a3b679SAndreas Boehler * 52*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 53*a1a3b679SAndreas Boehler * 54*a1a3b679SAndreas Boehler * @return string|null 55*a1a3b679SAndreas Boehler */ 56*a1a3b679SAndreas Boehler function getOwner() { 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler return $this->calendarInfo['{http://sabredav.org/ns}owner-principal']; 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler } 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler /** 63*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 64*a1a3b679SAndreas Boehler * 65*a1a3b679SAndreas Boehler * Each ACE has the following properties: 66*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 67*a1a3b679SAndreas Boehler * currently the only supported privileges 68*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 69*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 70*a1a3b679SAndreas Boehler * be updated. 71*a1a3b679SAndreas Boehler * 72*a1a3b679SAndreas Boehler * @return array 73*a1a3b679SAndreas Boehler */ 74*a1a3b679SAndreas Boehler function getACL() { 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler // The top-level ACL only contains access information for the true 77*a1a3b679SAndreas Boehler // owner of the calendar, so we need to add the information for the 78*a1a3b679SAndreas Boehler // sharee. 79*a1a3b679SAndreas Boehler $acl = parent::getACL(); 80*a1a3b679SAndreas Boehler $acl[] = [ 81*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 82*a1a3b679SAndreas Boehler 'principal' => $this->calendarInfo['principaluri'], 83*a1a3b679SAndreas Boehler 'protected' => true, 84*a1a3b679SAndreas Boehler ]; 85*a1a3b679SAndreas Boehler if ($this->calendarInfo['{http://sabredav.org/ns}read-only']) { 86*a1a3b679SAndreas Boehler $acl[] = [ 87*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write-properties', 88*a1a3b679SAndreas Boehler 'principal' => $this->calendarInfo['principaluri'], 89*a1a3b679SAndreas Boehler 'protected' => true, 90*a1a3b679SAndreas Boehler ]; 91*a1a3b679SAndreas Boehler } else { 92*a1a3b679SAndreas Boehler $acl[] = [ 93*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 94*a1a3b679SAndreas Boehler 'principal' => $this->calendarInfo['principaluri'], 95*a1a3b679SAndreas Boehler 'protected' => true, 96*a1a3b679SAndreas Boehler ]; 97*a1a3b679SAndreas Boehler } 98*a1a3b679SAndreas Boehler return $acl; 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler } 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler /** 103*a1a3b679SAndreas Boehler * This method returns the ACL's for calendar objects in this calendar. 104*a1a3b679SAndreas Boehler * The result of this method automatically gets passed to the 105*a1a3b679SAndreas Boehler * calendar-object nodes in the calendar. 106*a1a3b679SAndreas Boehler * 107*a1a3b679SAndreas Boehler * @return array 108*a1a3b679SAndreas Boehler */ 109*a1a3b679SAndreas Boehler function getChildACL() { 110*a1a3b679SAndreas Boehler 111*a1a3b679SAndreas Boehler $acl = parent::getChildACL(); 112*a1a3b679SAndreas Boehler $acl[] = [ 113*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 114*a1a3b679SAndreas Boehler 'principal' => $this->calendarInfo['principaluri'], 115*a1a3b679SAndreas Boehler 'protected' => true, 116*a1a3b679SAndreas Boehler ]; 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler if (!$this->calendarInfo['{http://sabredav.org/ns}read-only']) { 119*a1a3b679SAndreas Boehler $acl[] = [ 120*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 121*a1a3b679SAndreas Boehler 'principal' => $this->calendarInfo['principaluri'], 122*a1a3b679SAndreas Boehler 'protected' => true, 123*a1a3b679SAndreas Boehler ]; 124*a1a3b679SAndreas Boehler } 125*a1a3b679SAndreas Boehler return $acl; 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler } 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler /** 131*a1a3b679SAndreas Boehler * Returns the list of people whom this calendar is shared with. 132*a1a3b679SAndreas Boehler * 133*a1a3b679SAndreas Boehler * Every element in this array should have the following properties: 134*a1a3b679SAndreas Boehler * * href - Often a mailto: address 135*a1a3b679SAndreas Boehler * * commonName - Optional, for example a first + last name 136*a1a3b679SAndreas Boehler * * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants. 137*a1a3b679SAndreas Boehler * * readOnly - boolean 138*a1a3b679SAndreas Boehler * * summary - Optional, a description for the share 139*a1a3b679SAndreas Boehler * 140*a1a3b679SAndreas Boehler * @return array 141*a1a3b679SAndreas Boehler */ 142*a1a3b679SAndreas Boehler function getShares() { 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler return $this->caldavBackend->getShares($this->calendarInfo['id']); 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler } 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler} 149