Skip to content

Commit

Permalink
send invitations for shared calendars
Browse files Browse the repository at this point in the history
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
  • Loading branch information
georgehrke committed May 25, 2018
1 parent 6689a3e commit a9c313c
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions apps/dav/lib/CalDAV/Schedule/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
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 {

Expand Down Expand Up @@ -98,4 +102,67 @@ function propFindDefaultCalendarUrl(PropFind $propFind, INode $node) {
});
}
}

/**
* 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';

}
}

0 comments on commit a9c313c

Please sign in to comment.