![]() 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-variable/Model/Config/Structure/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Variable\Model\Config\Structure; use Magento\Framework\App\ObjectManager; use Magento\Framework\Config\ValidationStateInterface; /** * Filter dom structure to required components only */ class Dom extends \Magento\Framework\Config\Dom { /** * @var AvailableVariables */ private $structureConfig; /** * @var array */ private $filters; /** * @param string $xml * @param ValidationStateInterface $validationState * @param array $idAttributes * @param string $typeAttributeName * @param string $schemaFile * @param string $errorFormat * @param AvailableVariables|null $availableVariables */ public function __construct( $xml, ValidationStateInterface $validationState, array $idAttributes = [], $typeAttributeName = null, $schemaFile = null, $errorFormat = self::ERROR_FORMAT_DEFAULT, AvailableVariables $availableVariables = null ) { $this->structureConfig = $availableVariables ?: ObjectManager::getInstance()->get(AvailableVariables::class); parent::__construct($xml, $validationState, $idAttributes, $typeAttributeName, $schemaFile, $errorFormat); } /** * @inheritdoc */ protected function _initDom($xml) { $dom = parent::_initDom($xml); foreach (['tab', 'section', 'group', 'field'] as $element) { $this->filterElements($dom, $element, $this->getElementFilters($element)); } return $dom; } /** * @inheritdoc */ public function merge($xml) { $dom = $this->_initDom($xml); if ($dom->documentElement->getElementsByTagName('section')->length >0) { $this->_mergeNode($dom->documentElement, ''); } } /** * Filter DOMDocument elements and keep only allowed * * @param \DOMDocument $dom * @param string $tag * @param array $ids */ private function filterElements($dom, $tag, $ids) { $removeElements = []; foreach ($dom->documentElement->getElementsByTagName($tag) as $removeElement) { if (!in_array($removeElement->getAttribute('id'), $ids)) { $removeElements[] = $removeElement; } } foreach ($removeElements as $removeElement) { $removeElement->parentNode->removeChild($removeElement); } } /** * Get allowed identifiers by element tag * * @param string $tag * @return array|mixed */ private function getElementFilters($tag) { if (!isset($this->filters[$tag])) { $configPaths = $this->structureConfig->getFlatConfigPaths(); $filterData = []; foreach (array_keys($configPaths) as $path) { list($section, $group, $field) = explode('/', $path); $filterData['section'][] = $section; $filterData['group'][] = $group; $filterData['field'][] = $field; } $filterData['tab'] = []; $this->filters = array_map('array_unique', $filterData); } return $this->filters[$tag] ?? []; } }