![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-ui/Config/Reader/DefinitionMap/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Ui\Config\Reader\DefinitionMap; use Magento\Framework\Config\ConverterInterface; use Magento\Framework\View\Layout\Argument\Parser; /** * Converter for definition.map.xml */ class Converter implements ConverterInterface { /** * The key of the argument node */ const ARGUMENT_KEY = 'argument'; /** * The key of the include component */ const INCLUDE_KEY = 'include'; /** * The array key sub components */ const CURRENT_SCHEMA_KEY = 'current'; /** * Key name attribute value */ const NAME_ATTRIBUTE_KEY = 'name'; /** * @var Parser */ private $argumentParser; /** * Converter constructor. * * @param Parser $argumentParser */ public function __construct(Parser $argumentParser) { $this->argumentParser = $argumentParser; } /** * Transform Xml to array * * @param \DOMNode $node * @return array|string */ private function toArray(\DOMNode $node) { $result = []; $attributes = []; // Collect data from attributes if ($node->hasAttributes()) { foreach ($node->attributes as $attribute) { $attributes[$attribute->name] = $attribute->value; } } if (isset($attributes[static::INCLUDE_KEY])) { $result[static::INCLUDE_KEY] = $attributes[static::INCLUDE_KEY]; unset($attributes[static::INCLUDE_KEY]); } switch ($node->nodeType) { case XML_TEXT_NODE: case XML_COMMENT_NODE: case XML_CDATA_SECTION_NODE: break; default: if ($node->localName === static::ARGUMENT_KEY) { if (!isset($attributes[static::NAME_ATTRIBUTE_KEY])) { throw new \InvalidArgumentException( 'Attribute "' . static::NAME_ATTRIBUTE_KEY . '" is absent in the attributes node.' ); } $result[ $attributes[static::NAME_ATTRIBUTE_KEY] ] = $this->argumentParser->parse($node); } else { list($arguments, $childResult) = $this->convertChildNodes($node); $result += $this->processArguments($arguments); $result += $childResult; } break; } return $result; } /** * Retrieve component name * * @param \DOMNode $node * @return string */ private function getComponentName(\DOMNode $node) { $result = $node->localName; if (!$node->hasAttributes()) { return $result; } foreach ($node->attributes as $attribute) { if ($attribute->name == static::NAME_ATTRIBUTE_KEY) { $result = $attribute->value; break; } } return $result; } /** * Convert configuration * * @param \DOMDocument|null $source * @return array */ public function convert($source) { if ($source === null) { return []; } $result = $this->toArray($source); $result = empty($result) ? $result : reset($result); $schemaMap = []; foreach ($result as $componentName => $componentData) { $schemaMap[$componentName] = $this->processMap($componentData, $result); } return $schemaMap; } /** * Process include directives and return current schema * * @param array $componentData * @param array $sourceMap * @return array */ private function processMap($componentData, $sourceMap) { $result = []; if (isset($componentData[static::INCLUDE_KEY])) { if (isset($sourceMap[$componentData[static::INCLUDE_KEY]])) { $result = array_replace_recursive( $this->processMap($sourceMap[$componentData[static::INCLUDE_KEY]], $sourceMap), $result ); } } if (isset($componentData[static::CURRENT_SCHEMA_KEY])) { $result = array_replace_recursive($componentData[static::CURRENT_SCHEMA_KEY], $result); } return $result; } /** * Convert child nodes of $node * * @param \DOMNode $node * @return array */ private function convertChildNodes(\DOMNode $node) { $arguments = []; $childResult = []; foreach ($node->childNodes as $itemNode) { if (empty($itemNode->localName)) { continue; } if ($itemNode->localName === static::ARGUMENT_KEY) { $arguments += $this->toArray($itemNode); } else { $childResult[$this->getComponentName($itemNode)] = $this->toArray($itemNode); } } return [$arguments, $childResult]; } /** * Process component arguments * * @param array $arguments * @return array */ private function processArguments(array $arguments) { $result = []; if (!empty($arguments)) { $result[static::ARGUMENT_KEY] = $arguments; } return $result; } }