summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2016-12-10 12:22:15 +0100
committerGitHub <noreply@github.com>2016-12-10 12:22:15 +0100
commit4456fa57e05ecdcc452e5e20b90152b3e5d331fb (patch)
tree6c12537b0d5acdbf34acb8cb597dfafcb5a714e5
parentaedd1fc9a02cc2865f55c003798bc7b2319e9734 (diff)
parent474720ff1c7fb996b0537a6d786e0fb930c786b0 (diff)
downloadnextcloud-server-4456fa57e05ecdcc452e5e20b90152b3e5d331fb.tar.gz
nextcloud-server-4456fa57e05ecdcc452e5e20b90152b3e5d331fb.zip
Merge pull request #2274 from nextcloud/fix-invites-on-readonly-calendars
Do not add invites into read-only calendars
-rw-r--r--apps/dav/lib/CalDAV/CalendarHome.php7
-rw-r--r--apps/dav/lib/CalDAV/Schedule/Plugin.php59
2 files changed, 66 insertions, 0 deletions
diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php
index f84b0c863c6..7320754e6df 100644
--- a/apps/dav/lib/CalDAV/CalendarHome.php
+++ b/apps/dav/lib/CalDAV/CalendarHome.php
@@ -42,6 +42,13 @@ class CalendarHome extends \Sabre\CalDAV\CalendarHome {
}
/**
+ * @return BackendInterface
+ */
+ public function getCalDAVBackend() {
+ return $this->caldavBackend;
+ }
+
+ /**
* @inheritdoc
*/
function getChildren() {
diff --git a/apps/dav/lib/CalDAV/Schedule/Plugin.php b/apps/dav/lib/CalDAV/Schedule/Plugin.php
index ad55a2756b0..34df666637c 100644
--- a/apps/dav/lib/CalDAV/Schedule/Plugin.php
+++ b/apps/dav/lib/CalDAV/Schedule/Plugin.php
@@ -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,9 +24,28 @@
*/
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.
*
* @param string $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']);
+ });
+ }
+ }
}