Commit 4f9ce1ec 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

(cherry picked from commit f341fd00)
parent e61414b8
Loading
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -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;
      }
    });
  }

+16 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ class NavigationSafeBlockDefinitionTest extends BrowserTestBase {
  /**
   * {@inheritdoc}
   */
  protected static $modules = ['navigation', 'navigation_test'];
  protected static $modules = ['navigation', 'navigation_test', 'block'];

  /**
   * {@inheritdoc}
@@ -40,6 +40,7 @@ protected function setUp(): void {
    $this->adminUser = $this->drupalCreateUser([
      'configure navigation layout',
      'access navigation',
      'administer blocks',
    ]);

    $this->drupalLogin($this->adminUser);
@@ -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');
  }

}