source: pmb4.2/trunk/fuentes/pmb/admin/connecteurs/out/webdav/lib/Sabre/CalDAV/UserCalendars.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 8.9 KB
Line 
1<?php
2
3namespace Sabre\CalDAV;
4
5use Sabre\DAV;
6use Sabre\DAVACL;
7
8/**
9 * The UserCalenders class contains all calendars associated to one user
10 *
11 * @copyright Copyright (C) 2007-2013 Rooftop Solutions. All rights reserved.
12 * @author Evert Pot (http://www.rooftopsolutions.nl/)
13 * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
14 */
15class UserCalendars implements DAV\IExtendedCollection, DAVACL\IACL {
16
17    /**
18     * CalDAV backend
19     *
20     * @var Sabre\CalDAV\Backend\BackendInterface
21     */
22    protected $caldavBackend;
23
24    /**
25     * Principal information
26     *
27     * @var array
28     */
29    protected $principalInfo;
30
31    /**
32     * Constructor
33     *
34     * @param Backend\BackendInterface $caldavBackend
35     * @param mixed $userUri
36     */
37    public function __construct(Backend\BackendInterface $caldavBackend, $principalInfo) {
38
39        $this->caldavBackend = $caldavBackend;
40        $this->principalInfo = $principalInfo;
41
42    }
43
44    /**
45     * Returns the name of this object
46     *
47     * @return string
48     */
49    public function getName() {
50
51        list(,$name) = DAV\URLUtil::splitPath($this->principalInfo['uri']);
52        return $name;
53
54    }
55
56    /**
57     * Updates the name of this object
58     *
59     * @param string $name
60     * @return void
61     */
62    public function setName($name) {
63
64        throw new DAV\Exception\Forbidden();
65
66    }
67
68    /**
69     * Deletes this object
70     *
71     * @return void
72     */
73    public function delete() {
74
75        throw new DAV\Exception\Forbidden();
76
77    }
78
79    /**
80     * Returns the last modification date
81     *
82     * @return int
83     */
84    public function getLastModified() {
85
86        return null;
87
88    }
89
90    /**
91     * Creates a new file under this object.
92     *
93     * This is currently not allowed
94     *
95     * @param string $filename
96     * @param resource $data
97     * @return void
98     */
99    public function createFile($filename, $data=null) {
100
101        throw new DAV\Exception\MethodNotAllowed('Creating new files in this collection is not supported');
102
103    }
104
105    /**
106     * Creates a new directory under this object.
107     *
108     * This is currently not allowed.
109     *
110     * @param string $filename
111     * @return void
112     */
113    public function createDirectory($filename) {
114
115        throw new DAV\Exception\MethodNotAllowed('Creating new collections in this collection is not supported');
116
117    }
118
119    /**
120     * Returns a single calendar, by name
121     *
122     * @param string $name
123     * @todo needs optimizing
124     * @return Calendar
125     */
126    public function getChild($name) {
127
128        foreach($this->getChildren() as $child) {
129            if ($name==$child->getName())
130                return $child;
131
132        }
133        throw new DAV\Exception\NotFound('Calendar with name \'' . $name . '\' could not be found');
134
135    }
136
137    /**
138     * Checks if a calendar exists.
139     *
140     * @param string $name
141     * @todo needs optimizing
142     * @return bool
143     */
144    public function childExists($name) {
145
146        foreach($this->getChildren() as $child) {
147            if ($name==$child->getName())
148                return true;
149
150        }
151        return false;
152
153    }
154
155    /**
156     * Returns a list of calendars
157     *
158     * @return array
159     */
160    public function getChildren() {
161
162        $calendars = $this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']);
163        $objs = array();
164        foreach($calendars as $calendar) {
165            if ($this->caldavBackend instanceof Backend\SharingSupport) {
166                if (isset($calendar['{http://calendarserver.org/ns/}shared-url'])) {
167                    $objs[] = new SharedCalendar($this->caldavBackend, $calendar);
168                } else {
169                    $objs[] = new ShareableCalendar($this->caldavBackend, $calendar);
170                }
171            } else {
172                $objs[] = new Calendar($this->caldavBackend, $calendar);
173            }
174        }
175        $objs[] = new Schedule\Outbox($this->principalInfo['uri']);
176
177        // We're adding a notifications node, if it's supported by the backend.
178        if ($this->caldavBackend instanceof Backend\NotificationSupport) {
179            $objs[] = new Notifications\Collection($this->caldavBackend, $this->principalInfo['uri']);
180        }
181        return $objs;
182
183    }
184
185    /**
186     * Creates a new calendar
187     *
188     * @param string $name
189     * @param array $resourceType
190     * @param array $properties
191     * @return void
192     */
193    public function createExtendedCollection($name, array $resourceType, array $properties) {
194
195        $isCalendar = false;
196        foreach($resourceType as $rt) {
197            switch ($rt) {
198                case '{DAV:}collection' :
199                case '{http://calendarserver.org/ns/}shared-owner' :
200                    // ignore
201                    break;
202                case '{urn:ietf:params:xml:ns:caldav}calendar' :
203                    $isCalendar = true;
204                    break;
205                default :
206                    throw new DAV\Exception\InvalidResourceType('Unknown resourceType: ' . $rt);
207            }
208        }
209        if (!$isCalendar) {
210            throw new DAV\Exception\InvalidResourceType('You can only create calendars in this collection');
211        }
212        $this->caldavBackend->createCalendar($this->principalInfo['uri'], $name, $properties);
213
214    }
215
216    /**
217     * Returns the owner principal
218     *
219     * This must be a url to a principal, or null if there's no owner
220     *
221     * @return string|null
222     */
223    public function getOwner() {
224
225        return $this->principalInfo['uri'];
226
227    }
228
229    /**
230     * Returns a group principal
231     *
232     * This must be a url to a principal, or null if there's no owner
233     *
234     * @return string|null
235     */
236    public function getGroup() {
237
238        return null;
239
240    }
241
242    /**
243     * Returns a list of ACE's for this node.
244     *
245     * Each ACE has the following properties:
246     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
247     *     currently the only supported privileges
248     *   * 'principal', a url to the principal who owns the node
249     *   * 'protected' (optional), indicating that this ACE is not allowed to
250     *      be updated.
251     *
252     * @return array
253     */
254    public function getACL() {
255
256        return array(
257            array(
258                'privilege' => '{DAV:}read',
259                'principal' => $this->principalInfo['uri'],
260                'protected' => true,
261            ),
262            array(
263                'privilege' => '{DAV:}write',
264                'principal' => $this->principalInfo['uri'],
265                'protected' => true,
266            ),
267            array(
268                'privilege' => '{DAV:}read',
269                'principal' => $this->principalInfo['uri'] . '/calendar-proxy-write',
270                'protected' => true,
271            ),
272            array(
273                'privilege' => '{DAV:}write',
274                'principal' => $this->principalInfo['uri'] . '/calendar-proxy-write',
275                'protected' => true,
276            ),
277            array(
278                'privilege' => '{DAV:}read',
279                'principal' => $this->principalInfo['uri'] . '/calendar-proxy-read',
280                'protected' => true,
281            ),
282
283        );
284
285    }
286
287    /**
288     * Updates the ACL
289     *
290     * This method will receive a list of new ACE's.
291     *
292     * @param array $acl
293     * @return void
294     */
295    public function setACL(array $acl) {
296
297        throw new DAV\Exception\MethodNotAllowed('Changing ACL is not yet supported');
298
299    }
300
301    /**
302     * Returns the list of supported privileges for this node.
303     *
304     * The returned data structure is a list of nested privileges.
305     * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple
306     * standard structure.
307     *
308     * If null is returned from this method, the default privilege set is used,
309     * which is fine for most common usecases.
310     *
311     * @return array|null
312     */
313    public function getSupportedPrivilegeSet() {
314
315        return null;
316
317    }
318
319    /**
320     * This method is called when a user replied to a request to share.
321     *
322     * This method should return the url of the newly created calendar if the
323     * share was accepted.
324     *
325     * @param string href The sharee who is replying (often a mailto: address)
326     * @param int status One of the SharingPlugin::STATUS_* constants
327     * @param string $calendarUri The url to the calendar thats being shared
328     * @param string $inReplyTo The unique id this message is a response to
329     * @param string $summary A description of the reply
330     * @return null|string
331     */
332    public function shareReply($href, $status, $calendarUri, $inReplyTo, $summary = null) {
333
334        if (!$this->caldavBackend instanceof Backend\SharingSupport) {
335            throw new DAV\Exception\NotImplemented('Sharing support is not implemented by this backend.');
336        }
337
338        return $this->caldavBackend->shareReply($href, $status, $calendarUri, $inReplyTo, $summary);
339
340    }
341
342}
Note: See TracBrowser for help on using the repository browser.