diff options
author | Achim Königs <garfonso@mobo.info> | 2016-03-26 14:27:38 +0100 |
---|---|---|
committer | Achim Königs <garfonso@mobo.info> | 2016-03-26 14:27:38 +0100 |
commit | 596a8416c2c36449c7b9842e95ea05720c88fca3 (patch) | |
tree | 4de43af057270ce30cd601015fee752f22bfbaa3 /apps/dav/lib/caldav | |
parent | 4b2f9e40275826c36bc1b225f321274f3b3bc2f1 (diff) | |
parent | 3e33b686b18b9e698ed16bf4466666357be0c407 (diff) | |
download | nextcloud-server-596a8416c2c36449c7b9842e95ea05720c88fca3.tar.gz nextcloud-server-596a8416c2c36449c7b9842e95ea05720c88fca3.zip |
Merge branch 'master' into alarms_for_birthdayevents
Diffstat (limited to 'apps/dav/lib/caldav')
-rw-r--r-- | apps/dav/lib/caldav/caldavbackend.php | 5 | ||||
-rw-r--r-- | apps/dav/lib/caldav/calendar.php | 40 |
2 files changed, 38 insertions, 7 deletions
diff --git a/apps/dav/lib/caldav/caldavbackend.php b/apps/dav/lib/caldav/caldavbackend.php index bb50100d9a2..5f82db10b39 100644 --- a/apps/dav/lib/caldav/caldavbackend.php +++ b/apps/dav/lib/caldav/caldavbackend.php @@ -138,6 +138,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription * @return array */ function getCalendarsForUser($principalUri) { + $principalUriOriginal = $principalUri; $principalUri = $this->convertPrincipal($principalUri, true); $fields = array_values($this->propertyMap); $fields[] = 'id'; @@ -184,7 +185,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription $stmt->closeCursor(); // query for shared calendars - $principals = $this->principalBackend->getGroupMembership($principalUri); + $principals = $this->principalBackend->getGroupMembership($principalUriOriginal, true); $principals[]= $principalUri; $fields = array_values($this->propertyMap); @@ -194,6 +195,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription $fields[] = 'a.components'; $fields[] = 'a.principaluri'; $fields[] = 'a.transparent'; + $fields[] = 's.access'; $query = $this->db->getQueryBuilder(); $result = $query->select($fields) ->from('dav_shares', 's') @@ -221,6 +223,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription '{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components), '{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'), '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'], + '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ, ]; foreach($this->propertyMap as $xmlName=>$dbName) { diff --git a/apps/dav/lib/caldav/calendar.php b/apps/dav/lib/caldav/calendar.php index 1e87f9b4333..5072d96107e 100644 --- a/apps/dav/lib/caldav/calendar.php +++ b/apps/dav/lib/caldav/calendar.php @@ -86,7 +86,31 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { } function getACL() { - $acl = parent::getACL(); + $acl = [ + [ + 'privilege' => '{DAV:}read', + 'principal' => $this->getOwner(), + 'protected' => true, + ]]; + $acl[] = [ + 'privilege' => '{DAV:}write', + 'principal' => $this->getOwner(), + 'protected' => true, + ]; + if ($this->getOwner() !== parent::getOwner()) { + $acl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => parent::getOwner(), + 'protected' => true, + ]; + if ($this->canWrite()) { + $acl[] = [ + 'privilege' => '{DAV:}write', + 'principal' => parent::getOwner(), + 'protected' => true, + ]; + } + } /** @var CalDavBackend $calDavBackend */ $calDavBackend = $this->caldavBackend; @@ -94,11 +118,7 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { } function getChildACL() { - $acl = parent::getChildACL(); - - /** @var CalDavBackend $calDavBackend */ - $calDavBackend = $this->caldavBackend; - return $calDavBackend->applyShareAcl($this->getResourceId(), $acl); + return $this->getACL(); } function getOwner() { @@ -137,4 +157,12 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { } parent::propPatch($propPatch); } + + private function canWrite() { + if (isset($this->calendarInfo['{http://owncloud.org/ns}read-only'])) { + return !$this->calendarInfo['{http://owncloud.org/ns}read-only']; + } + return true; + } + } |