xref: /plugin/davcal/vendor/sabre/dav/lib/CalDAV/SharedCalendar.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
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