diff --git a/core/modules/views/config/schema/views.display.schema.yml b/core/modules/views/config/schema/views.display.schema.yml index 3dabf6a..04e73f2 100644 --- a/core/modules/views/config/schema/views.display.schema.yml +++ b/core/modules/views/config/schema/views.display.schema.yml @@ -37,6 +37,9 @@ views.display.page: enabled: type: boolean label: 'Enabled' + expanded: + type: boolean + label: 'Expanded' 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 3d10702..1445213 100644 --- a/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php +++ b/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php @@ -9,6 +9,7 @@ use Drupal\Core\Menu\MenuLinkBase; use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Menu\StaticMenuLinkOverridesInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\views\ViewExecutableFactory; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -31,7 +32,6 @@ class ViewsMenuLink extends MenuLinkBase implements ContainerFactoryPluginInterf 'enabled' => 1, 'title' => 1, 'description' => 1, - 'metadata' => 1, ); /** @@ -139,9 +139,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]) || (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/PathPluginBase.php b/core/modules/views/src/Plugin/views/display/PathPluginBase.php index d1aee85..c9a8440 100644 --- a/core/modules/views/src/Plugin/views/display/PathPluginBase.php +++ b/core/modules/views/src/Plugin/views/display/PathPluginBase.php @@ -324,6 +324,10 @@ 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']; + if (isset($menu['expanded'])) { + $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/src/Tests/ViewsMenuLinkTest.php b/core/modules/views/src/Tests/ViewsMenuLinkTest.php index e69de29..4da964c 100644 --- a/core/modules/views/src/Tests/ViewsMenuLinkTest.php +++ b/core/modules/views/src/Tests/ViewsMenuLinkTest.php @@ -0,0 +1,106 @@ +entityManger = $this->container->get('entity.manager'); + $this->menuLinkManager = $this->container->get('plugin.manager.menu.link'); + $this->menuLinkOverrides = $this->container->get('menu_link.static.overrides'); + } + + 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; + $views_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.'); + + debug($views_link); + debug($user_link); + + $this->menuLinkOverrides->reload(); + debug($this->menuLinkOverrides->loadOverride($views_link['id'])); + debug($this->menuLinkOverrides->loadOverride($user_link['id'])); + + $this->resetAll(); + + $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3'); + debug($views_link); + $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'); + debug($user_link); + $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); + } + +} diff --git a/core/modules/views/tests/src/ViewsMenuLinkTest.php b/core/modules/views/tests/src/ViewsMenuLinkTest.php deleted file mode 100644 index b9e713b..0000000 --- a/core/modules/views/tests/src/ViewsMenuLinkTest.php +++ /dev/null @@ -1,103 +0,0 @@ -entityManger = $this->container->get('entity.manager'); - $this->menuLinkManager = $this->container->get('plugin.manager.menu.link'); - $this->menuLinkOverrides = $this->container->get('menu_link.static.overrides'); - } - - public function testMenuLinkOverrides() { - $storage = $this->entityManger->getStorage('view'); - - $data = \Symfony\Component\Yaml\Yaml::parse(drupal_get_path('module', 'views_test_config') . '/test_views/views.view.test_page_display_menu.yml'); - $view = $storage->createFromStorageRecord($data); - $view->save(); - - $this->menuLinkManager->rebuild(); - - /** - * 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.'); - $views_link['enabled'] = 0; - $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->menuLinkManager->rebuild(); - $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); - - /** - * Link from user module. - */ - $user_link = $this->menuLinkManager->getDefinition('user.page'); - $this->assertTrue($user_link['enabled'], 'Menu link is enabled.'); - $user_link['enabled'] = 0; - $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.'); - - debug($views_link); - debug($user_link); - - $this->menuLinkOverrides->reload(); - debug($this->menuLinkOverrides->loadOverride($views_link['id'])); - debug($this->menuLinkOverrides->loadOverride($user_link['id'])); - - $this->resetAll(); - - $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3'); - debug($views_link); - $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); - - $user_link = $this->menuLinkManager->getDefinition('user.page'); - debug($user_link); - $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); - } - -}