diff -u b/core/modules/system/config/schema/system.schema.yml b/core/modules/system/config/schema/system.schema.yml --- b/core/modules/system/config/schema/system.schema.yml +++ b/core/modules/system/config/schema/system.schema.yml @@ -357,10 +357,10 @@ type: block_settings label: 'Tabs block' mapping: - primary_tasks: + primary: type: boolean label: 'Whether primary tabs is shown' - secondary_tasks: + secondary: type: boolean label: 'Whether secondary tabs is shown' diff -u b/core/modules/system/src/Plugin/Block/SystemLocalActionsBlock.php b/core/modules/system/src/Plugin/Block/SystemLocalActionsBlock.php --- b/core/modules/system/src/Plugin/Block/SystemLocalActionsBlock.php +++ b/core/modules/system/src/Plugin/Block/SystemLocalActionsBlock.php @@ -114,6 +114,7 @@ * {@inheritdoc} */ public function getCacheMaxAge() { + // @todo Remove after local action hooks provide cacheability metadata. return 0; } diff -u b/core/modules/system/src/Plugin/Block/SystemTabsBlock.php b/core/modules/system/src/Plugin/Block/SystemTabsBlock.php --- b/core/modules/system/src/Plugin/Block/SystemTabsBlock.php +++ b/core/modules/system/src/Plugin/Block/SystemTabsBlock.php @@ -40,8 +40,8 @@ public function defaultConfiguration() { return [ 'label_display' => FALSE, - 'primary_tasks' => TRUE, - 'secondary_tasks' => TRUE, + 'primary' => TRUE, + 'secondary' => TRUE, ]; } @@ -56,12 +56,12 @@ ]; // Add only selected levels for the printed output. - if ($config['primary_tasks']) { + if ($config['primary']) { $tabs += [ '#primary' => menu_primary_local_tasks(), ]; } - if ($config['secondary_tasks']) { + if ($config['secondary']) { $tabs += [ '#secondary' => menu_secondary_local_tasks(), ]; @@ -95,7 +95,7 @@ * {@inheritdoc} */ public function getCacheMaxAge() { - // @todo Make cacheable now that https://drupal.org/node/2287071 has landed. + // @todo Remove after local task hooks provide cacheability metadata. return 0; } @@ -118,17 +118,17 @@ '#title' => $this->t('Shown tabs'), '#description' => $this->t('Select local tasks being shown in the block'), // Open if not set to defaults. - '#open' => $defaults['primary_tasks'] !== $config['primary_tasks'] || $defaults['secondary_tasks'] !== $config['secondary_tasks'], + '#open' => $defaults['primary'] !== $config['primary'] || $defaults['secondary'] !== $config['secondary'], ); - $form['levels']['primary_tasks'] = [ + $form['levels']['primary'] = [ '#type' => 'checkbox', '#title' => $this->t('Show primary tabs'), - '#default_value' => $config['primary_tasks'], + '#default_value' => $config['primary'], ]; - $form['levels']['secondary_tasks'] = [ + $form['levels']['secondary'] = [ '#type' => 'checkbox', '#title' => $this->t('Show secondary tabs'), - '#default_value' => $config['secondary_tasks'], + '#default_value' => $config['secondary'], ]; return $form; @@ -139,8 +139,8 @@ */ public function blockSubmit($form, FormStateInterface $form_state) { $levels = $form_state->getValue('levels'); - $this->configuration['primary_tasks'] = $levels['primary_tasks']; - $this->configuration['secondary_tasks'] = $levels['secondary_tasks']; + $this->configuration['primary'] = $levels['primary']; + $this->configuration['secondary'] = $levels['secondary']; } } diff -u b/core/modules/system/src/Tests/Menu/LocalTasksTest.php b/core/modules/system/src/Tests/Menu/LocalTasksTest.php --- b/core/modules/system/src/Tests/Menu/LocalTasksTest.php +++ b/core/modules/system/src/Tests/Menu/LocalTasksTest.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\system\Tests\Menu\LocalTasksTest. + * Contains \1. */ namespace Drupal\system\Tests\Menu; @@ -25,12 +25,19 @@ public static $modules = ['block', 'menu_test', 'entity_test']; /** + * The local tasks block used for testing. + * + * @var \Drupal\block\Entity\Block + */ + protected $block; + + /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); - $this->drupalPlaceBlock('system_tabs_block'); + $this->block = $this->drupalPlaceBlock('system_tabs_block', ['id' => 'tabs_block']); } /** @@ -62,6 +69,20 @@ } /** + * Asserts that te local tasks on the specified level is not being printed. + * + * @param int $level + * (optional) The local tasks level to assert; 0 for primary, 1 for + * secondary. Defaults to 0. + */ + protected function assertNoLocalTasks($level = 0) { + $elements = $this->xpath('//*[contains(@class, :class)]//a', array( + ':class' => $level == 0 ? 'tabs primary' : 'tabs secondary', + )); + $this->assertFalse(count($elements), 'Local tasks not found.'); + } + + /** * Tests the plugin based local tasks. */ public function testPluginLocalTask() { @@ -151,2 +172,50 @@ + /** + * Tests that local task blocks are configurable to print a specific level. + */ + public function testLocalTaskBlock() { + // Remove the default block and create a new one. + $this->block->delete(); + + $this->block = $this->drupalPlaceBlock('system_tabs_block', [ + 'id' => 'tabs_block', + 'primary' => TRUE, + 'secondary' => FALSE, + ]); + + $this->drupalGet(Url::fromRoute('menu_test.local_task_test_tasks_settings')); + + // Verify that local tasks in the first level appear. + $this->assertLocalTasks([ + ['menu_test.local_task_test_tasks_view', []], + ['menu_test.local_task_test_tasks_edit', []], + ['menu_test.local_task_test_tasks_settings', []], + ]); + + // Verify that local tasks in the second doesn't appear. + $this->assertNoLocalTasks(1); + + $this->block->delete(); + $this->block = $this->drupalPlaceBlock('system_tabs_block', [ + 'id' => 'tabs_block', + 'primary' => FALSE, + 'secondary' => TRUE, + ]); + + $this->drupalGet(Url::fromRoute('menu_test.local_task_test_tasks_settings')); + + // Verify that local tasks in the first level doesn't appear. + $this->assertNoLocalTasks(0); + + // Verify that local tasks in the second level appear. + $sub_tasks = [ + ['menu_test.local_task_test_tasks_settings_sub1', []], + ['menu_test.local_task_test_tasks_settings_sub2', []], + ['menu_test.local_task_test_tasks_settings_sub3', []], + ['menu_test.local_task_test_tasks_settings_derived', ['placeholder' => 'derive1']], + ['menu_test.local_task_test_tasks_settings_derived', ['placeholder' => 'derive2']], + ]; + $this->assertLocalTasks($sub_tasks, 1); + } + } diff -u b/core/profiles/standard/config/install/block.block.seven_page_primary_tabs.yml b/core/profiles/standard/config/install/block.block.seven_page_primary_tabs.yml --- b/core/profiles/standard/config/install/block.block.seven_page_primary_tabs.yml +++ b/core/profiles/standard/config/install/block.block.seven_page_primary_tabs.yml @@ -10,8 +10,8 @@ label: Primary tabs provider: system label_display: '0' - primary_tasks: true - secondary_tasks: false + primary: true + secondary: false dependencies: module: - system diff -u b/core/profiles/standard/config/install/block.block.seven_page_seconadry_tabs.yml b/core/profiles/standard/config/install/block.block.seven_page_seconadry_tabs.yml --- b/core/profiles/standard/config/install/block.block.seven_page_seconadry_tabs.yml +++ b/core/profiles/standard/config/install/block.block.seven_page_seconadry_tabs.yml @@ -10,8 +10,8 @@ label: Secondary tabs provider: system label_display: '0' - primary_tasks: false - secondary_tasks: true + primary: false + secondary: true dependencies: module: - system