xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/Mock.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Backend;
4*a1a3b679SAndreas Boehleruse Sabre\DAV;
5*a1a3b679SAndreas Boehleruse Sabre\CalDAV;
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehlerclass Mock extends AbstractBackend {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    protected $calendarData;
10*a1a3b679SAndreas Boehler    protected $calendars;
11*a1a3b679SAndreas Boehler
12*a1a3b679SAndreas Boehler    function __construct(array $calendars = [], array $calendarData = []) {
13*a1a3b679SAndreas Boehler
14*a1a3b679SAndreas Boehler        foreach($calendars as &$calendar) {
15*a1a3b679SAndreas Boehler            if (!isset($calendar['id'])) {
16*a1a3b679SAndreas Boehler                $calendar['id'] = DAV\UUIDUtil::getUUID();
17*a1a3b679SAndreas Boehler            }
18*a1a3b679SAndreas Boehler        }
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler        $this->calendars = $calendars;
21*a1a3b679SAndreas Boehler        $this->calendarData = $calendarData;
22*a1a3b679SAndreas Boehler
23*a1a3b679SAndreas Boehler    }
24*a1a3b679SAndreas Boehler
25*a1a3b679SAndreas Boehler    /**
26*a1a3b679SAndreas Boehler     * Returns a list of calendars for a principal.
27*a1a3b679SAndreas Boehler     *
28*a1a3b679SAndreas Boehler     * Every project is an array with the following keys:
29*a1a3b679SAndreas Boehler     *  * id, a unique id that will be used by other functions to modify the
30*a1a3b679SAndreas Boehler     *    calendar. This can be the same as the uri or a database key.
31*a1a3b679SAndreas Boehler     *  * uri, which the basename of the uri with which the calendar is
32*a1a3b679SAndreas Boehler     *    accessed.
33*a1a3b679SAndreas Boehler     *  * principalUri. The owner of the calendar. Almost always the same as
34*a1a3b679SAndreas Boehler     *    principalUri passed to this method.
35*a1a3b679SAndreas Boehler     *
36*a1a3b679SAndreas Boehler     * Furthermore it can contain webdav properties in clark notation. A very
37*a1a3b679SAndreas Boehler     * common one is '{DAV:}displayname'.
38*a1a3b679SAndreas Boehler     *
39*a1a3b679SAndreas Boehler     * @param string $principalUri
40*a1a3b679SAndreas Boehler     * @return array
41*a1a3b679SAndreas Boehler     */
42*a1a3b679SAndreas Boehler    function getCalendarsForUser($principalUri) {
43*a1a3b679SAndreas Boehler
44*a1a3b679SAndreas Boehler        $r = array();
45*a1a3b679SAndreas Boehler        foreach($this->calendars as $row) {
46*a1a3b679SAndreas Boehler            if ($row['principaluri'] == $principalUri) {
47*a1a3b679SAndreas Boehler                $r[] = $row;
48*a1a3b679SAndreas Boehler            }
49*a1a3b679SAndreas Boehler        }
50*a1a3b679SAndreas Boehler
51*a1a3b679SAndreas Boehler        return $r;
52*a1a3b679SAndreas Boehler
53*a1a3b679SAndreas Boehler    }
54*a1a3b679SAndreas Boehler
55*a1a3b679SAndreas Boehler    /**
56*a1a3b679SAndreas Boehler     * Creates a new calendar for a principal.
57*a1a3b679SAndreas Boehler     *
58*a1a3b679SAndreas Boehler     * If the creation was a success, an id must be returned that can be used to reference
59*a1a3b679SAndreas Boehler     * this calendar in other methods, such as updateCalendar.
60*a1a3b679SAndreas Boehler     *
61*a1a3b679SAndreas Boehler     * This function must return a server-wide unique id that can be used
62*a1a3b679SAndreas Boehler     * later to reference the calendar.
63*a1a3b679SAndreas Boehler     *
64*a1a3b679SAndreas Boehler     * @param string $principalUri
65*a1a3b679SAndreas Boehler     * @param string $calendarUri
66*a1a3b679SAndreas Boehler     * @param array $properties
67*a1a3b679SAndreas Boehler     * @return string|int
68*a1a3b679SAndreas Boehler     */
69*a1a3b679SAndreas Boehler    function createCalendar($principalUri,$calendarUri,array $properties) {
70*a1a3b679SAndreas Boehler
71*a1a3b679SAndreas Boehler        $id = DAV\UUIDUtil::getUUID();
72*a1a3b679SAndreas Boehler        $this->calendars[] = array_merge([
73*a1a3b679SAndreas Boehler            'id' => $id,
74*a1a3b679SAndreas Boehler            'principaluri' => $principalUri,
75*a1a3b679SAndreas Boehler            'uri' => $calendarUri,
76*a1a3b679SAndreas Boehler            '{' . CalDAV\Plugin::NS_CALDAV . '}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(['VEVENT','VTODO']),
77*a1a3b679SAndreas Boehler        ], $properties);
78*a1a3b679SAndreas Boehler
79*a1a3b679SAndreas Boehler        return $id;
80*a1a3b679SAndreas Boehler
81*a1a3b679SAndreas Boehler    }
82*a1a3b679SAndreas Boehler
83*a1a3b679SAndreas Boehler    /**
84*a1a3b679SAndreas Boehler     * Delete a calendar and all it's objects
85*a1a3b679SAndreas Boehler     *
86*a1a3b679SAndreas Boehler     * @param string $calendarId
87*a1a3b679SAndreas Boehler     * @return void
88*a1a3b679SAndreas Boehler     */
89*a1a3b679SAndreas Boehler    public function deleteCalendar($calendarId) {
90*a1a3b679SAndreas Boehler
91*a1a3b679SAndreas Boehler        foreach($this->calendars as $k=>$calendar) {
92*a1a3b679SAndreas Boehler            if ($calendar['id'] === $calendarId) {
93*a1a3b679SAndreas Boehler                unset($this->calendars[$k]);
94*a1a3b679SAndreas Boehler            }
95*a1a3b679SAndreas Boehler        }
96*a1a3b679SAndreas Boehler
97*a1a3b679SAndreas Boehler    }
98*a1a3b679SAndreas Boehler
99*a1a3b679SAndreas Boehler    /**
100*a1a3b679SAndreas Boehler     * Returns all calendar objects within a calendar object.
101*a1a3b679SAndreas Boehler     *
102*a1a3b679SAndreas Boehler     * Every item contains an array with the following keys:
103*a1a3b679SAndreas Boehler     *   * id - unique identifier which will be used for subsequent updates
104*a1a3b679SAndreas Boehler     *   * calendardata - The iCalendar-compatible calendar data
105*a1a3b679SAndreas Boehler     *   * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
106*a1a3b679SAndreas Boehler     *   * lastmodified - a timestamp of the last modification time
107*a1a3b679SAndreas Boehler     *   * etag - An arbitrary string, surrounded by double-quotes. (e.g.:
108*a1a3b679SAndreas Boehler     *   '  "abcdef"')
109*a1a3b679SAndreas Boehler     *   * calendarid - The calendarid as it was passed to this function.
110*a1a3b679SAndreas Boehler     *
111*a1a3b679SAndreas Boehler     * Note that the etag is optional, but it's highly encouraged to return for
112*a1a3b679SAndreas Boehler     * speed reasons.
113*a1a3b679SAndreas Boehler     *
114*a1a3b679SAndreas Boehler     * The calendardata is also optional. If it's not returned
115*a1a3b679SAndreas Boehler     * 'getCalendarObject' will be called later, which *is* expected to return
116*a1a3b679SAndreas Boehler     * calendardata.
117*a1a3b679SAndreas Boehler     *
118*a1a3b679SAndreas Boehler     * @param string $calendarId
119*a1a3b679SAndreas Boehler     * @return array
120*a1a3b679SAndreas Boehler     */
121*a1a3b679SAndreas Boehler    public function getCalendarObjects($calendarId) {
122*a1a3b679SAndreas Boehler
123*a1a3b679SAndreas Boehler        if (!isset($this->calendarData[$calendarId]))
124*a1a3b679SAndreas Boehler            return array();
125*a1a3b679SAndreas Boehler
126*a1a3b679SAndreas Boehler        $objects = $this->calendarData[$calendarId];
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler        foreach($objects as $uri => &$object) {
129*a1a3b679SAndreas Boehler            $object['calendarid'] = $calendarId;
130*a1a3b679SAndreas Boehler            $object['uri'] = $uri;
131*a1a3b679SAndreas Boehler            $object['lastmodified'] = null;
132*a1a3b679SAndreas Boehler        }
133*a1a3b679SAndreas Boehler        return $objects;
134*a1a3b679SAndreas Boehler
135*a1a3b679SAndreas Boehler    }
136*a1a3b679SAndreas Boehler
137*a1a3b679SAndreas Boehler    /**
138*a1a3b679SAndreas Boehler     * Returns information from a single calendar object, based on it's object
139*a1a3b679SAndreas Boehler     * uri.
140*a1a3b679SAndreas Boehler     *
141*a1a3b679SAndreas Boehler     * The returned array must have the same keys as getCalendarObjects. The
142*a1a3b679SAndreas Boehler     * 'calendardata' object is required here though, while it's not required
143*a1a3b679SAndreas Boehler     * for getCalendarObjects.
144*a1a3b679SAndreas Boehler     *
145*a1a3b679SAndreas Boehler     * @param string $calendarId
146*a1a3b679SAndreas Boehler     * @param string $objectUri
147*a1a3b679SAndreas Boehler     * @return array
148*a1a3b679SAndreas Boehler     */
149*a1a3b679SAndreas Boehler    function getCalendarObject($calendarId,$objectUri) {
150*a1a3b679SAndreas Boehler
151*a1a3b679SAndreas Boehler        if (!isset($this->calendarData[$calendarId][$objectUri])) {
152*a1a3b679SAndreas Boehler            throw new DAV\Exception\NotFound('Object could not be found');
153*a1a3b679SAndreas Boehler        }
154*a1a3b679SAndreas Boehler        $object = $this->calendarData[$calendarId][$objectUri];
155*a1a3b679SAndreas Boehler        $object['calendarid'] = $calendarId;
156*a1a3b679SAndreas Boehler        $object['uri'] = $objectUri;
157*a1a3b679SAndreas Boehler        $object['lastmodified'] = null;
158*a1a3b679SAndreas Boehler        return $object;
159*a1a3b679SAndreas Boehler
160*a1a3b679SAndreas Boehler    }
161*a1a3b679SAndreas Boehler
162*a1a3b679SAndreas Boehler    /**
163*a1a3b679SAndreas Boehler     * Creates a new calendar object.
164*a1a3b679SAndreas Boehler     *
165*a1a3b679SAndreas Boehler     * @param string $calendarId
166*a1a3b679SAndreas Boehler     * @param string $objectUri
167*a1a3b679SAndreas Boehler     * @param string $calendarData
168*a1a3b679SAndreas Boehler     * @return void
169*a1a3b679SAndreas Boehler     */
170*a1a3b679SAndreas Boehler    function createCalendarObject($calendarId,$objectUri,$calendarData) {
171*a1a3b679SAndreas Boehler
172*a1a3b679SAndreas Boehler        $this->calendarData[$calendarId][$objectUri] = array(
173*a1a3b679SAndreas Boehler            'calendardata' => $calendarData,
174*a1a3b679SAndreas Boehler            'calendarid' => $calendarId,
175*a1a3b679SAndreas Boehler            'uri' => $objectUri,
176*a1a3b679SAndreas Boehler        );
177*a1a3b679SAndreas Boehler        return '"' . md5($calendarData) . '"';
178*a1a3b679SAndreas Boehler
179*a1a3b679SAndreas Boehler    }
180*a1a3b679SAndreas Boehler
181*a1a3b679SAndreas Boehler    /**
182*a1a3b679SAndreas Boehler     * Updates an existing calendarobject, based on it's uri.
183*a1a3b679SAndreas Boehler     *
184*a1a3b679SAndreas Boehler     * @param string $calendarId
185*a1a3b679SAndreas Boehler     * @param string $objectUri
186*a1a3b679SAndreas Boehler     * @param string $calendarData
187*a1a3b679SAndreas Boehler     * @return void
188*a1a3b679SAndreas Boehler     */
189*a1a3b679SAndreas Boehler    function updateCalendarObject($calendarId,$objectUri,$calendarData) {
190*a1a3b679SAndreas Boehler
191*a1a3b679SAndreas Boehler        $this->calendarData[$calendarId][$objectUri] = array(
192*a1a3b679SAndreas Boehler            'calendardata' => $calendarData,
193*a1a3b679SAndreas Boehler            'calendarid' => $calendarId,
194*a1a3b679SAndreas Boehler            'uri' => $objectUri,
195*a1a3b679SAndreas Boehler        );
196*a1a3b679SAndreas Boehler        return '"' . md5($calendarData) . '"';
197*a1a3b679SAndreas Boehler
198*a1a3b679SAndreas Boehler    }
199*a1a3b679SAndreas Boehler
200*a1a3b679SAndreas Boehler    /**
201*a1a3b679SAndreas Boehler     * Deletes an existing calendar object.
202*a1a3b679SAndreas Boehler     *
203*a1a3b679SAndreas Boehler     * @param string $calendarId
204*a1a3b679SAndreas Boehler     * @param string $objectUri
205*a1a3b679SAndreas Boehler     * @return void
206*a1a3b679SAndreas Boehler     */
207*a1a3b679SAndreas Boehler    function deleteCalendarObject($calendarId,$objectUri) {
208*a1a3b679SAndreas Boehler
209*a1a3b679SAndreas Boehler        throw new Exception('Not implemented');
210*a1a3b679SAndreas Boehler
211*a1a3b679SAndreas Boehler
212*a1a3b679SAndreas Boehler    }
213*a1a3b679SAndreas Boehler
214*a1a3b679SAndreas Boehler}
215