diff --git a/custom_admin_menu.services.yml b/custom_admin_menu.services.yml index 840a17f25c903cf88aa3ba4a00958c0aaab61696..db0e91e98a4bc774228f00e55f8d5d97a3081d22 100644 --- a/custom_admin_menu.services.yml +++ b/custom_admin_menu.services.yml @@ -1,7 +1,16 @@ services: custom_admin_menu.manager: class: Drupal\custom_admin_menu\Service\CustomAdminMenuManager - arguments: [ '@current_user', '@toolbar.menu_tree', '@theme.manager', '@entity_type.manager', '@config.factory', '@theme.initialization', '@module_handler', '@custom_admin_menu.settings' ] + arguments: + - '@current_user' + - '@toolbar.menu_tree' + - '@theme.manager' + - '@entity_type.manager' + - '@config.factory' + - '@theme.initialization' + - '@module_handler' + - '@custom_admin_menu.settings' + - '@custom_admin_menu.menu_item_display_manager' custom_admin_menu.settings: class: Drupal\custom_admin_menu\Service\CustomAdminMenuSettings @@ -9,8 +18,17 @@ services: custom_admin_menu.shortcuts: class: Drupal\custom_admin_menu\Service\CustomAdminMenuShortcuts - arguments: [ '@theme.manager', '@theme.initialization', '@entity_type.manager', '@config.factory', '@request_stack', '@title_resolver', '@custom_admin_menu.settings' ] + arguments: + - '@theme.manager' + - '@theme.initialization' + - '@entity_type.manager' + - '@config.factory' + - '@request_stack' + - '@title_resolver' + - '@custom_admin_menu.settings' custom_admin_menu.menu_item_display_manager: class: Drupal\custom_admin_menu\Service\CustomAdminMenuMenuItemDisplayManager - arguments: [ '@current_user', '@language_manager' ] + arguments: + - '@current_user' + - '@language_manager' diff --git a/src/Service/CustomAdminMenuManager.php b/src/Service/CustomAdminMenuManager.php index 435ccaae7ab0269b9098612e102aa5cea9af20bc..b04f57a62217e62d05b69a5d42322f333d96e611 100644 --- a/src/Service/CustomAdminMenuManager.php +++ b/src/Service/CustomAdminMenuManager.php @@ -101,6 +101,13 @@ class CustomAdminMenuManager implements TrustedCallbackInterface { */ protected $currentUser; + /** + * Menu item display manager. + * + * @var \Drupal\custom_admin_menu\Service\CustomAdminMenuMenuItemDisplayManager + */ + protected CustomAdminMenuMenuItemDisplayManager $customAdminMenuMenuItemDisplayManager; + /** * CustomAdminMenuManager constructor. * @@ -129,7 +136,8 @@ class CustomAdminMenuManager implements TrustedCallbackInterface { ConfigFactoryInterface $configFactory, ThemeInitializationInterface $themeInitialization, ModuleHandlerInterface $moduleHandler, - CustomAdminMenuSettings $settings) { + CustomAdminMenuSettings $settings, + CustomAdminMenuMenuItemDisplayManager $customAdminMenuMenuItemDisplayManager) { $this->currentUser = $currentUser; $this->menuLinkTree = $menuLinkTree; $this->adminTheme = $themeManager->getActiveTheme(); @@ -139,6 +147,7 @@ class CustomAdminMenuManager implements TrustedCallbackInterface { $this->themeInitialization = $themeInitialization; $this->moduleHandler = $moduleHandler; $this->settings = $settings; + $this->customAdminMenuMenuItemDisplayManager = $customAdminMenuMenuItemDisplayManager; } /** @@ -182,6 +191,9 @@ class CustomAdminMenuManager implements TrustedCallbackInterface { // Build the menu. $buildArray = $this->getMenuBuildArray($menu->id()); + // Filter allowed items. + $this->customAdminMenuMenuItemDisplayManager->filterItems($buildArray['#items']); + // Add toolbar-icon class. $this->initClasses($buildArray['#items']); diff --git a/src/Service/CustomAdminMenuMenuItemDisplayManager.php b/src/Service/CustomAdminMenuMenuItemDisplayManager.php index 6e84b488002fe1ac6d8304ed4cfec520ef9f84a3..e209482177c7bc883ee1c4084b6e7ae752d1b1c9 100644 --- a/src/Service/CustomAdminMenuMenuItemDisplayManager.php +++ b/src/Service/CustomAdminMenuMenuItemDisplayManager.php @@ -112,6 +112,7 @@ class CustomAdminMenuMenuItemDisplayManager * The item plugin definition. * @param AccountProxyInterface $user * The user; + * * @return bool */ protected function isDisallowedRoles(array $metadata, AccountProxyInterface $user) @@ -138,4 +139,10 @@ class CustomAdminMenuMenuItemDisplayManager return $isDisallowed; } + public function filterItems(&$items) { + $items = array_filter($items, function ($item){ + return !$this->itemIsDisallowed($item); + }); + } + }