isUserAgent(self::ENABLE_FOR_CLIENTS)) { $this->enabled = true; } $magicHeader = $request->getHeader('X-NC-CalDAV-Webcal-Caching'); if ($magicHeader === 'On') { $this->enabled = true; } $isExportRequest = $request->getMethod() === 'GET' && array_key_exists('export', $request->getParams()); if ($isExportRequest) { $this->enabled = true; } } /** * This initializes the plugin. * * This function is called by Sabre\DAV\Server, after * addPlugin is called. * * This method should set up the required event subscriptions. * * @param Server $server */ public function initialize(Server $server) { $this->server = $server; $server->on('beforeMethod:*', [$this, 'beforeMethod'], 15); } /** * @param RequestInterface $request * @param ResponseInterface $response */ public function beforeMethod(RequestInterface $request, ResponseInterface $response) { if (!$this->enabled) { return; } $path = $request->getPath(); if (!str_starts_with($path, 'calendars/')) { return; } $pathParts = explode('/', ltrim($path, '/')); if (\count($pathParts) < 2) { return; } try { $calendarRoot = $this->server->tree->getNodeForPath($pathParts[0]); if ($calendarRoot instanceof CalendarRoot) { $calendarRoot->enableReturnCachedSubscriptions($pathParts[1]); } } catch (NotFound $ex) { return; } } /** * @return bool */ public function isCachingEnabledForThisRequest():bool { return $this->enabled; } /** * This method should return a list of server-features. * * This is for example 'versioning' and is added to the DAV: header * in an OPTIONS response. * * @return string[] */ public function getFeatures():array { return ['nc-calendar-webcal-cache']; } /** * Returns a plugin name. * * Using this name other plugins will be able to access other plugins * using Sabre\DAV\Server::getPlugin * * @return string */ public function getPluginName():string { return 'nc-calendar-webcal-cache'; } }