![]() 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-backend/Model/Menu/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Backend\Model\Menu; /** * Menu builder object. Retrieves commands (\Magento\Backend\Model\Menu\Builder\AbstractCommand) * to build menu (\Magento\Backend\Model\Menu) * @api * @since 100.0.2 */ class Builder { /** * @var \Magento\Backend\Model\Menu\Builder\AbstractCommand[] */ protected $_commands = []; /** * @var \Magento\Backend\Model\Menu\Item\Factory */ protected $_itemFactory; /** * @param \Magento\Backend\Model\Menu\Item\Factory $menuItemFactory */ public function __construct(\Magento\Backend\Model\Menu\Item\Factory $menuItemFactory) { $this->_itemFactory = $menuItemFactory; } /** * Process provided command object * * @param \Magento\Backend\Model\Menu\Builder\AbstractCommand $command * @return $this */ public function processCommand(\Magento\Backend\Model\Menu\Builder\AbstractCommand $command) { if (!isset($this->_commands[$command->getId()])) { $this->_commands[$command->getId()] = $command; } else { $this->_commands[$command->getId()]->chain($command); } return $this; } /** * Populate menu object * * @param \Magento\Backend\Model\Menu $menu * @return \Magento\Backend\Model\Menu * @throws \OutOfRangeException in case given parent id does not exists */ public function getResult(\Magento\Backend\Model\Menu $menu) { /** @var $items \Magento\Backend\Model\Menu\Item[] */ $params = []; $items = []; // Create menu items foreach ($this->_commands as $id => $command) { $params[$id] = $command->execute(); $item = $this->_itemFactory->create($params[$id]); $items[$id] = $item; } // Build menu tree based on "parent" param foreach ($items as $id => $item) { $sortOrder = $this->_getParam($params[$id], 'sortOrder'); $parentId = $this->_getParam($params[$id], 'parent'); $isRemoved = isset($params[$id]['removed']); if ($isRemoved) { continue; } if (!$parentId) { $menu->add($item, null, $sortOrder); } else { if (!isset($items[$parentId])) { throw new \OutOfRangeException(sprintf('Specified invalid parent id (%s)', $parentId)); } if (isset($params[$parentId]['removed'])) { continue; } $items[$parentId]->getChildren()->add($item, null, $sortOrder); } } return $menu; } /** * Retrieve param by name or default value * * @param array $params * @param string $paramName * @param mixed $defaultValue * @return mixed */ protected function _getParam($params, $paramName, $defaultValue = null) { return $params[$paramName] ?? $defaultValue; } }