WIP: Second version of cal dav with new tempus structure

This commit is contained in:
Ivymaster
2026-07-06 18:17:23 +02:00
parent 3e17e99ce9
commit 280df46d6d
9 changed files with 1011 additions and 1059 deletions
+3 -95
View File
@@ -22,12 +22,12 @@ class Test extends FHC_Controller
{
$authBackend = new SabreDAVAuthLib();
$principalBackend = new SabreDAVACLPrincipalBackendLib($authBackend);
$calendarBackend = new SabreDAVCalDAVBackendLib($authBackend);
$principalBackend = new SabreDAVACLPrincipalBackend($authBackend);
$calendarBackend = new SabreDAVCalDAVBackend($authBackend);
$tree = array(
new \Sabre\CalDAV\Principal\Collection($principalBackend),
new SabreDAVReadOnlyCalendarRootLib($principalBackend, $calendarBackend)
new SabreDAVReadOnlyCalendarRoot($principalBackend, $calendarBackend)
);
$server = new \Sabre\DAV\Server($tree);
@@ -39,8 +39,6 @@ class Test extends FHC_Controller
$authPlugin = new \Sabre\DAV\Auth\Plugin($authBackend);
$server->addPlugin($authPlugin);
$this->_registerReadOnlyWriteInterceptor($server);
$caldavPlugin = new \Sabre\CalDAV\Plugin();
$server->addPlugin($caldavPlugin);
@@ -52,94 +50,4 @@ class Test extends FHC_Controller
$server->exec();
}
private function _registerReadOnlyWriteInterceptor($server)
{
$callback = function() use ($server) {
return $this->_discardReadOnlyWriteRequest($server, func_get_args());
};
if (method_exists($server, 'on'))
{
$server->on('beforeMethod', $callback, 20);
return;
}
if (method_exists($server, 'subscribeEvent'))
{
$server->subscribeEvent('beforeMethod', $callback, 20);
}
}
private function _discardReadOnlyWriteRequest($server, array $eventArgs)
{
$method = $this->_getDavRequestMethod($eventArgs);
if (!in_array($method, array('PUT', 'DELETE', 'PROPPATCH', 'MKCOL', 'MOVE', 'COPY'), true))
return true;
$this->_sendReadOnlyWriteAcceptedResponse($server, $eventArgs);
return false;
}
private function _getDavRequestMethod(array $eventArgs)
{
foreach ($eventArgs as $argument)
{
if (is_string($argument))
return strtoupper($argument);
if (is_object($argument) && method_exists($argument, 'getMethod'))
return strtoupper($argument->getMethod());
}
return isset($_SERVER['REQUEST_METHOD']) ? strtoupper($_SERVER['REQUEST_METHOD']) : '';
}
private function _sendReadOnlyWriteAcceptedResponse($server, array $eventArgs)
{
$response = $this->_getDavResponse($server, $eventArgs);
if (is_object($response))
{
if (method_exists($response, 'setStatus'))
{
$response->setStatus(204);
if (method_exists($response, 'setHeader'))
$response->setHeader('Content-Length', '0');
if (method_exists($response, 'setBody'))
$response->setBody('');
return;
}
if (method_exists($response, 'sendStatus'))
{
if (method_exists($response, 'setHeader'))
$response->setHeader('Content-Length', '0');
$response->sendStatus(204);
return;
}
}
if (!headers_sent())
{
header('HTTP/1.1 204 No Content');
header('Content-Length: 0');
}
}
private function _getDavResponse($server, array $eventArgs)
{
foreach ($eventArgs as $argument)
{
if (is_object($argument) && (
method_exists($argument, 'setStatus')
|| method_exists($argument, 'sendStatus')
))
{
return $argument;
}
}
return isset($server->httpResponse) ? $server->httpResponse : null;
}
}