Lines Matching +full:fetch +full:- +full:depth

19  * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/).
66 $server->on('propFind', [$this, 'propFindEarly']);
67 $server->on('propFind', [$this, 'propFindLate'], 150);
68 $server->on('report', [$this, 'report']);
69 $server->on('onHTMLActionsPanel', [$this, 'htmlActionsPanel']);
70 $server->on('beforeWriteContent', [$this, 'beforeWriteContent']);
71 $server->on('beforeCreateFile', [$this, 'beforeCreateFile']);
72 $server->on('afterMethod:GET', [$this, 'httpAfterGet']);
74 $server->xml->namespaceMap[self::NS_CARDDAV] = 'card';
76 $server->xml->elementMap['{' . self::NS_CARDDAV . '}addressbook-query'] = 'Sabre\\CardDAV\\Xml\\Request\\AddressBookQueryReport';
77 $server->xml->elementMap['{' . self::NS_CARDDAV . '}addressbook-multiget'] = 'Sabre\\CardDAV\\Xml\\Request\\AddressBookMultiGetReport';
80 $server->resourceTypeMapping['Sabre\\CardDAV\\IAddressBook'] = '{' . self::NS_CARDDAV . '}addressbook';
81 $server->resourceTypeMapping['Sabre\\CardDAV\\IDirectory'] = '{' . self::NS_CARDDAV . '}directory';
84 $server->protectedProperties[] = '{' . self::NS_CARDDAV . '}supported-address-data';
85 $server->protectedProperties[] = '{' . self::NS_CARDDAV . '}max-resource-size';
86 $server->protectedProperties[] = '{' . self::NS_CARDDAV . '}addressbook-home-set';
87 $server->protectedProperties[] = '{' . self::NS_CARDDAV . '}supported-collation-set';
89 $server->xml->elementMap['{http://calendarserver.org/ns/}me-card'] = 'Sabre\\DAV\\Xml\\Property\\Href';
91 $this->server = $server;
111 * This will be used in the {DAV:}supported-report-set property.
120 $node = $this->server->tree->getNodeForPath($uri);
123 '{' . self::NS_CARDDAV . '}addressbook-multiget',
124 '{' . self::NS_CARDDAV . '}addressbook-query',
133 * Adds all CardDAV-specific properties
145 $propFind->handle($ns . 'max-resource-size', $this->maxResourceSize);
146 $propFind->handle($ns . 'supported-address-data', function() {
149 $propFind->handle($ns . 'supported-collation-set', function() {
156 $path = $propFind->getPath();
158 $propFind->handle('{' . self::NS_CARDDAV . '}addressbook-home-set', function() use ($path) {
159 return new Href($this->getAddressBookHomeForPrincipal($path) . '/');
162 if ($this->directories) $propFind->handle('{' . self::NS_CARDDAV . '}directory-gateway', function() {
163 return new Href($this->directories);
170 // The address-data property is not supposed to be a 'real'
173 $propFind->handle('{' . self::NS_CARDDAV . '}address-data', function() use ($node) {
174 $val = $node->get();
196 case '{' . self::NS_CARDDAV . '}addressbook-multiget' :
197 $this->server->transactionType = 'report-addressbook-multiget';
198 $this->addressbookMultiGetReport($dom);
200 case '{' . self::NS_CARDDAV . '}addressbook-query' :
201 $this->server->transactionType = 'report-addressbook-query';
202 $this->addressBookQueryReport($dom);
227 * This function handles the addressbook-multiget REPORT.
229 * This report is used by the client to fetch the content of a series
237 $contentType = $report->contentType;
238 $version = $report->version;
243 $vcardType = $this->negotiateVCard(
249 [$this->server, 'calculateUri'],
250 $report->hrefs
252 foreach ($this->server->getPropertiesForMultiplePaths($paths, $report->properties) as $props) {
254 if (isset($props['200']['{' . self::NS_CARDDAV . '}address-data'])) {
256 $props['200']['{' . self::NS_CARDDAV . '}address-data'] = $this->convertVCard(
257 $props[200]['{' . self::NS_CARDDAV . '}address-data'],
266 $prefer = $this->server->getHTTPPrefer();
268 $this->server->httpResponse->setStatus(207);
269 $this->server->httpResponse->setHeader('Content-Type', 'application/xml; charset=utf-8');
270 $this->server->httpResponse->setHeader('Vary', 'Brief,Prefer');
271 $this->server->httpResponse->setBody($this->server->generateMultiStatus($propertyList, $prefer['return'] === 'minimal'));
293 $this->validateVCard($data, $modified);
315 $this->validateVCard($data, $modified);
352 $data = $vobj->serialize();
360 throw new DAV\Exception\UnsupportedMediaType('This resource only supports valid vCard or jCard data. Parse error: ' . $e->getMessage());
364 if ($vobj->name !== 'VCARD') {
368 if (!isset($vobj->UID)) {
370 $vobj->add('UID', DAV\UUIDUtil::getUUID());
371 $data = $vobj->serialize();
379 * This function handles the addressbook-query REPORT
389 $depth = $this->server->getHTTPDepth(0);
391 if ($depth == 0) {
393 $this->server->tree->getNodeForPath($this->server->getRequestUri())
396 throw new ReportNotSupported('The addressbook-query report is not supported on this url with Depth: 0');
399 $candidateNodes = $this->server->tree->getChildren($this->server->getRequestUri());
402 $contentType = $report->contentType;
403 if ($report->version) {
404 $contentType .= '; version=' . $report->version;
407 $vcardType = $this->negotiateVCard(
417 $blob = $node->get();
422 if (!$this->validateFilters($blob, $report->filters, $report->test)) {
428 if ($report->limit && $report->limit <= count($validNodes)) {
438 if ($depth == 0) {
439 $href = $this->server->getRequestUri();
441 $href = $this->server->getRequestUri() . '/' . $validNode->getName();
444 list($props) = $this->server->getPropertiesForPath($href, $report->properties, 0);
446 if (isset($props[200]['{' . self::NS_CARDDAV . '}address-data'])) {
448 $props[200]['{' . self::NS_CARDDAV . '}address-data'] = $this->convertVCard(
449 $props[200]['{' . self::NS_CARDDAV . '}address-data'],
458 $prefer = $this->server->getHTTPPrefer();
460 $this->server->httpResponse->setStatus(207);
461 $this->server->httpResponse->setHeader('Content-Type', 'application/xml; charset=utf-8');
462 $this->server->httpResponse->setHeader('Vary', 'Brief,Prefer');
463 $this->server->httpResponse->setBody($this->server->generateMultiStatus($result, $prefer['return'] === 'minimal'));
483 $isDefined = isset($vcard->{$filter['name']});
484 if ($filter['is-not-defined']) {
490 } elseif ((!$filter['param-filters'] && !$filter['text-matches']) || !$isDefined) {
497 $vProperties = $vcard->select($filter['name']);
500 if ($filter['param-filters']) {
501 $results[] = $this->validateParamFilters($vProperties, $filter['param-filters'], $filter['test']);
503 if ($filter['text-matches']) {
506 $texts[] = $vProperty->getValue();
508 $results[] = $this->validateTextMatches($texts, $filter['text-matches'], $filter['test']);
544 * Validates if a param-filter can be applied to a specific property.
564 if ($filter['is-not-defined']) {
571 // If there's no text-match, we can just check for existence
572 } elseif (!$filter['text-match'] || !$isDefined) {
581 // text-match filter.
582 $success = DAV\StringUtil::textMatch($vProperty[$filter['name']]->getValue(), $filter['text-match']['value'], $filter['text-match']['collation'], $filter['text-match']['match-type']);
585 if ($filter['text-match']['negate-condition']) {
612 * Validates if a text-filter can be applied to a specific property.
625 $success = DAV\StringUtil::textMatch($haystack, $filter['value'], $filter['collation'], $filter['match-type']);
630 if ($filter['negate-condition']) {
665 // the content-type property. By default SabreDAV will send back
666 // text/x-vcard; charset=utf-8, but for SOGO we must strip that last
668 if (strpos($this->server->httpRequest->getHeader('User-Agent'), 'Thunderbird') === false) {
671 $contentType = $propFind->get('{DAV:}getcontenttype');
673 if ($part === 'text/x-vcard' || $part === 'text/vcard') {
674 $propFind->set('{DAV:}getcontenttype', 'text/x-vcard');
718 if (strpos($response->getHeader('Content-Type'), 'text/vcard') === false) {
722 $target = $this->negotiateVCard($request->getHeader('Accept'), $mimeType);
724 $newBody = $this->convertVCard(
725 $response->getBody(),
729 $response->setBody($newBody);
730 $response->setHeader('Content-Type', $mimeType . '; charset=utf-8');
731 $response->setHeader('Content-Length', strlen($newBody));
736 * This helper function performs the content-type negotiation for vcards.
754 // Most often used mime-type. Version 3
755 'text/x-vcard',
756 // The correct standard mime-type. Defaults to version 3 as
772 case 'text/x-vcard' :
801 $data = $data->convert(VObject\Document::VCARD30);
802 return $data->serialize();
804 $data = $data->convert(VObject\Document::VCARD40);
805 return $data->serialize();
807 $data = $data->convert(VObject\Document::VCARD40);
808 return json_encode($data->jsonSerialize());
831 * Returns a bunch of meta-data about the plugin.
844 'name' => $this->getPluginName(),