Loading core/modules/navigation/src/Hook/NavigationHooks.php +11 −12 Original line number Diff line number Diff line Loading @@ -154,27 +154,26 @@ public function pluginFilterLayoutLayoutBuilderAlter(array &$definitions, array */ #[Hook('block_alter')] public function blockAlter(&$definitions) : void { // Hide Navigation specific blocks from the generic UI. $hidden = ['navigation_user', 'navigation_shortcuts', 'navigation_menu', 'navigation_link']; foreach ($hidden as $block_id) { if (isset($definitions[$block_id])) { $definitions[$block_id]['_block_ui_hidden'] = TRUE; } } array_walk($definitions, function (&$definition, $block_id) { [$base_plugin_id] = explode(PluginBase::DERIVATIVE_SEPARATOR, $block_id); // Add the allow_in_navigation attribute to those blocks valid for Navigation. // @todo Refactor to use actual block Attribute once // https://www.drupal.org/project/drupal/issues/3443882 is merged. array_walk($definitions, function (&$definition, $block_id) { $allow_in_navigation = [ 'navigation_user', 'navigation_shortcuts', 'navigation_menu', ]; [$base_plugin_id] = explode(PluginBase::DERIVATIVE_SEPARATOR, $block_id); if (in_array($base_plugin_id, $allow_in_navigation, TRUE)) { $definition['allow_in_navigation'] = TRUE; } // Hide Navigation specific blocks from the generic UI. $hidden = ['navigation_user', 'navigation_shortcuts', 'navigation_menu', 'navigation_link']; if (in_array($base_plugin_id, $hidden, TRUE)) { $definition['_block_ui_hidden'] = TRUE; } }); } Loading core/modules/navigation/tests/src/Functional/NavigationSafeBlockDefinitionTest.php +16 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ class NavigationSafeBlockDefinitionTest extends BrowserTestBase { /** * {@inheritdoc} */ protected static $modules = ['navigation', 'navigation_test']; protected static $modules = ['navigation', 'navigation_test', 'block']; /** * {@inheritdoc} Loading @@ -40,6 +40,7 @@ protected function setUp(): void { $this->adminUser = $this->drupalCreateUser([ 'configure navigation layout', 'access navigation', 'administer blocks', ]); $this->drupalLogin($this->adminUser); Loading Loading @@ -73,4 +74,18 @@ public function testNavigationSafeBlockDefinition(): void { $this->assertSession()->linkNotExists('Navigation Shortcuts'); } /** * Tests logic to exclude blocks in Block Layout UI. */ public function testNavigationBlocksHiddenInBlockLayout(): void { $block_url = '/admin/structure/block'; $this->drupalGet($block_url); $this->clickLink('Place block'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_menu%3Aadmin/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_menu%3Acontent/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_shortcuts/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_user/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_link/stark'); } } Loading
core/modules/navigation/src/Hook/NavigationHooks.php +11 −12 Original line number Diff line number Diff line Loading @@ -154,27 +154,26 @@ public function pluginFilterLayoutLayoutBuilderAlter(array &$definitions, array */ #[Hook('block_alter')] public function blockAlter(&$definitions) : void { // Hide Navigation specific blocks from the generic UI. $hidden = ['navigation_user', 'navigation_shortcuts', 'navigation_menu', 'navigation_link']; foreach ($hidden as $block_id) { if (isset($definitions[$block_id])) { $definitions[$block_id]['_block_ui_hidden'] = TRUE; } } array_walk($definitions, function (&$definition, $block_id) { [$base_plugin_id] = explode(PluginBase::DERIVATIVE_SEPARATOR, $block_id); // Add the allow_in_navigation attribute to those blocks valid for Navigation. // @todo Refactor to use actual block Attribute once // https://www.drupal.org/project/drupal/issues/3443882 is merged. array_walk($definitions, function (&$definition, $block_id) { $allow_in_navigation = [ 'navigation_user', 'navigation_shortcuts', 'navigation_menu', ]; [$base_plugin_id] = explode(PluginBase::DERIVATIVE_SEPARATOR, $block_id); if (in_array($base_plugin_id, $allow_in_navigation, TRUE)) { $definition['allow_in_navigation'] = TRUE; } // Hide Navigation specific blocks from the generic UI. $hidden = ['navigation_user', 'navigation_shortcuts', 'navigation_menu', 'navigation_link']; if (in_array($base_plugin_id, $hidden, TRUE)) { $definition['_block_ui_hidden'] = TRUE; } }); } Loading
core/modules/navigation/tests/src/Functional/NavigationSafeBlockDefinitionTest.php +16 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ class NavigationSafeBlockDefinitionTest extends BrowserTestBase { /** * {@inheritdoc} */ protected static $modules = ['navigation', 'navigation_test']; protected static $modules = ['navigation', 'navigation_test', 'block']; /** * {@inheritdoc} Loading @@ -40,6 +40,7 @@ protected function setUp(): void { $this->adminUser = $this->drupalCreateUser([ 'configure navigation layout', 'access navigation', 'administer blocks', ]); $this->drupalLogin($this->adminUser); Loading Loading @@ -73,4 +74,18 @@ public function testNavigationSafeBlockDefinition(): void { $this->assertSession()->linkNotExists('Navigation Shortcuts'); } /** * Tests logic to exclude blocks in Block Layout UI. */ public function testNavigationBlocksHiddenInBlockLayout(): void { $block_url = '/admin/structure/block'; $this->drupalGet($block_url); $this->clickLink('Place block'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_menu%3Aadmin/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_menu%3Acontent/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_shortcuts/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_user/stark'); $this->assertSession()->linkByHrefNotExists('/admin/structure/block/add/navigation_link/stark'); } }