|
|
|
@ -1,7 +1,9 @@ |
|
|
|
<?php |
|
|
|
/** |
|
|
|
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl> |
|
|
|
* @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com> |
|
|
|
* |
|
|
|
* @author Joas Schilling <coding@schilljs.com> |
|
|
|
* @author Roeland Jago Douma <roeland@famdouma.nl> |
|
|
|
* |
|
|
|
* @license GNU AGPL version 3 or any later version |
|
|
|
@ -22,8 +24,27 @@ |
|
|
|
*/ |
|
|
|
namespace OCA\DAV\CalDAV\Schedule; |
|
|
|
|
|
|
|
use OCA\DAV\CalDAV\CalDavBackend; |
|
|
|
use OCA\DAV\CalDAV\CalendarHome; |
|
|
|
use Sabre\DAV\INode; |
|
|
|
use Sabre\DAV\PropFind; |
|
|
|
use Sabre\DAV\Server; |
|
|
|
use Sabre\DAV\Xml\Property\LocalHref; |
|
|
|
use Sabre\DAVACL\IPrincipal; |
|
|
|
|
|
|
|
class Plugin extends \Sabre\CalDAV\Schedule\Plugin { |
|
|
|
|
|
|
|
/** |
|
|
|
* Initializes the plugin |
|
|
|
* |
|
|
|
* @param Server $server |
|
|
|
* @return void |
|
|
|
*/ |
|
|
|
function initialize(Server $server) { |
|
|
|
parent::initialize($server); |
|
|
|
$server->on('propFind', [$this, 'propFindDefaultCalendarUrl'], 90); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Returns a list of addresses that are associated with a principal. |
|
|
|
* |
|
|
|
@ -39,4 +60,42 @@ class Plugin extends \Sabre\CalDAV\Schedule\Plugin { |
|
|
|
|
|
|
|
return $result; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Always use the personal calendar as target for scheduled events |
|
|
|
* |
|
|
|
* @param PropFind $propFind |
|
|
|
* @param INode $node |
|
|
|
* @return void |
|
|
|
*/ |
|
|
|
function propFindDefaultCalendarUrl(PropFind $propFind, INode $node) { |
|
|
|
if ($node instanceof IPrincipal) { |
|
|
|
$propFind->handle('{' . self::NS_CALDAV . '}schedule-default-calendar-URL', function() use ($node) { |
|
|
|
/** @var \OCA\DAV\CalDAV\Plugin $caldavPlugin */ |
|
|
|
$caldavPlugin = $this->server->getPlugin('caldav'); |
|
|
|
$principalUrl = $node->getPrincipalUrl(); |
|
|
|
|
|
|
|
$calendarHomePath = $caldavPlugin->getCalendarHomeForPrincipal($principalUrl); |
|
|
|
|
|
|
|
if (!$calendarHomePath) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
/** @var CalendarHome $calendarHome */ |
|
|
|
$calendarHome = $this->server->tree->getNodeForPath($calendarHomePath); |
|
|
|
if (!$calendarHome->childExists(CalDavBackend::PERSONAL_CALENDAR_URI)) { |
|
|
|
$calendarHome->getCalDAVBackend()->createCalendar($principalUrl, CalDavBackend::PERSONAL_CALENDAR_URI, [ |
|
|
|
'{DAV:}displayname' => CalDavBackend::PERSONAL_CALENDAR_NAME, |
|
|
|
]); |
|
|
|
} |
|
|
|
|
|
|
|
$result = $this->server->getPropertiesForPath($calendarHomePath . '/' . CalDavBackend::PERSONAL_CALENDAR_URI, [], 1); |
|
|
|
if (empty($result)) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
return new LocalHref($result[0]['href']); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |