diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-06-01 12:40:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-01 12:40:53 +0200 |
commit | f5e16dfaa7e7ac749cf3cc13809764a260087a00 (patch) | |
tree | 93dda36e699a646e644578ae8497d5c827fc5b2f /apps | |
parent | c3fc789b2cad0b065647421a85b7d1d04fca03aa (diff) | |
parent | a9c313ce451c701a2e065e34022659cf17523963 (diff) | |
download | nextcloud-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.php | 67 |
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'; + + } } |