/** * 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.'); }
/** * Perform menu-specific rebuilding. */ protected function menuLinksRebuild() { if ($this->lock->acquire(__FUNCTION__)) { $transaction = db_transaction(); try { // Ensure the menu links are up to date. $this->menuLinkManager->rebuild(); // Ignore any database replicas temporarily. db_ignore_replica(); } catch (\Exception $e) { $transaction->rollback(); watchdog_exception('menu', $e); } $this->lock->release(__FUNCTION__); } else { // Wait for another request that is already doing this work. // We choose to block here since otherwise the router item may not // be available during routing resulting in a 404. $this->lock->wait(__FUNCTION__); } }