ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
AddressBookQueryReport.php
Go to the documentation of this file.
1<?php
2
4
9
23
30
37
64 public $filters;
65
73 public $limit;
74
80 public $test;
81
88 public $contentType = null;
89
96 public $version = null;
97
98
120 static function xmlDeserialize(Reader $reader) {
121
122 $elems = (array)$reader->parseInnerTree([
123 '{urn:ietf:params:xml:ns:carddav}prop-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\PropFilter',
124 '{urn:ietf:params:xml:ns:carddav}param-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\ParamFilter',
125 '{urn:ietf:params:xml:ns:carddav}address-data' => 'Sabre\\CardDAV\\Xml\\Filter\\AddressData',
126 '{DAV:}prop' => 'Sabre\\Xml\\Element\\KeyValue',
127 ]);
128
129 $newProps = [
130 'filters' => null,
131 'properties' => [],
132 'test' => 'anyof',
133 'limit' => null,
134 ];
135
136 if (!is_array($elems)) $elems = [];
137
138 foreach ($elems as $elem) {
139
140 switch ($elem['name']) {
141
142 case '{DAV:}prop' :
143 $newProps['properties'] = array_keys($elem['value']);
144 if (isset($elem['value']['{' . Plugin::NS_CARDDAV . '}address-data'])) {
145 $newProps += $elem['value']['{' . Plugin::NS_CARDDAV . '}address-data'];
146 }
147 break;
148 case '{' . Plugin::NS_CARDDAV . '}filter' :
149
150 if (!is_null($newProps['filters'])) {
151 throw new BadRequest('You can only include 1 {' . Plugin::NS_CARDDAV . '}filter element');
152 }
153 if (isset($elem['attributes']['test'])) {
154 $newProps['test'] = $elem['attributes']['test'];
155 if ($newProps['test'] !== 'allof' && $newProps['test'] !== 'anyof') {
156 throw new BadRequest('The "test" attribute must be one of "allof" or "anyof"');
157 }
158 }
159
160 $newProps['filters'] = [];
161 foreach ((array)$elem['value'] as $subElem) {
162 if ($subElem['name'] === '{' . Plugin::NS_CARDDAV . '}prop-filter') {
163 $newProps['filters'][] = $subElem['value'];
164 }
165 }
166 break;
167 case '{' . Plugin::NS_CARDDAV . '}limit' :
168 foreach ($elem['value'] as $child) {
169 if ($child['name'] === '{' . Plugin::NS_CARDDAV . '}nresults') {
170 $newProps['limit'] = (int)$child['value'];
171 }
172 }
173 break;
174
175 }
176
177 }
178
179 if (is_null($newProps['filters'])) {
180 /*
181 * We are supposed to throw this error, but KDE sometimes does not
182 * include the filter element, and we need to treat it as if no
183 * filters are supplied
184 */
185 //throw new BadRequest('The {' . Plugin::NS_CARDDAV . '}filter element is required for this request');
186 $newProps['filters'] = [];
187
188 }
189
190 $obj = new self();
191 foreach ($newProps as $key => $value) {
192 $obj->$key = $value;
193 }
194
195 return $obj;
196
197 }
198
199}
An exception for terminatinating execution or to throw for unit testing.
CardDAV plugin.
Definition: Plugin.php:23
const NS_CARDDAV
xml namespace for CardDAV elements
Definition: Plugin.php:33
static xmlDeserialize(Reader $reader)
The deserialize method is called during xml parsing.
The Reader class expands upon PHP's built-in XMLReader.
Definition: Reader.php:20
$key
Definition: croninfo.php:18
Implementing the XmlDeserializable interface allows you to use a class as a deserializer for a specif...