Merge pull request #9609 from nextcloud/bugfix/3830/invitations_for_shared_calendars
send invitations for shared calendars
This commit is contained in:
commit
f5e16dfaa7
|
@ -31,6 +31,10 @@ use Sabre\DAV\PropFind;
|
||||||
use Sabre\DAV\Server;
|
use Sabre\DAV\Server;
|
||||||
use Sabre\DAV\Xml\Property\LocalHref;
|
use Sabre\DAV\Xml\Property\LocalHref;
|
||||||
use Sabre\DAVACL\IPrincipal;
|
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 {
|
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';
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue