mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 17:27:36 +00:00
159 lines
4.3 KiB
PHP
159 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Backend\Model\Menu;
|
|
|
|
/**
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
* @api
|
|
* @since 100.0.2
|
|
*/
|
|
class Config
|
|
{
|
|
const CACHE_ID = 'backend_menu_config';
|
|
|
|
const CACHE_MENU_OBJECT = 'backend_menu_object';
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\Cache\Type\Config
|
|
*/
|
|
protected $_configCacheType;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Event\ManagerInterface
|
|
*/
|
|
protected $_eventManager;
|
|
|
|
/**
|
|
* @var \Magento\Backend\Model\MenuFactory
|
|
*/
|
|
protected $_menuFactory;
|
|
|
|
/**
|
|
* Menu model
|
|
*
|
|
* @var \Magento\Backend\Model\Menu
|
|
*/
|
|
protected $_menu;
|
|
|
|
/**
|
|
* @var \Psr\Log\LoggerInterface
|
|
*/
|
|
protected $_logger;
|
|
|
|
/**
|
|
* @var \Magento\Backend\Model\Menu\Config\Reader
|
|
*/
|
|
protected $_configReader;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\Config\ScopeConfigInterface
|
|
*/
|
|
protected $_scopeConfig;
|
|
|
|
/**
|
|
* @var \Magento\Backend\Model\Menu\AbstractDirector
|
|
*/
|
|
protected $_director;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\State
|
|
*/
|
|
protected $_appState;
|
|
|
|
/**
|
|
* @var Builder
|
|
*/
|
|
private $_menuBuilder;
|
|
|
|
/**
|
|
* @param \Magento\Backend\Model\Menu\Builder $menuBuilder
|
|
* @param \Magento\Backend\Model\Menu\AbstractDirector $menuDirector
|
|
* @param \Magento\Backend\Model\MenuFactory $menuFactory
|
|
* @param \Magento\Backend\Model\Menu\Config\Reader $configReader
|
|
* @param \Magento\Framework\App\Cache\Type\Config $configCacheType
|
|
* @param \Magento\Framework\Event\ManagerInterface $eventManager
|
|
* @param \Psr\Log\LoggerInterface $logger
|
|
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
|
|
* @param \Magento\Framework\App\State $appState
|
|
*/
|
|
public function __construct(
|
|
\Magento\Backend\Model\Menu\Builder $menuBuilder,
|
|
\Magento\Backend\Model\Menu\AbstractDirector $menuDirector,
|
|
\Magento\Backend\Model\MenuFactory $menuFactory,
|
|
\Magento\Backend\Model\Menu\Config\Reader $configReader,
|
|
\Magento\Framework\App\Cache\Type\Config $configCacheType,
|
|
\Magento\Framework\Event\ManagerInterface $eventManager,
|
|
\Psr\Log\LoggerInterface $logger,
|
|
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
|
|
\Magento\Framework\App\State $appState
|
|
) {
|
|
$this->_menuBuilder = $menuBuilder;
|
|
$this->_director = $menuDirector;
|
|
$this->_configCacheType = $configCacheType;
|
|
$this->_eventManager = $eventManager;
|
|
$this->_logger = $logger;
|
|
$this->_menuFactory = $menuFactory;
|
|
$this->_configReader = $configReader;
|
|
$this->_scopeConfig = $scopeConfig;
|
|
$this->_appState = $appState;
|
|
}
|
|
|
|
/**
|
|
* Build menu model from config
|
|
*
|
|
* @return \Magento\Backend\Model\Menu
|
|
* @throws \Exception|\InvalidArgumentException
|
|
* @throws \Exception
|
|
* @throws \BadMethodCallException|\Exception
|
|
* @throws \Exception|\OutOfRangeException
|
|
*/
|
|
public function getMenu()
|
|
{
|
|
try {
|
|
$this->_initMenu();
|
|
return $this->_menu;
|
|
} catch (\InvalidArgumentException $e) {
|
|
$this->_logger->critical($e);
|
|
throw $e;
|
|
} catch (\BadMethodCallException $e) {
|
|
$this->_logger->critical($e);
|
|
throw $e;
|
|
} catch (\OutOfRangeException $e) {
|
|
$this->_logger->critical($e);
|
|
throw $e;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialize menu object
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _initMenu()
|
|
{
|
|
if (!$this->_menu) {
|
|
$this->_menu = $this->_menuFactory->create();
|
|
|
|
$cache = $this->_configCacheType->load(self::CACHE_MENU_OBJECT);
|
|
if ($cache) {
|
|
$this->_menu->unserialize($cache);
|
|
return;
|
|
}
|
|
|
|
$this->_director->direct(
|
|
$this->_configReader->read($this->_appState->getAreaCode()),
|
|
$this->_menuBuilder,
|
|
$this->_logger
|
|
);
|
|
$this->_menu = $this->_menuBuilder->getResult($this->_menu);
|
|
|
|
$this->_configCacheType->save($this->_menu->serialize(), self::CACHE_MENU_OBJECT);
|
|
}
|
|
}
|
|
}
|