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