diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-06-01 13:37:07 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-01 13:37:07 +0300 |
commit | 271bbaa809d0b4d50d566dd7de5a057891729505 (patch) | |
tree | 1213078d2b163967c0409f277f06a1e4062caaf4 /apps | |
parent | cf4ff7716ef3944693c0d9fe634c2e99b40435f9 (diff) | |
parent | f1108b9d26f12e8a371185a5dc07c4d38b2dd824 (diff) |
Merge pull request #9610 from nextcloud/bugfix-stable13/3830/invitations_for_shared_calendars
[stable13] 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'; + + } } |