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',
136 if (!is_array($elems)) $elems = [];
138 foreach ($elems as $elem) {
140 switch ($elem[
'name']) {
143 $newProps[
'properties'] = array_keys($elem[
'value']);
150 if (!is_null($newProps[
'filters'])) {
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"');
160 $newProps[
'filters'] = [];
161 foreach ((array)$elem[
'value'] as $subElem) {
163 $newProps[
'filters'][] = $subElem[
'value'];
168 foreach ($elem[
'value'] as $child) {
170 $newProps[
'limit'] = (int)$child[
'value'];
179 if (is_null($newProps[
'filters'])) {
186 $newProps[
'filters'] = [];
191 foreach ($newProps as
$key => $value) {
An exception for terminatinating execution or to throw for unit testing.
const NS_CARDDAV
xml namespace for CardDAV elements
AddressBookQueryReport request parser.
static xmlDeserialize(Reader $reader)
The deserialize method is called during xml parsing.
The Reader class expands upon PHP's built-in XMLReader.
Implementing the XmlDeserializable interface allows you to use a class as a deserializer for a specif...