Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Converter.php
Go to the documentation of this file.
1 <?php
7 
12 {
19  public function convert($source)
20  {
22  $requestNodes = $source->getElementsByTagName('request');
23  $requests = [];
24  foreach ($requestNodes as $requestNode) {
25  $simpleXmlNode = simplexml_import_dom($requestNode);
27  $name = $requestNode->getAttribute('query');
28  $request = $this->mergeAttributes((array)$simpleXmlNode);
29  $request['dimensions'] = $this->convertNodes($simpleXmlNode->dimensions, 'name');
30  $request['queries'] = $this->convertNodes($simpleXmlNode->queries, 'name');
31  $request['filters'] = $this->convertNodes($simpleXmlNode->filters, 'name');
32  $request['aggregations'] = $this->convertNodes($simpleXmlNode->aggregations, 'name');
33  $requests[$name] = $request;
34  }
35  return $requests;
36  }
37 
44  protected function mergeAttributes($data)
45  {
46  if (isset($data['@attributes'])) {
47  $data = array_merge($data, $data['@attributes']);
48  unset($data['@attributes']);
49  }
50  return $data;
51  }
52 
60  protected function convertNodes(\SimpleXMLElement $nodes, $name)
61  {
62  $list = [];
63  if (!empty($nodes)) {
65  foreach ($nodes->children() as $node) {
66  $element = $this->convertToArray($node->attributes());
67  if ($node->count() > 0) {
68  $element = $this->convertChildNodes($element, $node);
69  }
70  $type = (string)$node->attributes('xsi', true)['type'];
71  if (!empty($type)) {
72  $element['type'] = $type;
73  }
74 
75  $list[$element[$name]] = $element;
76  }
77  }
78  return $list;
79  }
80 
87  protected function convertToArray(\SimpleXMLElement $node)
88  {
89  return $this->mergeAttributes(json_decode(json_encode($node), true));
90  }
91 
99  protected function convertChildNodes(array $element, \SimpleXMLElement $node)
100  {
101  if ($node->count() == 0) {
102  $element[$node->getName()][] = $this->convertToArray($node);
103  } else {
104  foreach ($node->children() as $child) {
105  $element = $this->convertChildNodes($element, $child);
106  }
107  }
108  return $element;
109  }
110 }
$source
Definition: source.php:23
$type
Definition: item.phtml:13
convertChildNodes(array $element, \SimpleXMLElement $node)
Definition: Converter.php:99
$element
Definition: element.phtml:12