Blame view

sources/apps/calendar/lib/sabre/object.php 3.02 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_CalDAV_CalendarObject
   *
   * @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\CalendarObject::getACL()
d1bafeea1   Kload   [fix] Upgrade to ...
25
26
   * to return read/write permissions based on user and shared state.
  */
6d9380f96   Cédric Dupont   Update sources OC...
27
  class OC_Connector_Sabre_CalDAV_CalendarObject extends \Sabre\CalDAV\CalendarObject {
d1bafeea1   Kload   [fix] Upgrade to ...
28
29
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
90
91
  
  	/**
  	* 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 {
  				$object = OC_VObject::parse($this->objectData['calendardata']);
  				$sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $this->calendarInfo['id']);
  				$sharedAccessClassPermissions = OC_Calendar_Object::getAccessClassPermissions($object);
  				if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\PERMISSION_READ) && ($sharedAccessClassPermissions & OCP\PERMISSION_READ)) {
  					$readprincipal = 'principals/' . OCP\USER::getUser();
  				}
  				if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\PERMISSION_UPDATE) && ($sharedAccessClassPermissions & 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,
  			),
  		);
  
  	}
6d9380f96   Cédric Dupont   Update sources OC...
92
  }