diff options
Diffstat (limited to 'apps/dav/lib/caldav/calendar.php')
-rw-r--r-- | apps/dav/lib/caldav/calendar.php | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/apps/dav/lib/caldav/calendar.php b/apps/dav/lib/caldav/calendar.php new file mode 100644 index 00000000000..b4a47418350 --- /dev/null +++ b/apps/dav/lib/caldav/calendar.php @@ -0,0 +1,97 @@ +<?php + +namespace OCA\DAV\CalDAV; + +use OCA\DAV\DAV\Sharing\IShareable; + +class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { + + /** + * Updates the list of shares. + * + * The first array is a list of people that are to be added to the + * resource. + * + * Every element in the add array has the following properties: + * * href - A url. Usually a mailto: address + * * commonName - Usually a first and last name, or false + * * summary - A description of the share, can also be false + * * readOnly - A boolean value + * + * Every element in the remove array is just the address string. + * + * @param array $add + * @param array $remove + * @return void + */ + function updateShares(array $add, array $remove) { + /** @var CalDavBackend $calDavBackend */ + $calDavBackend = $this->caldavBackend; + $calDavBackend->updateShares($this, $add, $remove); + } + + /** + * Returns the list of people whom this resource 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 + */ + function getShares() { + /** @var CalDavBackend $caldavBackend */ + $caldavBackend = $this->caldavBackend; + return $caldavBackend->getShares($this->getResourceId()); + } + + /** + * @return int + */ + public function getResourceId() { + return $this->calendarInfo['id']; + } + + function getACL() { + $acl = parent::getACL(); + + // add the current user + if (isset($this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'])) { + $owner = $this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal']; + $acl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => $owner, + 'protected' => true, + ]; + if ($this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only']) { + $acl[] = [ + 'privilege' => '{DAV:}write', + 'principal' => $owner, + 'protected' => true, + ]; + } + } + + /** @var CalDavBackend $caldavBackend */ + $caldavBackend = $this->caldavBackend; + return $caldavBackend->applyShareAcl($this->getResourceId(), $acl); + } + + function getChildACL() { + $acl = parent::getChildACL(); + + /** @var CalDavBackend $caldavBackend */ + $caldavBackend = $this->caldavBackend; + return $caldavBackend->applyShareAcl($this->getResourceId(), $acl); + } + + function getOwner() { + if (isset($this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'])) { + return $this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal']; + } + return parent::getOwner(); + } +} |