|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / a / home / dev2.destoffenstraat.com / vendor / magento / framework / Search / Request / Config / |
Filename | /home/a/home/dev2.destoffenstraat.com/vendor/magento/framework/Search/Request/Config/Converter.php |
Size | 3.23 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 21-Aug-2025 12:26 |
Last modified | 07-Jan-2021 21:08 |
Last accessed | 24-Aug-2025 09:19 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Search\Request\Config;
/**
* Search Request xml converter
*/
class Converter implements \Magento\Framework\Config\ConverterInterface
{
/**
* Convert config
*
* @param \DOMDocument $source
* @return array
*/
public function convert($source)
{
/** @var \DOMNodeList $requestNodes */
$requestNodes = $source->getElementsByTagName('request');
$requests = [];
foreach ($requestNodes as $requestNode) {
$simpleXmlNode = simplexml_import_dom($requestNode);
/** @var \DOMElement $requestNode */
$name = $requestNode->getAttribute('query');
$request = $this->mergeAttributes((array)$simpleXmlNode);
$request['dimensions'] = $this->convertNodes($simpleXmlNode->dimensions, 'name');
$request['queries'] = $this->convertNodes($simpleXmlNode->queries, 'name');
$request['filters'] = $this->convertNodes($simpleXmlNode->filters, 'name');
$request['aggregations'] = $this->convertNodes($simpleXmlNode->aggregations, 'name');
$requests[$name] = $request;
}
return $requests;
}
/**
* Merge attributes in node data
*
* @param array $data
* @return array
*/
protected function mergeAttributes($data)
{
if (isset($data['@attributes'])) {
$data = array_merge($data, $data['@attributes']);
unset($data['@attributes']);
}
return $data;
}
/**
* Convert nodes to array
*
* @param \SimpleXMLElement $nodes
* @param string $name
* @return array
*/
protected function convertNodes(\SimpleXMLElement $nodes, $name)
{
$list = [];
if (!empty($nodes)) {
/** @var \SimpleXMLElement $node */
foreach ($nodes->children() as $node) {
$element = $this->convertToArray($node->attributes());
if ($node->count() > 0) {
$element = $this->convertChildNodes($element, $node);
}
$type = (string)$node->attributes('xsi', true)['type'];
if (!empty($type)) {
$element['type'] = $type;
}
$list[$element[$name]] = $element;
}
}
return $list;
}
/**
* Deep converting simlexml element to array
*
* @param \SimpleXMLElement $node
* @return array
*/
protected function convertToArray(\SimpleXMLElement $node)
{
return $this->mergeAttributes(json_decode(json_encode($node), true));
}
/**
* Convert child nodes to array
*
* @param array $element
* @param \SimpleXMLElement $node
* @return array
*/
protected function convertChildNodes(array $element, \SimpleXMLElement $node)
{
if ($node->count() == 0) {
$element[$node->getName()][] = $this->convertToArray($node);
} else {
foreach ($node->children() as $child) {
$element = $this->convertChildNodes($element, $child);
}
}
return $element;
}
}
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Search\Request\Config;
/**
* Search Request xml converter
*/
class Converter implements \Magento\Framework\Config\ConverterInterface
{
/**
* Convert config
*
* @param \DOMDocument $source
* @return array
*/
public function convert($source)
{
/** @var \DOMNodeList $requestNodes */
$requestNodes = $source->getElementsByTagName('request');
$requests = [];
foreach ($requestNodes as $requestNode) {
$simpleXmlNode = simplexml_import_dom($requestNode);
/** @var \DOMElement $requestNode */
$name = $requestNode->getAttribute('query');
$request = $this->mergeAttributes((array)$simpleXmlNode);
$request['dimensions'] = $this->convertNodes($simpleXmlNode->dimensions, 'name');
$request['queries'] = $this->convertNodes($simpleXmlNode->queries, 'name');
$request['filters'] = $this->convertNodes($simpleXmlNode->filters, 'name');
$request['aggregations'] = $this->convertNodes($simpleXmlNode->aggregations, 'name');
$requests[$name] = $request;
}
return $requests;
}
/**
* Merge attributes in node data
*
* @param array $data
* @return array
*/
protected function mergeAttributes($data)
{
if (isset($data['@attributes'])) {
$data = array_merge($data, $data['@attributes']);
unset($data['@attributes']);
}
return $data;
}
/**
* Convert nodes to array
*
* @param \SimpleXMLElement $nodes
* @param string $name
* @return array
*/
protected function convertNodes(\SimpleXMLElement $nodes, $name)
{
$list = [];
if (!empty($nodes)) {
/** @var \SimpleXMLElement $node */
foreach ($nodes->children() as $node) {
$element = $this->convertToArray($node->attributes());
if ($node->count() > 0) {
$element = $this->convertChildNodes($element, $node);
}
$type = (string)$node->attributes('xsi', true)['type'];
if (!empty($type)) {
$element['type'] = $type;
}
$list[$element[$name]] = $element;
}
}
return $list;
}
/**
* Deep converting simlexml element to array
*
* @param \SimpleXMLElement $node
* @return array
*/
protected function convertToArray(\SimpleXMLElement $node)
{
return $this->mergeAttributes(json_decode(json_encode($node), true));
}
/**
* Convert child nodes to array
*
* @param array $element
* @param \SimpleXMLElement $node
* @return array
*/
protected function convertChildNodes(array $element, \SimpleXMLElement $node)
{
if ($node->count() == 0) {
$element[$node->getName()][] = $this->convertToArray($node);
} else {
foreach ($node->children() as $child) {
$element = $this->convertChildNodes($element, $child);
}
}
return $element;
}
}