/** * 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; $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.'); $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.'); }
/** * {@inheritdoc} */ public function updateLink(array $new_definition_values, $persist) { // Filter the list of updates to only those that are allowed. $overrides = array_intersect_key($new_definition_values, $this->overrideAllowed); if ($persist) { $this->staticOverride->saveOverride($this->getPluginId(), $overrides); } // Update the definition. $this->pluginDefinition = $overrides + $this->getPluginDefinition(); return $this->pluginDefinition; }
/** * {@inheritdoc} */ public function updateLink(array $new_definition_values, $persist) { // Filter the list of updates to only those that are allowed. $overrides = array_intersect_key($new_definition_values, $this->overrideAllowed); // Update the definition. $this->pluginDefinition = $overrides + $this->getPluginDefinition(); if ($persist) { // Always save the menu name as an override to avoid defaulting to tools. $overrides['menu_name'] = $this->pluginDefinition['menu_name']; $this->staticOverride->saveOverride($this->getPluginId(), $overrides); } return $this->pluginDefinition; }
/** * Resets the menu link to its default settings. * * @param \Drupal\Core\Menu\MenuLinkInterface $instance * The menu link which should be reset. * * @return \Drupal\Core\Menu\MenuLinkInterface * The reset menu link. * * @throws \Drupal\Component\Plugin\Exception\PluginException * Thrown when the menu link is not resettable. */ protected function resetInstance(MenuLinkInterface $instance) { $id = $instance->getPluginId(); if (!$instance->isResettable()) { throw new PluginException("Menu link {$id} is not resettable"); } // Get the original data from disk, reset the override and re-save the menu // tree for this link. $definition = $this->getDefinitions()[$id]; $this->overrides->deleteOverride($id); $this->treeStorage->save($definition); return $this->createInstance($id); }