Skip to content
Snippets Groups Projects
Commit f341fd00 authored by catch's avatar catch
Browse files

Issue #3488768 by plopesc, m4olivei, atul_ghate: Menu blocks specific to...

Issue #3488768 by plopesc, m4olivei, atul_ghate: Menu blocks specific to Navigation are leaking into the Block layout UI
parent 1af51d41
No related branches found
No related tags found
No related merge requests found
...@@ -154,27 +154,26 @@ public function pluginFilterLayoutLayoutBuilderAlter(array &$definitions, array ...@@ -154,27 +154,26 @@ public function pluginFilterLayoutLayoutBuilderAlter(array &$definitions, array
*/ */
#[Hook('block_alter')] #[Hook('block_alter')]
public function blockAlter(&$definitions) : void { 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;
}
}
// 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) { 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.
$allow_in_navigation = [ $allow_in_navigation = [
'navigation_user', 'navigation_user',
'navigation_shortcuts', 'navigation_shortcuts',
'navigation_menu', 'navigation_menu',
]; ];
[$base_plugin_id] = explode(PluginBase::DERIVATIVE_SEPARATOR, $block_id);
if (in_array($base_plugin_id, $allow_in_navigation, TRUE)) { if (in_array($base_plugin_id, $allow_in_navigation, TRUE)) {
$definition['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;
}
}); });
} }
......
...@@ -16,7 +16,7 @@ class NavigationSafeBlockDefinitionTest extends BrowserTestBase { ...@@ -16,7 +16,7 @@ class NavigationSafeBlockDefinitionTest extends BrowserTestBase {
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
protected static $modules = ['navigation', 'navigation_test']; protected static $modules = ['navigation', 'navigation_test', 'block'];
/** /**
* {@inheritdoc} * {@inheritdoc}
...@@ -40,6 +40,7 @@ protected function setUp(): void { ...@@ -40,6 +40,7 @@ protected function setUp(): void {
$this->adminUser = $this->drupalCreateUser([ $this->adminUser = $this->drupalCreateUser([
'configure navigation layout', 'configure navigation layout',
'access navigation', 'access navigation',
'administer blocks',
]); ]);
$this->drupalLogin($this->adminUser); $this->drupalLogin($this->adminUser);
...@@ -73,4 +74,18 @@ public function testNavigationSafeBlockDefinition(): void { ...@@ -73,4 +74,18 @@ public function testNavigationSafeBlockDefinition(): void {
$this->assertSession()->linkNotExists('Navigation Shortcuts'); $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');
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment