Blame view

sources/apps/calendar/lib/sabre/calendar.php 3.89 KB
d1bafeea1   Kload   [fix] Upgrade to ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <?php
  /**
   * ownCloud - OC_Connector_Sabre_Sabre_CalDAV_Calendar
   *
   * @author Thomas Tanghus
   * @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
   * License as published by the Free Software Foundation; either
   * version 3 of the License, or any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
   *
   * You should have received a copy of the GNU Affero General Public
   * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
   *
   */
  
  /**
6d9380f96   Cédric Dupont   Update sources OC...
24
   * This class overrides \Sabre\CalDAV\Calendar::getACL() to return read/write
d1bafeea1   Kload   [fix] Upgrade to ...
25
   * permissions based on user and shared state and it overrides
6d9380f96   Cédric Dupont   Update sources OC...
26
   * \Sabre\CalDAV\Calendar::getChild() and \Sabre\CalDAV\Calendar::getChildren()
d1bafeea1   Kload   [fix] Upgrade to ...
27
28
   * to instantiate OC_Connector_Sabre_CalDAV_CalendarObjects.
  */
6d9380f96   Cédric Dupont   Update sources OC...
29
  class OC_Connector_Sabre_CalDAV_Calendar extends \Sabre\CalDAV\Calendar {
d1bafeea1   Kload   [fix] Upgrade to ...
30
31
32
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
  
  	/**
  	* 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() {
  
  		$readprincipal = $this->getOwner();
  		$writeprincipal = $this->getOwner();
  		$uid = OC_Calendar_Calendar::extractUserID($this->getOwner());
  
  		if($uid != OCP\USER::getUser()) {
  			if($uid === 'contact_birthdays') {
  				$readprincipal = 'principals/' . OCP\User::getUser();
  			} else {
  				$sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $this->calendarInfo['id']);
  				if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\PERMISSION_READ)) {
  					$readprincipal = 'principals/' . OCP\User::getUser();
  				}
  				if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\PERMISSION_UPDATE)) {
  					$writeprincipal = 'principals/' . OCP\User::getUser();
  				}
  			}
  		}
  
  		return array(
  			array(
  				'privilege' => '{DAV:}read',
  				'principal' => $readprincipal,
  				'protected' => true,
  			),
  			array(
  				'privilege' => '{DAV:}write',
  				'principal' => $writeprincipal,
  				'protected' => true,
  			),
  			array(
  				'privilege' => '{DAV:}read',
  				'principal' => $readprincipal . '/calendar-proxy-write',
  				'protected' => true,
  			),
  			array(
  				'privilege' => '{DAV:}write',
  				'principal' => $writeprincipal . '/calendar-proxy-write',
  				'protected' => true,
  			),
  			array(
  				'privilege' => '{DAV:}read',
  				'principal' => $readprincipal . '/calendar-proxy-read',
  				'protected' => true,
  			),
  			array(
6d9380f96   Cédric Dupont   Update sources OC...
90
  				'privilege' => '{' . \Sabre\CalDAV\Plugin::NS_CALDAV . '}read-free-busy',
d1bafeea1   Kload   [fix] Upgrade to ...
91
92
93
94
95
96
97
98
99
100
101
102
103
104
  				'principal' => '{DAV:}authenticated',
  				'protected' => true,
  			),
  
  		);
  
  	}
  
  	/**
  	* Returns a calendar object
  	*
  	* The contained calendar objects are for example Events or Todo's.
  	*
  	* @param string $name
6d9380f96   Cédric Dupont   Update sources OC...
105
  	* @return \Sabre\CalDAV\ICalendarObject
d1bafeea1   Kload   [fix] Upgrade to ...
106
107
108
109
  	*/
  	public function getChild($name) {
  		$obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name);
  		if (!$obj) {
6d9380f96   Cédric Dupont   Update sources OC...
110
  			throw new \Sabre\DAV\Exception\NotFound('Calendar object not found');
d1bafeea1   Kload   [fix] Upgrade to ...
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
  		}
  		return new OC_Connector_Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj);
  
  	}
  
  	/**
  	* Returns the full list of calendar objects
  	*
  	* @return array
  	*/
  	public function getChildren() {
  
  		$objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']);
  		$children = array();
  		foreach($objs as $obj) {
  			$children[] = new OC_Connector_Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj);
  		}
  		return $children;
  
  	}
6d9380f96   Cédric Dupont   Update sources OC...
131
  }