mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-30 16:40:28 +01:00
230 lines
7.2 KiB
PHP
230 lines
7.2 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Sabre\CalDAV;
|
||
|
|
||
|
use Sabre\DAV\Sharing\Plugin as SPlugin;
|
||
|
|
||
|
/**
|
||
|
* This object represents a CalDAV calendar that is shared by a different user.
|
||
|
*
|
||
|
* @copyright Copyright (C) fruux GmbH (https://fruux.com/)
|
||
|
* @author Evert Pot (http://evertpot.com/)
|
||
|
* @license http://sabre.io/license/ Modified BSD License
|
||
|
*/
|
||
|
class SharedCalendar extends Calendar implements ISharedCalendar {
|
||
|
|
||
|
/**
|
||
|
* Returns the 'access level' for the instance of this shared resource.
|
||
|
*
|
||
|
* The value should be one of the Sabre\DAV\Sharing\Plugin::ACCESS_
|
||
|
* constants.
|
||
|
*
|
||
|
* @return int
|
||
|
*/
|
||
|
function getShareAccess() {
|
||
|
|
||
|
return isset($this->calendarInfo['share-access']) ? $this->calendarInfo['share-access'] : SPlugin::ACCESS_NOTSHARED;
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function must return a URI that uniquely identifies the shared
|
||
|
* resource. This URI should be identical across instances, and is
|
||
|
* also used in several other XML bodies to connect invites to
|
||
|
* resources.
|
||
|
*
|
||
|
* This may simply be a relative reference to the original shared instance,
|
||
|
* but it could also be a urn. As long as it's a valid URI and unique.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
function getShareResourceUri() {
|
||
|
|
||
|
return $this->calendarInfo['share-resource-uri'];
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Updates the list of sharees.
|
||
|
*
|
||
|
* Every item must be a Sharee object.
|
||
|
*
|
||
|
* @param \Sabre\DAV\Xml\Element\Sharee[] $sharees
|
||
|
* @return void
|
||
|
*/
|
||
|
function updateInvites(array $sharees) {
|
||
|
|
||
|
$this->caldavBackend->updateInvites($this->calendarInfo['id'], $sharees);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the list of people whom this resource is shared with.
|
||
|
*
|
||
|
* Every item in the returned array must be a Sharee object with
|
||
|
* at least the following properties set:
|
||
|
*
|
||
|
* * $href
|
||
|
* * $shareAccess
|
||
|
* * $inviteStatus
|
||
|
*
|
||
|
* and optionally:
|
||
|
*
|
||
|
* * $properties
|
||
|
*
|
||
|
* @return \Sabre\DAV\Xml\Element\Sharee[]
|
||
|
*/
|
||
|
function getInvites() {
|
||
|
|
||
|
return $this->caldavBackend->getInvites($this->calendarInfo['id']);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Marks this calendar as published.
|
||
|
*
|
||
|
* Publishing a calendar should automatically create a read-only, public,
|
||
|
* subscribable calendar.
|
||
|
*
|
||
|
* @param bool $value
|
||
|
* @return void
|
||
|
*/
|
||
|
function setPublishStatus($value) {
|
||
|
|
||
|
$this->caldavBackend->setPublishStatus($this->calendarInfo['id'], $value);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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
|
||
|
*/
|
||
|
function getACL() {
|
||
|
|
||
|
$acl = [];
|
||
|
|
||
|
switch ($this->getShareAccess()) {
|
||
|
case SPlugin::ACCESS_NOTSHARED :
|
||
|
case SPlugin::ACCESS_SHAREDOWNER :
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}share',
|
||
|
'principal' => $this->calendarInfo['principaluri'],
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}share',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
// No break intentional!
|
||
|
case SPlugin::ACCESS_READWRITE :
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}write',
|
||
|
'principal' => $this->calendarInfo['principaluri'],
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}write',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
// No break intentional!
|
||
|
case SPlugin::ACCESS_READ :
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}write-properties',
|
||
|
'principal' => $this->calendarInfo['principaluri'],
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}write-properties',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}read',
|
||
|
'principal' => $this->calendarInfo['principaluri'],
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}read',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}read',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{' . Plugin::NS_CALDAV . '}read-free-busy',
|
||
|
'principal' => '{DAV:}authenticated',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
break;
|
||
|
}
|
||
|
return $acl;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This method returns the ACL's for calendar objects in this calendar.
|
||
|
* The result of this method automatically gets passed to the
|
||
|
* calendar-object nodes in the calendar.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function getChildACL() {
|
||
|
|
||
|
$acl = [];
|
||
|
|
||
|
switch ($this->getShareAccess()) {
|
||
|
case SPlugin::ACCESS_NOTSHARED :
|
||
|
// No break intentional
|
||
|
case SPlugin::ACCESS_SHAREDOWNER :
|
||
|
// No break intentional
|
||
|
case SPlugin::ACCESS_READWRITE:
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}write',
|
||
|
'principal' => $this->calendarInfo['principaluri'],
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}write',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
// No break intentional
|
||
|
case SPlugin::ACCESS_READ:
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}read',
|
||
|
'principal' => $this->calendarInfo['principaluri'],
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}read',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
$acl[] = [
|
||
|
'privilege' => '{DAV:}read',
|
||
|
'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read',
|
||
|
'protected' => true,
|
||
|
];
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return $acl;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|