source: pmb4.2/trunk/fuentes/pmb/admin/connecteurs/out/webdav/lib/Sabre/CardDAV/Card.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: 5.9 KB
Line 
1<?php
2
3namespace Sabre\CardDAV;
4
5use Sabre\DAVACL;
6use Sabre\DAV;
7
8
9/**
10 * The Card object represents a single Card from an addressbook
11 *
12 * @copyright Copyright (C) 2007-2013 Rooftop Solutions. All rights reserved.
13 * @author Evert Pot (http://www.rooftopsolutions.nl/)
14 * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
15 */
16class Card extends DAV\File implements ICard, DAVACL\IACL {
17
18    /**
19     * CardDAV backend
20     *
21     * @var Backend\BackendInterface
22     */
23    protected $carddavBackend;
24
25    /**
26     * Array with information about this Card
27     *
28     * @var array
29     */
30    protected $cardData;
31
32    /**
33     * Array with information about the containing addressbook
34     *
35     * @var array
36     */
37    protected $addressBookInfo;
38
39    /**
40     * Constructor
41     *
42     * @param Backend\BackendInterface $carddavBackend
43     * @param array $addressBookInfo
44     * @param array $cardData
45     */
46    public function __construct(Backend\BackendInterface $carddavBackend,array $addressBookInfo,array $cardData) {
47
48        $this->carddavBackend = $carddavBackend;
49        $this->addressBookInfo = $addressBookInfo;
50        $this->cardData = $cardData;
51
52    }
53
54    /**
55     * Returns the uri for this object
56     *
57     * @return string
58     */
59    public function getName() {
60
61        return $this->cardData['uri'];
62
63    }
64
65    /**
66     * Returns the VCard-formatted object
67     *
68     * @return string
69     */
70    public function get() {
71
72        // Pre-populating 'carddata' is optional. If we don't yet have it
73        // already, we fetch it from the backend.
74        if (!isset($this->cardData['carddata'])) {
75            $this->cardData = $this->carddavBackend->getCard($this->addressBookInfo['id'], $this->cardData['uri']);
76        }
77        return $this->cardData['carddata'];
78
79    }
80
81    /**
82     * Updates the VCard-formatted object
83     *
84     * @param string $cardData
85     * @return string|null
86     */
87    public function put($cardData) {
88
89        if (is_resource($cardData))
90            $cardData = stream_get_contents($cardData);
91
92        // Converting to UTF-8, if needed
93        $cardData = DAV\StringUtil::ensureUTF8($cardData);
94
95        $etag = $this->carddavBackend->updateCard($this->addressBookInfo['id'],$this->cardData['uri'],$cardData);
96        $this->cardData['carddata'] = $cardData;
97        $this->cardData['etag'] = $etag;
98
99        return $etag;
100
101    }
102
103    /**
104     * Deletes the card
105     *
106     * @return void
107     */
108    public function delete() {
109
110        $this->carddavBackend->deleteCard($this->addressBookInfo['id'],$this->cardData['uri']);
111
112    }
113
114    /**
115     * Returns the mime content-type
116     *
117     * @return string
118     */
119    public function getContentType() {
120
121        return 'text/x-vcard; charset=utf-8';
122
123    }
124
125    /**
126     * Returns an ETag for this object
127     *
128     * @return string
129     */
130    public function getETag() {
131
132        if (isset($this->cardData['etag'])) {
133            return $this->cardData['etag'];
134        } else {
135            $data = $this->get();
136            if (is_string($data)) {
137                return '"' . md5($data) . '"';
138            } else {
139                // We refuse to calculate the md5 if it's a stream.
140                return null;
141            }
142        }
143
144    }
145
146    /**
147     * Returns the last modification date as a unix timestamp
148     *
149     * @return int
150     */
151    public function getLastModified() {
152
153        return isset($this->cardData['lastmodified'])?$this->cardData['lastmodified']:null;
154
155    }
156
157    /**
158     * Returns the size of this object in bytes
159     *
160     * @return int
161     */
162    public function getSize() {
163
164        if (array_key_exists('size', $this->cardData)) {
165            return $this->cardData['size'];
166        } else {
167            return strlen($this->get());
168        }
169
170    }
171
172    /**
173     * Returns the owner principal
174     *
175     * This must be a url to a principal, or null if there's no owner
176     *
177     * @return string|null
178     */
179    public function getOwner() {
180
181        return $this->addressBookInfo['principaluri'];
182
183    }
184
185    /**
186     * Returns a group principal
187     *
188     * This must be a url to a principal, or null if there's no owner
189     *
190     * @return string|null
191     */
192    public function getGroup() {
193
194        return null;
195
196    }
197
198    /**
199     * Returns a list of ACE's for this node.
200     *
201     * Each ACE has the following properties:
202     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
203     *     currently the only supported privileges
204     *   * 'principal', a url to the principal who owns the node
205     *   * 'protected' (optional), indicating that this ACE is not allowed to
206     *      be updated.
207     *
208     * @return array
209     */
210    public function getACL() {
211
212        return array(
213            array(
214                'privilege' => '{DAV:}read',
215                'principal' => $this->addressBookInfo['principaluri'],
216                'protected' => true,
217            ),
218            array(
219                'privilege' => '{DAV:}write',
220                'principal' => $this->addressBookInfo['principaluri'],
221                'protected' => true,
222            ),
223        );
224
225    }
226
227    /**
228     * Updates the ACL
229     *
230     * This method will receive a list of new ACE's.
231     *
232     * @param array $acl
233     * @return void
234     */
235    public function setACL(array $acl) {
236
237        throw new DAV\Exception\MethodNotAllowed('Changing ACL is not yet supported');
238
239    }
240
241    /**
242     * Returns the list of supported privileges for this node.
243     *
244     * The returned data structure is a list of nested privileges.
245     * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple
246     * standard structure.
247     *
248     * If null is returned from this method, the default privilege set is used,
249     * which is fine for most common usecases.
250     *
251     * @return array|null
252     */
253    public function getSupportedPrivilegeSet() {
254
255        return null;
256
257    }
258
259}
260
Note: See TracBrowser for help on using the repository browser.