xref: /plugin/davcal/vendor/sabre/dav/lib/CardDAV/AddressBookHome.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\CardDAV;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\DAV;
6*a1a3b679SAndreas Boehleruse Sabre\DAV\MkCol;
7*a1a3b679SAndreas Boehleruse Sabre\DAVACL;
8*a1a3b679SAndreas Boehleruse Sabre\Uri;
9*a1a3b679SAndreas Boehler
10*a1a3b679SAndreas Boehler/**
11*a1a3b679SAndreas Boehler * AddressBook Home class
12*a1a3b679SAndreas Boehler *
13*a1a3b679SAndreas Boehler * This collection contains a list of addressbooks associated with one user.
14*a1a3b679SAndreas Boehler *
15*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/).
16*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/)
17*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License
18*a1a3b679SAndreas Boehler */
19*a1a3b679SAndreas Boehlerclass AddressBookHome extends DAV\Collection implements DAV\IExtendedCollection, DAVACL\IACL {
20*a1a3b679SAndreas Boehler
21*a1a3b679SAndreas Boehler    /**
22*a1a3b679SAndreas Boehler     * Principal uri
23*a1a3b679SAndreas Boehler     *
24*a1a3b679SAndreas Boehler     * @var array
25*a1a3b679SAndreas Boehler     */
26*a1a3b679SAndreas Boehler    protected $principalUri;
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler    /**
29*a1a3b679SAndreas Boehler     * carddavBackend
30*a1a3b679SAndreas Boehler     *
31*a1a3b679SAndreas Boehler     * @var Backend\BackendInterface
32*a1a3b679SAndreas Boehler     */
33*a1a3b679SAndreas Boehler    protected $carddavBackend;
34*a1a3b679SAndreas Boehler
35*a1a3b679SAndreas Boehler    /**
36*a1a3b679SAndreas Boehler     * Constructor
37*a1a3b679SAndreas Boehler     *
38*a1a3b679SAndreas Boehler     * @param Backend\BackendInterface $carddavBackend
39*a1a3b679SAndreas Boehler     * @param string $principalUri
40*a1a3b679SAndreas Boehler     */
41*a1a3b679SAndreas Boehler    function __construct(Backend\BackendInterface $carddavBackend, $principalUri) {
42*a1a3b679SAndreas Boehler
43*a1a3b679SAndreas Boehler        $this->carddavBackend = $carddavBackend;
44*a1a3b679SAndreas Boehler        $this->principalUri = $principalUri;
45*a1a3b679SAndreas Boehler
46*a1a3b679SAndreas Boehler    }
47*a1a3b679SAndreas Boehler
48*a1a3b679SAndreas Boehler    /**
49*a1a3b679SAndreas Boehler     * Returns the name of this object
50*a1a3b679SAndreas Boehler     *
51*a1a3b679SAndreas Boehler     * @return string
52*a1a3b679SAndreas Boehler     */
53*a1a3b679SAndreas Boehler    function getName() {
54*a1a3b679SAndreas Boehler
55*a1a3b679SAndreas Boehler        list(, $name) = Uri\split($this->principalUri);
56*a1a3b679SAndreas Boehler        return $name;
57*a1a3b679SAndreas Boehler
58*a1a3b679SAndreas Boehler    }
59*a1a3b679SAndreas Boehler
60*a1a3b679SAndreas Boehler    /**
61*a1a3b679SAndreas Boehler     * Updates the name of this object
62*a1a3b679SAndreas Boehler     *
63*a1a3b679SAndreas Boehler     * @param string $name
64*a1a3b679SAndreas Boehler     * @return void
65*a1a3b679SAndreas Boehler     */
66*a1a3b679SAndreas Boehler    function setName($name) {
67*a1a3b679SAndreas Boehler
68*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed();
69*a1a3b679SAndreas Boehler
70*a1a3b679SAndreas Boehler    }
71*a1a3b679SAndreas Boehler
72*a1a3b679SAndreas Boehler    /**
73*a1a3b679SAndreas Boehler     * Deletes this object
74*a1a3b679SAndreas Boehler     *
75*a1a3b679SAndreas Boehler     * @return void
76*a1a3b679SAndreas Boehler     */
77*a1a3b679SAndreas Boehler    function delete() {
78*a1a3b679SAndreas Boehler
79*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed();
80*a1a3b679SAndreas Boehler
81*a1a3b679SAndreas Boehler    }
82*a1a3b679SAndreas Boehler
83*a1a3b679SAndreas Boehler    /**
84*a1a3b679SAndreas Boehler     * Returns the last modification date
85*a1a3b679SAndreas Boehler     *
86*a1a3b679SAndreas Boehler     * @return int
87*a1a3b679SAndreas Boehler     */
88*a1a3b679SAndreas Boehler    function getLastModified() {
89*a1a3b679SAndreas Boehler
90*a1a3b679SAndreas Boehler        return null;
91*a1a3b679SAndreas Boehler
92*a1a3b679SAndreas Boehler    }
93*a1a3b679SAndreas Boehler
94*a1a3b679SAndreas Boehler    /**
95*a1a3b679SAndreas Boehler     * Creates a new file under this object.
96*a1a3b679SAndreas Boehler     *
97*a1a3b679SAndreas Boehler     * This is currently not allowed
98*a1a3b679SAndreas Boehler     *
99*a1a3b679SAndreas Boehler     * @param string $filename
100*a1a3b679SAndreas Boehler     * @param resource $data
101*a1a3b679SAndreas Boehler     * @return void
102*a1a3b679SAndreas Boehler     */
103*a1a3b679SAndreas Boehler    function createFile($filename, $data = null) {
104*a1a3b679SAndreas Boehler
105*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed('Creating new files in this collection is not supported');
106*a1a3b679SAndreas Boehler
107*a1a3b679SAndreas Boehler    }
108*a1a3b679SAndreas Boehler
109*a1a3b679SAndreas Boehler    /**
110*a1a3b679SAndreas Boehler     * Creates a new directory under this object.
111*a1a3b679SAndreas Boehler     *
112*a1a3b679SAndreas Boehler     * This is currently not allowed.
113*a1a3b679SAndreas Boehler     *
114*a1a3b679SAndreas Boehler     * @param string $filename
115*a1a3b679SAndreas Boehler     * @return void
116*a1a3b679SAndreas Boehler     */
117*a1a3b679SAndreas Boehler    function createDirectory($filename) {
118*a1a3b679SAndreas Boehler
119*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed('Creating new collections in this collection is not supported');
120*a1a3b679SAndreas Boehler
121*a1a3b679SAndreas Boehler    }
122*a1a3b679SAndreas Boehler
123*a1a3b679SAndreas Boehler    /**
124*a1a3b679SAndreas Boehler     * Returns a single addressbook, by name
125*a1a3b679SAndreas Boehler     *
126*a1a3b679SAndreas Boehler     * @param string $name
127*a1a3b679SAndreas Boehler     * @todo needs optimizing
128*a1a3b679SAndreas Boehler     * @return \AddressBook
129*a1a3b679SAndreas Boehler     */
130*a1a3b679SAndreas Boehler    function getChild($name) {
131*a1a3b679SAndreas Boehler
132*a1a3b679SAndreas Boehler        foreach ($this->getChildren() as $child) {
133*a1a3b679SAndreas Boehler            if ($name == $child->getName())
134*a1a3b679SAndreas Boehler                return $child;
135*a1a3b679SAndreas Boehler
136*a1a3b679SAndreas Boehler        }
137*a1a3b679SAndreas Boehler        throw new DAV\Exception\NotFound('Addressbook with name \'' . $name . '\' could not be found');
138*a1a3b679SAndreas Boehler
139*a1a3b679SAndreas Boehler    }
140*a1a3b679SAndreas Boehler
141*a1a3b679SAndreas Boehler    /**
142*a1a3b679SAndreas Boehler     * Returns a list of addressbooks
143*a1a3b679SAndreas Boehler     *
144*a1a3b679SAndreas Boehler     * @return array
145*a1a3b679SAndreas Boehler     */
146*a1a3b679SAndreas Boehler    function getChildren() {
147*a1a3b679SAndreas Boehler
148*a1a3b679SAndreas Boehler        $addressbooks = $this->carddavBackend->getAddressBooksForUser($this->principalUri);
149*a1a3b679SAndreas Boehler        $objs = [];
150*a1a3b679SAndreas Boehler        foreach ($addressbooks as $addressbook) {
151*a1a3b679SAndreas Boehler            $objs[] = new AddressBook($this->carddavBackend, $addressbook);
152*a1a3b679SAndreas Boehler        }
153*a1a3b679SAndreas Boehler        return $objs;
154*a1a3b679SAndreas Boehler
155*a1a3b679SAndreas Boehler    }
156*a1a3b679SAndreas Boehler
157*a1a3b679SAndreas Boehler    /**
158*a1a3b679SAndreas Boehler     * Creates a new address book.
159*a1a3b679SAndreas Boehler     *
160*a1a3b679SAndreas Boehler     * @param string $name
161*a1a3b679SAndreas Boehler     * @param MkCol $mkCol
162*a1a3b679SAndreas Boehler     * @throws DAV\Exception\InvalidResourceType
163*a1a3b679SAndreas Boehler     * @return void
164*a1a3b679SAndreas Boehler     */
165*a1a3b679SAndreas Boehler    function createExtendedCollection($name, MkCol $mkCol) {
166*a1a3b679SAndreas Boehler
167*a1a3b679SAndreas Boehler        if (!$mkCol->hasResourceType('{' . Plugin::NS_CARDDAV . '}addressbook')) {
168*a1a3b679SAndreas Boehler            throw new DAV\Exception\InvalidResourceType('Unknown resourceType for this collection');
169*a1a3b679SAndreas Boehler        }
170*a1a3b679SAndreas Boehler        $properties = $mkCol->getRemainingValues();
171*a1a3b679SAndreas Boehler        $mkCol->setRemainingResultCode(201);
172*a1a3b679SAndreas Boehler        $this->carddavBackend->createAddressBook($this->principalUri, $name, $properties);
173*a1a3b679SAndreas Boehler
174*a1a3b679SAndreas Boehler    }
175*a1a3b679SAndreas Boehler
176*a1a3b679SAndreas Boehler    /**
177*a1a3b679SAndreas Boehler     * Returns the owner principal
178*a1a3b679SAndreas Boehler     *
179*a1a3b679SAndreas Boehler     * This must be a url to a principal, or null if there's no owner
180*a1a3b679SAndreas Boehler     *
181*a1a3b679SAndreas Boehler     * @return string|null
182*a1a3b679SAndreas Boehler     */
183*a1a3b679SAndreas Boehler    function getOwner() {
184*a1a3b679SAndreas Boehler
185*a1a3b679SAndreas Boehler        return $this->principalUri;
186*a1a3b679SAndreas Boehler
187*a1a3b679SAndreas Boehler    }
188*a1a3b679SAndreas Boehler
189*a1a3b679SAndreas Boehler    /**
190*a1a3b679SAndreas Boehler     * Returns a group principal
191*a1a3b679SAndreas Boehler     *
192*a1a3b679SAndreas Boehler     * This must be a url to a principal, or null if there's no owner
193*a1a3b679SAndreas Boehler     *
194*a1a3b679SAndreas Boehler     * @return string|null
195*a1a3b679SAndreas Boehler     */
196*a1a3b679SAndreas Boehler    function getGroup() {
197*a1a3b679SAndreas Boehler
198*a1a3b679SAndreas Boehler        return null;
199*a1a3b679SAndreas Boehler
200*a1a3b679SAndreas Boehler    }
201*a1a3b679SAndreas Boehler
202*a1a3b679SAndreas Boehler    /**
203*a1a3b679SAndreas Boehler     * Returns a list of ACE's for this node.
204*a1a3b679SAndreas Boehler     *
205*a1a3b679SAndreas Boehler     * Each ACE has the following properties:
206*a1a3b679SAndreas Boehler     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
207*a1a3b679SAndreas Boehler     *     currently the only supported privileges
208*a1a3b679SAndreas Boehler     *   * 'principal', a url to the principal who owns the node
209*a1a3b679SAndreas Boehler     *   * 'protected' (optional), indicating that this ACE is not allowed to
210*a1a3b679SAndreas Boehler     *      be updated.
211*a1a3b679SAndreas Boehler     *
212*a1a3b679SAndreas Boehler     * @return array
213*a1a3b679SAndreas Boehler     */
214*a1a3b679SAndreas Boehler    function getACL() {
215*a1a3b679SAndreas Boehler
216*a1a3b679SAndreas Boehler        return [
217*a1a3b679SAndreas Boehler            [
218*a1a3b679SAndreas Boehler                'privilege' => '{DAV:}read',
219*a1a3b679SAndreas Boehler                'principal' => $this->principalUri,
220*a1a3b679SAndreas Boehler                'protected' => true,
221*a1a3b679SAndreas Boehler            ],
222*a1a3b679SAndreas Boehler            [
223*a1a3b679SAndreas Boehler                'privilege' => '{DAV:}write',
224*a1a3b679SAndreas Boehler                'principal' => $this->principalUri,
225*a1a3b679SAndreas Boehler                'protected' => true,
226*a1a3b679SAndreas Boehler            ],
227*a1a3b679SAndreas Boehler        ];
228*a1a3b679SAndreas Boehler
229*a1a3b679SAndreas Boehler    }
230*a1a3b679SAndreas Boehler
231*a1a3b679SAndreas Boehler    /**
232*a1a3b679SAndreas Boehler     * Updates the ACL
233*a1a3b679SAndreas Boehler     *
234*a1a3b679SAndreas Boehler     * This method will receive a list of new ACE's.
235*a1a3b679SAndreas Boehler     *
236*a1a3b679SAndreas Boehler     * @param array $acl
237*a1a3b679SAndreas Boehler     * @return void
238*a1a3b679SAndreas Boehler     */
239*a1a3b679SAndreas Boehler    function setACL(array $acl) {
240*a1a3b679SAndreas Boehler
241*a1a3b679SAndreas Boehler        throw new DAV\Exception\MethodNotAllowed('Changing ACL is not yet supported');
242*a1a3b679SAndreas Boehler
243*a1a3b679SAndreas Boehler    }
244*a1a3b679SAndreas Boehler
245*a1a3b679SAndreas Boehler    /**
246*a1a3b679SAndreas Boehler     * Returns the list of supported privileges for this node.
247*a1a3b679SAndreas Boehler     *
248*a1a3b679SAndreas Boehler     * The returned data structure is a list of nested privileges.
249*a1a3b679SAndreas Boehler     * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple
250*a1a3b679SAndreas Boehler     * standard structure.
251*a1a3b679SAndreas Boehler     *
252*a1a3b679SAndreas Boehler     * If null is returned from this method, the default privilege set is used,
253*a1a3b679SAndreas Boehler     * which is fine for most common usecases.
254*a1a3b679SAndreas Boehler     *
255*a1a3b679SAndreas Boehler     * @return array|null
256*a1a3b679SAndreas Boehler     */
257*a1a3b679SAndreas Boehler    function getSupportedPrivilegeSet() {
258*a1a3b679SAndreas Boehler
259*a1a3b679SAndreas Boehler        return null;
260*a1a3b679SAndreas Boehler
261*a1a3b679SAndreas Boehler    }
262*a1a3b679SAndreas Boehler
263*a1a3b679SAndreas Boehler}
264