File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-backend/Model/Menu/Item.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Backend\Model\Menu;
use Magento\Backend\Model\Menu;
use Magento\Store\Model\ScopeInterface;
/**
* Menu item. Should be used to create nested menu structures with \Magento\Backend\Model\Menu
*
* @api
* @SuppressWarnings(PHPMD.TooManyFields)
* @since 100.0.2
*/
class Item
{
/**
* Menu item id
*
* @var string
*/
protected $_id;
/**
* Menu item title
*
* @var string
*/
protected $_title;
/**
* Module of menu item
*
* @var string
*/
protected $_moduleName;
/**
* Menu item sort index in list
*
* @var string
*/
protected $_sortIndex = null;
/**
* Menu item action
*
* @var string
*/
protected $_action = null;
/**
* Parent menu item id
*
* @var string
*/
protected $_parentId = null;
/**
* Acl resource of menu item
*
* @var string
*/
protected $_resource;
/**
* Item tooltip text
*
* @var string
*/
protected $_tooltip;
/**
* Path from root element in tree
*
* @var string
*/
protected $_path = '';
/**
* Acl
*
* @var \Magento\Framework\AuthorizationInterface
*/
protected $_acl;
/**
* Module that item is dependent on
*
* @var string|null
*/
protected $_dependsOnModule;
/**
* Global config option that item is dependent on
*
* @var string|null
*/
protected $_dependsOnConfig;
/**
* Submenu item list
*
* @var Menu
*/
protected $_submenu;
/**
* @var \Magento\Backend\Model\MenuFactory
*/
protected $_menuFactory;
/**
* @var \Magento\Backend\Model\UrlInterface
*/
protected $_urlModel;
/**
* @var \Magento\Framework\App\Config\ScopeConfigInterface
*/
protected $_scopeConfig;
/**
* @var \Magento\Backend\Model\Menu\Item\Validator
*/
protected $_validator;
/**
* Serialized submenu string
*
* @var string
* @deprecated 100.2.0
*/
protected $_serializedSubmenu;
/**
* Module list
*
* @var \Magento\Framework\Module\ModuleListInterface
*/
protected $_moduleList;
/**
* @var \Magento\Framework\Module\Manager
*/
private $_moduleManager;
/**
* Menu item target
*
* @var string|null
*/
private $target;
/**
* @param Item\Validator $validator
* @param \Magento\Framework\AuthorizationInterface $authorization
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param \Magento\Backend\Model\MenuFactory $menuFactory
* @param \Magento\Backend\Model\UrlInterface $urlModel
* @param \Magento\Framework\Module\ModuleListInterface $moduleList
* @param \Magento\Framework\Module\Manager $moduleManager
* @param array $data
*/
public function __construct(
\Magento\Backend\Model\Menu\Item\Validator $validator,
\Magento\Framework\AuthorizationInterface $authorization,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Backend\Model\MenuFactory $menuFactory,
\Magento\Backend\Model\UrlInterface $urlModel,
\Magento\Framework\Module\ModuleListInterface $moduleList,
\Magento\Framework\Module\Manager $moduleManager,
array $data = []
) {
$this->_validator = $validator;
$this->_validator->validate($data);
$this->_moduleManager = $moduleManager;
$this->_acl = $authorization;
$this->_scopeConfig = $scopeConfig;
$this->_menuFactory = $menuFactory;
$this->_urlModel = $urlModel;
$this->_moduleList = $moduleList;
$this->populateFromArray($data);
}
/**
* Retrieve argument element, or default value
*
* @param array $array
* @param string $key
* @param mixed $defaultValue
* @return mixed
*/
protected function _getArgument(array $array, $key, $defaultValue = null)
{
return isset($array[$key]) ? $array[$key] : $defaultValue;
}
/**
* Retrieve item id
*
* @return string
*/
public function getId()
{
return $this->_id;
}
/**
* Retrieve item target
*
* @return string|null
* @since 100.2.0
*/
public function getTarget()
{
return $this->target;
}
/**
* Check whether item has subnodes
*
* @return bool
*/
public function hasChildren()
{
return (null !== $this->_submenu) && (bool)$this->_submenu->count();
}
/**
* Retrieve submenu
*
* @return Menu
*/
public function getChildren()
{
if (!$this->_submenu) {
$this->_submenu = $this->_menuFactory->create();
}
return $this->_submenu;
}
/**
* Retrieve menu item url
*
* @return string
*/
public function getUrl()
{
if ((bool)$this->_action) {
return $this->_urlModel->getUrl((string)$this->_action, ['_cache_secret_key' => true]);
}
return '#';
}
/**
* Retrieve menu item action
*
* @return string
*/
public function getAction()
{
return $this->_action;
}
/**
* Set Item action
*
* @param string $action
* @return $this
* @throws \InvalidArgumentException
*/
public function setAction($action)
{
$this->_validator->validateParam('action', $action);
$this->_action = $action;
return $this;
}
/**
* Check whether item has javascript callback on click
*
* @return bool
*/
public function hasClickCallback()
{
return $this->getUrl() == '#';
}
/**
* Retrieve item click callback
*
* @return string
*/
public function getClickCallback()
{
if ($this->getUrl() == '#') {
return 'return false;';
}
return '';
}
/**
* Retrieve tooltip text title
*
* @return string
*/
public function getTitle()
{
return $this->_title;
}
/**
* Set Item title
*
* @param string $title
* @return $this
* @throws \InvalidArgumentException
*/
public function setTitle($title)
{
$this->_validator->validateParam('title', $title);
$this->_title = $title;
return $this;
}
/**
* Check whether item has tooltip text
*
* @return bool
*/
public function hasTooltip()
{
return (bool)$this->_tooltip;
}
/**
* Retrieve item tooltip text
*
* @return string
*/
public function getTooltip()
{
return $this->_tooltip;
}
/**
* Set Item tooltip
*
* @param string $tooltip
* @return $this
* @throws \InvalidArgumentException
*/
public function setTooltip($tooltip)
{
$this->_validator->validateParam('toolTip', $tooltip);
$this->_tooltip = $tooltip;
return $this;
}
/**
* Set Item module
*
* @param string $module
* @return $this
* @throws \InvalidArgumentException
*/
public function setModule($module)
{
$this->_validator->validateParam('module', $module);
$this->_moduleName = $module;
return $this;
}
/**
* Set Item module dependency
*
* @param string $moduleName
* @return $this
* @throws \InvalidArgumentException
*/
public function setModuleDependency($moduleName)
{
$this->_validator->validateParam('dependsOnModule', $moduleName);
$this->_dependsOnModule = $moduleName;
return $this;
}
/**
* Set Item config dependency
*
* @param string $configPath
* @return $this
* @throws \InvalidArgumentException
*/
public function setConfigDependency($configPath)
{
$this->_validator->validateParam('dependsOnConfig', $configPath);
$this->_dependsOnConfig = $configPath;
return $this;
}
/**
* Check whether item is disabled. Disabled items are not shown to user
*
* @return bool
*/
public function isDisabled()
{
return !$this->_moduleManager->isOutputEnabled(
$this->_moduleName
) || !$this->_isModuleDependenciesAvailable() || !$this->_isConfigDependenciesAvailable();
}
/**
* Check whether module that item depends on is active
*
* @return bool
*/
protected function _isModuleDependenciesAvailable()
{
if ($this->_dependsOnModule) {
$module = $this->_dependsOnModule;
return $this->_moduleList->has($module);
}
return true;
}
/**
* Check whether config dependency is available
*
* @return bool
*/
protected function _isConfigDependenciesAvailable()
{
if ($this->_dependsOnConfig) {
return $this->_scopeConfig->isSetFlag((string)$this->_dependsOnConfig, ScopeInterface::SCOPE_STORE);
}
return true;
}
/**
* Check whether item is allowed to the user
*
* @return bool
*/
public function isAllowed()
{
try {
return $this->_acl->isAllowed((string)$this->_resource);
} catch (\Exception $e) {
return false;
}
}
/**
* Get menu item data represented as an array
*
* @return array
* @since 100.2.0
*/
public function toArray()
{
return [
'parent_id' => $this->_parentId,
'module' => $this->_moduleName,
'sort_index' => $this->_sortIndex,
'dependsOnConfig' => $this->_dependsOnConfig,
'id' => $this->_id,
'resource' => $this->_resource,
'path' => $this->_path,
'action' => $this->_action,
'dependsOnModule' => $this->_dependsOnModule,
'toolTip' => $this->_tooltip,
'title' => $this->_title,
'target' => $this->target,
'sub_menu' => isset($this->_submenu) ? $this->_submenu->toArray() : null
];
}
/**
* Populate the menu item with data from array
*
* @param array $data
* @return void
* @since 100.2.0
*/
public function populateFromArray(array $data)
{
$this->_parentId = $this->_getArgument($data, 'parent_id');
$this->_moduleName = $this->_getArgument($data, 'module', 'Magento_Backend');
$this->_sortIndex = $this->_getArgument($data, 'sort_index');
$this->_dependsOnConfig = $this->_getArgument($data, 'dependsOnConfig');
$this->_id = $this->_getArgument($data, 'id');
$this->_resource = $this->_getArgument($data, 'resource');
$this->_path = $this->_getArgument($data, 'path', '');
$this->_action = $this->_getArgument($data, 'action');
$this->_dependsOnModule = $this->_getArgument($data, 'dependsOnModule');
$this->_tooltip = $this->_getArgument($data, 'toolTip');
$this->_title = $this->_getArgument($data, 'title');
$this->target = $this->_getArgument($data, 'target');
$this->_submenu = null;
if (isset($data['sub_menu'])) {
$menu = $this->_menuFactory->create();
$menu->populateFromArray($data['sub_menu']);
$this->_submenu = $menu;
}
}
}