Lines Matching +full:fetch +full:- +full:depth
76 $node = $this->server->tree->getNodeForPath($parent);
80 $node->getChild($name);
106 // excludes things like the calendar-proxy-read principal (which it
123 return ['calendar-access', 'calendar-proxy'];
144 * This will be used in the {DAV:}supported-report-set property.
153 $node = $this->server->tree->getNodeForPath($uri);
157 $reports[] = '{' . self::NS_CALDAV . '}calendar-multiget';
158 $reports[] = '{' . self::NS_CALDAV . '}calendar-query';
161 $reports[] = '{' . self::NS_CALDAV . '}free-busy-query';
164 // if we say we support it on the calendar-home, even though this is
166 if ($node instanceof CalendarHome && $this->server->getPlugin('sync')) {
167 $reports[] = '{DAV:}sync-collection';
181 $this->server = $server;
183 $server->on('method:MKCALENDAR', [$this, 'httpMkCalendar']);
184 $server->on('report', [$this, 'report']);
185 $server->on('propFind', [$this, 'propFind']);
186 $server->on('onHTMLActionsPanel', [$this, 'htmlActionsPanel']);
187 $server->on('beforeCreateFile', [$this, 'beforeCreateFile']);
188 $server->on('beforeWriteContent', [$this, 'beforeWriteContent']);
189 $server->on('afterMethod:GET', [$this, 'httpAfterGET']);
190 $server->on('getSupportedPrivilegeSet', [$this, 'getSupportedPrivilegeSet']);
192 $server->xml->namespaceMap[self::NS_CALDAV] = 'cal';
193 $server->xml->namespaceMap[self::NS_CALENDARSERVER] = 'cs';
195 …$server->xml->elementMap['{' . self::NS_CALDAV . '}supported-calendar-component-set'] = 'Sabre\\Ca…
196 …$server->xml->elementMap['{' . self::NS_CALDAV . '}calendar-query'] = 'Sabre\\CalDAV\\Xml\\Request…
197 …$server->xml->elementMap['{' . self::NS_CALDAV . '}calendar-multiget'] = 'Sabre\\CalDAV\\Xml\\Requ…
198 …$server->xml->elementMap['{' . self::NS_CALDAV . '}free-busy-query'] = 'Sabre\\CalDAV\\Xml\\Reques…
199 …$server->xml->elementMap['{' . self::NS_CALDAV . '}mkcalendar'] = 'Sabre\\CalDAV\\Xml\\Request\\Mk…
200 …$server->xml->elementMap['{' . self::NS_CALDAV . '}schedule-calendar-transp'] = 'Sabre\\CalDAV\\Xm…
201 …$server->xml->elementMap['{' . self::NS_CALDAV . '}supported-calendar-component-set'] = 'Sabre\\Ca…
203 …$server->resourceTypeMapping['\\Sabre\\CalDAV\\ICalendar'] = '{urn:ietf:params:xml:ns:caldav}calen…
205 …$server->resourceTypeMapping['\\Sabre\\CalDAV\\Principal\\IProxyRead'] = '{http://calendarserver.o…
206 …$server->resourceTypeMapping['\\Sabre\\CalDAV\\Principal\\IProxyWrite'] = '{http://calendarserver.…
208 array_push($server->protectedProperties,
210 '{' . self::NS_CALDAV . '}supported-calendar-component-set',
211 '{' . self::NS_CALDAV . '}supported-calendar-data',
212 '{' . self::NS_CALDAV . '}max-resource-size',
213 '{' . self::NS_CALDAV . '}min-date-time',
214 '{' . self::NS_CALDAV . '}max-date-time',
215 '{' . self::NS_CALDAV . '}max-instances',
216 '{' . self::NS_CALDAV . '}max-attendees-per-instance',
217 '{' . self::NS_CALDAV . '}calendar-home-set',
218 '{' . self::NS_CALDAV . '}supported-collation-set',
219 '{' . self::NS_CALDAV . '}calendar-data',
223 '{' . self::NS_CALENDARSERVER . '}calendar-proxy-read-for',
224 '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for'
228 if ($aclPlugin = $server->getPlugin('acl')) {
229 …$aclPlugin->principalSearchPropertySet['{' . self::NS_CALDAV . '}calendar-user-address-set'] = 'Ca…
244 case '{' . self::NS_CALDAV . '}calendar-multiget' :
245 $this->server->transactionType = 'report-calendar-multiget';
246 $this->calendarMultiGetReport($report);
248 case '{' . self::NS_CALDAV . '}calendar-query' :
249 $this->server->transactionType = 'report-calendar-query';
250 $this->calendarQueryReport($report);
252 case '{' . self::NS_CALDAV . '}free-busy-query' :
253 $this->server->transactionType = 'report-free-busy-query';
254 $this->freeBusyQueryReport($report);
272 $body = $request->getBodyAsString();
273 $path = $request->getPath();
280 $mkcalendar = $this->server->xml->expect(
285 throw new BadRequest($e->getMessage(), null, $e);
287 $properties = $mkcalendar->getProperties();
291 // iCal abuses MKCALENDAR since iCal 10.9.2 to create server-stored
296 // request, and we simply use it instead of the pre-defined list.
298 $resourceType = $properties['{DAV:}resourcetype']->getValue();
303 $this->server->createCollection($path, new MkCol($resourceType, $properties));
305 $response->setStatus(201);
306 $response->setHeader('Content-Length', 0);
329 $propFind->handle($ns . 'max-resource-size', $this->maxResourceSize);
330 $propFind->handle($ns . 'supported-calendar-data', function() {
333 $propFind->handle($ns . 'supported-collation-set', function() {
341 $principalUrl = $node->getPrincipalUrl();
343 … $propFind->handle('{' . self::NS_CALDAV . '}calendar-home-set', function() use ($principalUrl) {
345 $calendarHomePath = $this->getCalendarHomeForPrincipal($principalUrl);
350 // The calendar-user-address-set property is basically mapped to
351 // the {DAV:}alternate-URI-set property.
352 … $propFind->handle('{' . self::NS_CALDAV . '}calendar-user-address-set', function() use ($node) {
353 $addresses = $node->getAlternateUriSet();
354 $addresses[] = $this->server->getBaseUri() . $node->getPrincipalUrl() . '/';
359 … $propFind->handle('{' . self::NS_CALENDARSERVER . '}email-address-set', function() use ($node) {
360 $addresses = $node->getAlternateUriSet();
372 $propRead = '{' . self::NS_CALENDARSERVER . '}calendar-proxy-read-for';
373 $propWrite = '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for';
375 … if ($propFind->getStatus($propRead) === 404 || $propFind->getStatus($propWrite) === 404) {
377 $aclPlugin = $this->server->getPlugin('acl');
378 $membership = $aclPlugin->getPrincipalMembership($propFind->getPath());
384 $groupNode = $this->server->tree->getNodeForPath($group);
388 // If the node is either ap proxy-read or proxy-write
400 $propFind->set($propRead, new LocalHref($readList));
401 $propFind->set($propWrite, new LocalHref($writeList));
409 // The calendar-data property is not supposed to be a 'real'
412 $propFind->handle('{' . self::NS_CALDAV . '}calendar-data', function() use ($node) {
413 $val = $node->get();
427 * This function handles the calendar-multiget REPORT.
429 * This report is used by the client to fetch the content of a series
437 $needsJson = $report->contentType === 'application/calendar+json';
443 [$this->server, 'calculateUri'],
444 $report->hrefs
447 …foreach ($this->server->getPropertiesForMultiplePaths($paths, $report->properties) as $uri => $obj…
449 …if (($needsJson || $report->expand) && isset($objProps[200]['{' . self::NS_CALDAV . '}calendar-dat…
450 … $vObject = VObject\Reader::read($objProps[200]['{' . self::NS_CALDAV . '}calendar-data']);
452 if ($report->expand) {
457 // Checking the calendar-timezone property.
458 $tzProp = '{' . self::NS_CALDAV . '}calendar-timezone';
459 $tzResult = $this->server->getProperties($calendarPath, [$tzProp]);
464 $timeZone = $vtimezoneObj->VTIMEZONE->getTimeZone();
472 …$vObject = $vObject->expand($report->expand['start'], $report->expand['end'], $timeZones[$calendar…
475 … $objProps[200]['{' . self::NS_CALDAV . '}calendar-data'] = json_encode($vObject->jsonSerialize());
477 … $objProps[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize();
481 $vObject->destroy();
488 $prefer = $this->server->getHTTPPrefer();
490 $this->server->httpResponse->setStatus(207);
491 $this->server->httpResponse->setHeader('Content-Type', 'application/xml; charset=utf-8');
492 $this->server->httpResponse->setHeader('Vary', 'Brief,Prefer');
493 …$this->server->httpResponse->setBody($this->server->generateMultiStatus($propertyList, $prefer['re…
498 * This function handles the calendar-query REPORT
508 $path = $this->server->getRequestUri();
510 $needsJson = $report->contentType === 'application/calendar+json';
512 $node = $this->server->tree->getNodeForPath($this->server->getRequestUri());
513 $depth = $this->server->getHTTPDepth(0);
519 if ($report->expand) {
522 $tzProp = '{' . self::NS_CALDAV . '}calendar-timezone';
523 $tzResult = $this->server->getProperties($path, [$tzProp]);
528 $calendarTimeZone = $vtimezoneObj->VTIMEZONE->getTimeZone();
532 $vtimezoneObj->destroy();
541 if ($depth == 0 && $node instanceof ICalendarObject) {
544 $requestedProperties = $report->properties;
546 if (!in_array('{urn:ietf:params:xml:ns:caldav}calendar-data', $requestedProperties)) {
548 // We always retrieve calendar-data, as we need it for filtering.
549 $requestedProperties[] = '{urn:ietf:params:xml:ns:caldav}calendar-data';
551 // If calendar-data wasn't explicitly requested, we need to remove
556 $properties = $this->server->getPropertiesForPath(
566 // If there wasn't any calendar-data returned somehow, we ignore
568 if (isset($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data'])) {
572 … $vObject = VObject\Reader::read($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']);
573 if ($validator->validate($vObject, $report->filters)) {
575 // If the client didn't require the calendar-data property,
578 unset($properties[200]['{urn:ietf:params:xml:ns:caldav}calendar-data']);
582 if ($report->expand) {
583 … $vObject = $vObject->expand($report->expand['start'], $report->expand['end'], $calendarTimeZone);
586 …$properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = json_encode($vObject->jsonSerialize()…
587 } elseif ($report->expand) {
588 … $properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize();
597 $vObject->destroy();
603 if ($node instanceof ICalendarObjectContainer && $depth === 0) {
605 if (strpos($this->server->httpRequest->getHeader('User-Agent'), 'MSFT-') === 0) {
606 // Microsoft clients incorrectly supplied depth as 0, when it actually
607 // should have set depth to 1. We're implementing a workaround here
613 $depth = 1;
615 …throw new BadRequest('A calendar-query REPORT on a calendar with a Depth: 0 is undefined. Set Dept…
621 // for the calendar-query.
622 if ($node instanceof ICalendarObjectContainer && $depth == 1) {
624 $nodePaths = $node->calendarQuery($report->filters);
629 …$this->server->getPropertiesForPath($this->server->getRequestUri() . '/' . $path, $report->propert…
631 if (($needsJson || $report->expand)) {
632 … $vObject = VObject\Reader::read($properties[200]['{' . self::NS_CALDAV . '}calendar-data']);
634 if ($report->expand) {
635 … $vObject = $vObject->expand($report->expand['start'], $report->expand['end'], $calendarTimeZone);
639 …$properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = json_encode($vObject->jsonSerialize()…
641 … $properties[200]['{' . self::NS_CALDAV . '}calendar-data'] = $vObject->serialize();
646 $vObject->destroy();
654 $prefer = $this->server->getHTTPPrefer();
656 $this->server->httpResponse->setStatus(207);
657 $this->server->httpResponse->setHeader('Content-Type', 'application/xml; charset=utf-8');
658 $this->server->httpResponse->setHeader('Vary', 'Brief,Prefer');
659 …$this->server->httpResponse->setBody($this->server->generateMultiStatus($result, $prefer['return']…
665 * response for the CALDAV:free-busy-query REPORT.
672 $uri = $this->server->getRequestUri();
674 $acl = $this->server->getPlugin('acl');
676 $acl->checkPrivileges($uri, '{' . self::NS_CALDAV . '}read-free-busy');
679 $calendar = $this->server->tree->getNodeForPath($uri);
681 …throw new DAV\Exception\NotImplemented('The free-busy-query REPORT is only implemented on calendar…
684 $tzProp = '{' . self::NS_CALDAV . '}calendar-timezone';
688 $calendarProps = $this->server->getProperties($uri, [$tzProp]);
692 $calendarTimeZone = $vtimezoneObj->VTIMEZONE->getTimeZone();
694 $vtimezoneObj->destroy();
699 // Doing a calendar-query first, to make sure we get the most
701 $urls = $calendar->calendarQuery([
703 'comp-filters' => [
706 'comp-filters' => [],
707 'prop-filters' => [],
708 'is-not-defined' => false,
709 'time-range' => [
710 'start' => $report->start,
711 'end' => $report->end,
715 'prop-filters' => [],
716 'is-not-defined' => false,
717 'time-range' => null,
721 $obj = $calendar->getChild($url)->get();
726 $generator->setObjects($objects);
727 $generator->setTimeRange($report->start, $report->end);
728 $generator->setTimeZone($calendarTimeZone);
729 $result = $generator->getResult();
730 $result = $result->serialize();
732 $this->server->httpResponse->setStatus(200);
733 $this->server->httpResponse->setHeader('Content-Type', 'text/calendar');
734 $this->server->httpResponse->setHeader('Content-Length', strlen($result));
735 $this->server->httpResponse->setBody($result);
759 // for non-calendars (such as an inbox).
761 $parentNode = $this->server->tree->getNodeForPath($parent);
766 $this->validateICalendar(
770 $this->server->httpRequest,
771 $this->server->httpResponse,
795 $this->validateICalendar(
799 $this->server->httpRequest,
800 $this->server->httpResponse,
838 $data = $vobj->serialize();
846 …ediaType('This resource only supports valid iCalendar 2.0 data. Parse error: ' . $e->getMessage());
850 if ($vobj->name !== 'VCALENDAR') {
854 $sCCS = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set';
858 $calendarProperties = $this->server->getProperties($parentPath, [$sCCS]);
861 $supportedComponents = $calendarProperties[$sCCS]->getValue();
868 foreach ($vobj->getComponents() as $component) {
869 switch ($component->name) {
875 $foundType = $component->name;
886 $prefer = $this->server->getHTTPPrefer();
892 $messages = $vobj->validate($options);
923 $response->setHeader(
924 'X-Sabre-Ew-Gross',
932 // This helps us determine if we need to re-serialize the object.
935 $this->server->emit(
949 $data = $vobj->serialize();
959 $vobj->destroy();
973 … $supportedPrivilegeSet['{DAV:}read']['aggregates']['{' . self::NS_CALDAV . '}read-free-busy'] = [
1019 if (strpos($response->getHeader('Content-Type'), 'text/calendar') === false) {
1024 $request->getHeader('Accept'),
1034 $vobj = VObject\Reader::read($response->getBody());
1036 $jsonBody = json_encode($vobj->jsonSerialize());
1037 $response->setBody($jsonBody);
1040 $vobj->destroy();
1042 $response->setHeader('Content-Type', 'application/calendar+json');
1043 $response->setHeader('Content-Length', strlen($jsonBody));
1048 * Returns a bunch of meta-data about the plugin.
1061 'name' => $this->getPluginName(),