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']);
145 $newProps += $elem[
'value'][
'{' . Plugin::NS_CARDDAV .
'}address-data'];
148 case '{' . Plugin::NS_CARDDAV .
'}filter' :
150 if (!is_null($newProps[
'filters'])) {
151 throw new BadRequest(
'You can only include 1 {' . Plugin::NS_CARDDAV .
'}filter element');
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) {
162 if ($subElem[
'name'] ===
'{' . Plugin::NS_CARDDAV .
'}prop-filter') {
163 $newProps[
'filters'][] = $subElem[
'value'];
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'];
179 if (is_null($newProps[
'filters'])) {
186 $newProps[
'filters'] = [];
191 foreach ($newProps as
$key => $value) {
parseInnerTree(array $elementMap=null)
Parses all elements below the current element.
const NS_CARDDAV
xml namespace for CardDAV elements
AddressBookQueryReport request parser.
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...
static xmlDeserialize(Reader $reader)
The deserialize method is called during xml parsing.