aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-06-01 12:40:53 +0200
committerGitHub <noreply@github.com>2018-06-01 12:40:53 +0200
commitf5e16dfaa7e7ac749cf3cc13809764a260087a00 (patch)
tree93dda36e699a646e644578ae8497d5c827fc5b2f /apps
parentc3fc789b2cad0b065647421a85b7d1d04fca03aa (diff)
parenta9c313ce451c701a2e065e34022659cf17523963 (diff)
downloadnextcloud-server-f5e16dfaa7e7ac749cf3cc13809764a260087a00.tar.gz
nextcloud-server-f5e16dfaa7e7ac749cf3cc13809764a260087a00.zip
Merge pull request #9609 from nextcloud/bugfix/3830/invitations_for_shared_calendars
send invitations for shared calendars
Diffstat (limited to 'apps')
-rw-r--r--apps/dav/lib/CalDAV/Schedule/Plugin.php67
1 files changed, 67 insertions, 0 deletions
diff --git a/apps/dav/lib/CalDAV/Schedule/Plugin.php b/apps/dav/lib/CalDAV/Schedule/Plugin.php
index 34df666637c..faf495a4de6 100644
--- a/apps/dav/lib/CalDAV/Schedule/Plugin.php
+++ b/apps/dav/lib/CalDAV/Schedule/Plugin.php
@@ -31,6 +31,10 @@ use Sabre\DAV\PropFind;
use Sabre\DAV\Server;
use Sabre\DAV\Xml\Property\LocalHref;
use Sabre\DAVACL\IPrincipal;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
+use Sabre\VObject\Component\VCalendar;
+use Sabre\VObject\Reader;
class Plugin extends \Sabre\CalDAV\Schedule\Plugin {
@@ -98,4 +102,67 @@ class Plugin extends \Sabre\CalDAV\Schedule\Plugin {
});
}
}
+
+ /**
+ * This method is triggered whenever there was a calendar object gets
+ * created or updated.
+ *
+ * Basically just a copy of parent::calendarObjectChange, with the change
+ * from:
+ * $addresses = $this->getAddressesForPrincipal($calendarNode->getOwner());
+ * to:
+ * $addresses = $this->getAddressesForPrincipal($calendarNode->getPrincipalURI());
+ *
+ * @param RequestInterface $request HTTP request
+ * @param ResponseInterface $response HTTP Response
+ * @param VCalendar $vCal Parsed iCalendar object
+ * @param mixed $calendarPath Path to calendar collection
+ * @param mixed $modified The iCalendar object has been touched.
+ * @param mixed $isNew Whether this was a new item or we're updating one
+ * @return void
+ */
+ function calendarObjectChange(RequestInterface $request, ResponseInterface $response, VCalendar $vCal, $calendarPath, &$modified, $isNew) {
+
+ if (!$this->scheduleReply($this->server->httpRequest)) {
+ return;
+ }
+
+ $calendarNode = $this->server->tree->getNodeForPath($calendarPath);
+
+ $addresses = $this->getAddressesForPrincipal(
+ $calendarNode->getPrincipalURI()
+ );
+
+ if (!$isNew) {
+ $node = $this->server->tree->getNodeForPath($request->getPath());
+ $oldObj = Reader::read($node->get());
+ } else {
+ $oldObj = null;
+ }
+
+ $this->processICalendarChange($oldObj, $vCal, $addresses, [], $modified);
+
+ if ($oldObj) {
+ // Destroy circular references so PHP will GC the object.
+ $oldObj->destroy();
+ }
+
+ }
+
+ /**
+ * This method checks the 'Schedule-Reply' header
+ * and returns false if it's 'F', otherwise true.
+ *
+ * Copied from Sabre/DAV's Schedule plugin, because it's
+ * private for whatever reason
+ *
+ * @param RequestInterface $request
+ * @return bool
+ */
+ private function scheduleReply(RequestInterface $request) {
+
+ $scheduleReply = $request->getHeader('Schedule-Reply');
+ return $scheduleReply !== 'F';
+
+ }
}