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 
29  public $properties;
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 }
parseInnerTree(array $elementMap=null)
Parses all elements below the current element.
Definition: Reader.php:129
const NS_CARDDAV
xml namespace for CardDAV elements
Definition: Plugin.php:33
The Reader class expands upon PHP&#39;s built-in XMLReader.
Definition: Reader.php:20
Implementing the XmlDeserializable interface allows you to use a class as a deserializer for a specif...
static xmlDeserialize(Reader $reader)
The deserialize method is called during xml parsing.
$key
Definition: croninfo.php:18