Blame view

sources/3rdparty/sabre/dav/lib/Sabre/CalDAV/SharedCalendar.php 3.3 KB
03e52840d   Kload   Init
1
  <?php
6d9380f96   Cédric Dupont   Update sources OC...
2
3
4
  namespace Sabre\CalDAV;
  
  use Sabre\DAVACL;
03e52840d   Kload   Init
5
6
7
  /**
   * This object represents a CalDAV calendar that is shared by a different user.
   *
6d9380f96   Cédric Dupont   Update sources OC...
8
9
10
   * @copyright Copyright (C) 2007-2014 fruux GmbH (https://fruux.com/).
   * @author Evert Pot (http://evertpot.com/)
   * @license http://sabre.io/license/ Modified BSD License
03e52840d   Kload   Init
11
   */
6d9380f96   Cédric Dupont   Update sources OC...
12
  class SharedCalendar extends Calendar implements ISharedCalendar {
03e52840d   Kload   Init
13
14
15
16
  
      /**
       * Constructor
       *
6d9380f96   Cédric Dupont   Update sources OC...
17
       * @param Backend\BackendInterface $caldavBackend
03e52840d   Kload   Init
18
19
       * @param array $calendarInfo
       */
6d9380f96   Cédric Dupont   Update sources OC...
20
      public function __construct(Backend\BackendInterface $caldavBackend, $calendarInfo) {
03e52840d   Kload   Init
21
22
23
24
25
26
27
28
  
          $required = array(
              '{http://calendarserver.org/ns/}shared-url',
              '{http://sabredav.org/ns}owner-principal',
              '{http://sabredav.org/ns}read-only',
          );
          foreach($required as $r) {
              if (!isset($calendarInfo[$r])) {
6d9380f96   Cédric Dupont   Update sources OC...
29
                  throw new \InvalidArgumentException('The ' . $r . ' property must be specified for SharedCalendar(s)');
03e52840d   Kload   Init
30
31
              }
          }
6d9380f96   Cédric Dupont   Update sources OC...
32
          parent::__construct($caldavBackend, $calendarInfo);
03e52840d   Kload   Init
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  
      }
  
      /**
       * This method should return the url of the owners' copy of the shared
       * calendar.
       *
       * @return string
       */
      public function getSharedUrl() {
  
          return $this->calendarInfo['{http://calendarserver.org/ns/}shared-url'];
  
      }
  
      /**
       * Returns the owner principal
       *
       * This must be a url to a principal, or null if there's no owner
       *
       * @return string|null
       */
      public function getOwner() {
  
          return $this->calendarInfo['{http://sabredav.org/ns}owner-principal'];
  
      }
  
      /**
       * Returns a list of ACE's for this node.
       *
       * Each ACE has the following properties:
       *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
       *     currently the only supported privileges
       *   * 'principal', a url to the principal who owns the node
       *   * 'protected' (optional), indicating that this ACE is not allowed to
       *      be updated.
       *
       * @return array
       */
      public function getACL() {
  
          // The top-level ACL only contains access information for the true
          // owner of the calendar, so we need to add the information for the
          // sharee.
          $acl = parent::getACL();
          $acl[] = array(
              'privilege' => '{DAV:}read',
              'principal' => $this->calendarInfo['principaluri'],
              'protected' => true,
          );
          if (!$this->calendarInfo['{http://sabredav.org/ns}read-only']) {
              $acl[] = array(
                  'privilege' => '{DAV:}write',
                  'principal' => $this->calendarInfo['principaluri'],
                  'protected' => true,
              );
          }
          return $acl;
  
      }
6d9380f96   Cédric Dupont   Update sources OC...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
      /**
       * Returns the list of people whom this calendar is shared with.
       *
       * Every element in this array should have the following properties:
       *   * href - Often a mailto: address
       *   * commonName - Optional, for example a first + last name
       *   * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants.
       *   * readOnly - boolean
       *   * summary - Optional, a description for the share
       *
       * @return array
       */
      public function getShares() {
  
          return $this->caldavBackend->getShares($this->calendarInfo['id']);
  
      }
03e52840d   Kload   Init
111
112
  
  }