123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- /**
- * Routes configuration converter
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\App\Route\Config;
- class Converter implements \Magento\Framework\Config\ConverterInterface
- {
- /**
- * Convert config
- *
- * @param \DOMDocument $source
- * @return array
- */
- public function convert($source)
- {
- $output = [];
- /** @var \DOMNodeList $routers */
- $routers = $source->getElementsByTagName('router');
- /** @var \DOMNode $router */
- foreach ($routers as $router) {
- $routerConfig = [];
- foreach ($router->attributes as $attribute) {
- $routerConfig[$attribute->nodeName] = $attribute->nodeValue;
- }
- /** @var \DOMNode $routeData */
- foreach ($router->getElementsByTagName('route') as $routeData) {
- $routeConfig = [];
- foreach ($routeData->attributes as $routeAttribute) {
- $routeConfig[$routeAttribute->nodeName] = $routeAttribute->nodeValue;
- }
- /** @var \DOMNode $module */
- foreach ($routeData->getElementsByTagName('module') as $moduleData) {
- $moduleConfig = [];
- foreach ($moduleData->attributes as $moduleAttribute) {
- $moduleConfig[$moduleAttribute->nodeName] = $moduleAttribute->nodeValue;
- }
- $routeConfig['modules'][] = $moduleConfig;
- }
- $routeConfig['modules'] = $this->_sortModulesList($routeConfig['modules']);
- $routerConfig['routes'][$routeData->attributes->getNamedItem('id')->nodeValue] = $routeConfig;
- }
- $output[$router->attributes->getNamedItem('id')->nodeValue] = $routerConfig;
- }
- return $output;
- }
- /**
- * Sort modules list according to before/after attributes
- *
- * @param array $modulesList
- * @return array
- */
- protected function _sortModulesList($modulesList)
- {
- $sortedModulesList = [];
- foreach ($modulesList as $moduleData) {
- if (isset($moduleData['before'])) {
- $position = array_search($moduleData['before'], $sortedModulesList);
- if ($position === false) {
- $position = 0;
- }
- array_splice($sortedModulesList, $position, 0, $moduleData['name']);
- } elseif (isset($moduleData['after'])) {
- $position = array_search($moduleData['after'], $sortedModulesList);
- if ($position === false) {
- $position = count($modulesList);
- }
- array_splice($sortedModulesList, $position + 1, 0, $moduleData['name']);
- } else {
- $sortedModulesList[] = $moduleData['name'];
- }
- }
- return $sortedModulesList;
- }
- }
|