diff --git a/core/modules/views/config/schema/views.display.schema.yml b/core/modules/views/config/schema/views.display.schema.yml index 511b0b9..3473555 100644 --- a/core/modules/views/config/schema/views.display.schema.yml +++ b/core/modules/views/config/schema/views.display.schema.yml @@ -34,6 +34,18 @@ views.display.page: weight: type: integer label: 'Weight' + enabled: + type: boolean + label: 'Enabled' + expanded: + type: boolean + label: 'Expanded' + metadata: + type: sequence + label: 'Metadata' + sequence: + type: string + label: 'Metadata' menu_name: type: string label: 'Menu name' diff --git a/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php b/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php index 33a2fd2..73bc26c 100644 --- a/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php +++ b/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php @@ -140,9 +140,9 @@ public function updateLink(array $new_definition_values, $persist) { $display = &$view->storage->getDisplay($view->current_display); // Just save the title to the original view. $changed = FALSE; - foreach ($new_definition_values as $key => $new_definition_value) { - if (isset($display['display_options']['menu'][$key]) && $display['display_options']['menu'][$key] != $new_definition_values[$key]) { - $display['display_options']['menu'][$key] = $new_definition_values[$key]; + foreach ($overrides as $key => $new_definition_value) { + if (empty($display['display_options']['menu'][$key]) || $display['display_options']['menu'][$key] != $new_definition_value) { + $display['display_options']['menu'][$key] = $new_definition_value; $changed = TRUE; } } diff --git a/core/modules/views/src/Plugin/views/display/Page.php b/core/modules/views/src/Plugin/views/display/Page.php index 8ca7f1c..1a939b0 100644 --- a/core/modules/views/src/Plugin/views/display/Page.php +++ b/core/modules/views/src/Plugin/views/display/Page.php @@ -124,6 +124,8 @@ protected function defineOptions() { 'title' => array('default' => ''), 'description' => array('default' => ''), 'weight' => array('default' => 0), + 'enabled' => array('default' => TRUE), + 'expanded' => array('default' => FALSE), 'menu_name' => array('default' => 'main'), 'parent' => array('default' => ''), 'context' => array('default' => ''), diff --git a/core/modules/views/src/Plugin/views/display/PathPluginBase.php b/core/modules/views/src/Plugin/views/display/PathPluginBase.php index da230c4..60bfec5 100644 --- a/core/modules/views/src/Plugin/views/display/PathPluginBase.php +++ b/core/modules/views/src/Plugin/views/display/PathPluginBase.php @@ -322,6 +322,8 @@ public function getMenuLinks() { $links[$menu_link_id]['title'] = $menu['title']; $links[$menu_link_id]['description'] = $menu['description']; $links[$menu_link_id]['parent'] = $menu['parent']; + $links[$menu_link_id]['enabled'] = $menu['enabled']; + $links[$menu_link_id]['expanded'] = $menu['expanded']; if (isset($menu['weight'])) { $links[$menu_link_id]['weight'] = intval($menu['weight']); diff --git a/core/modules/views/tests/src/Kernel/Plugin/Display/ViewsMenuLinkTest.php b/core/modules/views/tests/src/Kernel/Plugin/Display/ViewsMenuLinkTest.php new file mode 100644 index 0000000..e3a394a --- /dev/null +++ b/core/modules/views/tests/src/Kernel/Plugin/Display/ViewsMenuLinkTest.php @@ -0,0 +1,98 @@ +entityManger = $this->container->get('entity.manager'); + $this->menuLinkManager = $this->container->get('plugin.manager.menu.link'); + $this->menuLinkOverrides = $this->container->get('menu_link.static.overrides'); + } + + /** + * Test views internal menu link options. + */ + public function testMenuLinkOverrides() { + // Link from views module. + $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3'); + $this->assertTrue($views_link['enabled'], 'Menu link is enabled.'); + $this->assertFalse($views_link['expanded'], 'Menu link is not expanded.'); + $views_link['enabled'] = 0; + $views_link['expanded'] = 1; + $this->menuLinkManager->updateDefinition($views_link['id'], $views_link); + $views_link = $this->menuLinkManager->getDefinition($views_link['id']); + $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); + $this->assertTrue($views_link['expanded'], 'Menu link is expanded.'); + $this->menuLinkManager->rebuild(); + $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); + $this->assertTrue($views_link['expanded'], 'Menu link is expanded.'); + + // Link from user module. + $user_link = $this->menuLinkManager->getDefinition('user.page'); + $this->assertTrue($user_link['enabled'], 'Menu link is enabled.'); + $user_link['enabled'] = 0; + $user_link['expanded'] = 1; + $this->menuLinkManager->updateDefinition($user_link['id'], $user_link); + $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); + $this->menuLinkManager->rebuild(); + $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); + + $this->menuLinkOverrides->reload(); + + $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3'); + $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); + $this->assertTrue($views_link['expanded'], 'Menu link is expanded.'); + + $user_link = $this->menuLinkManager->getDefinition('user.page'); + $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); + } + +} diff --git a/core/modules/views/views.install b/core/modules/views/views.install index 37d03b6..4e881b5 100644 --- a/core/modules/views/views.install +++ b/core/modules/views/views.install @@ -363,3 +363,34 @@ function views_update_8005() { /** * @} End of "addtogroup updates-8.1.0". */ + +/** + * @addtogroup updates-8.2.0 + * @{ + */ + +/** + * Set default values for enabled/expanded flag on page displays. + */ +function views_update_8006() { + $config_factory = \Drupal::configFactory(); + foreach ($config_factory->listAll('views.view.') as $view_config_name) { + $view = $config_factory->getEditable($view_config_name); + $save = FALSE; + foreach ($view->get('display') as $display_id => $display) { + if ($display['display_plugin'] == 'page') { + $display['display_options']['menu']['enabled'] = TRUE; + $display['display_options']['menu']['expanded'] = FALSE; + $view->set("display.$display_id", $display); + $save = TRUE; + } + } + if ($save) { + $view->save(); + } + } +} + +/** + * @} End of "addtogroup updates-8.2.0". + */