From 1e126deba866db54fe1f55b0211bb7c6341e6612 Mon Sep 17 00:00:00 2001 From: webchick Date: Sat, 24 Dec 2011 17:20:23 -0800 Subject: Issue #942782 by pillarsdotnet, xjm, becw, timhilliard, JohnAlbin, jrchamp, Tor Arne Thune, Damien Tournoud, jn2, James Andres, dstol, melon, colan: Fixed Custom menus never receive an active trail. --- modules/menu/menu.install | 22 ++++++++++++++++++++++ modules/menu/menu.module | 18 ++++++++++++++++++ modules/menu/menu.test | 10 +++++----- 3 files changed, 45 insertions(+), 5 deletions(-) (limited to 'modules/menu') diff --git a/modules/menu/menu.install b/modules/menu/menu.install index a7e43379e..7877b996d 100644 --- a/modules/menu/menu.install +++ b/modules/menu/menu.install @@ -182,6 +182,28 @@ function menu_update_7002(&$sandbox) { update_fix_d7_block_deltas($sandbox, $renamed_deltas, $moved_deltas); } } +/** + * Add missing custom menus to active menus list. + */ +function menu_update_7003(&$sandbox) { + // Make sure all custom menus are present in the active menus variable so that + // their items may appear in the active trail. + // @see menu_set_active_menu_names() + $active_menus = variable_get('menu_default_active_menus', array_keys(menu_list_system_menus())); + $update_variable = FALSE; + foreach (menu_get_names() as $menu_name) { + if (!in_array($menu_name, $active_menus) && (strpos($menu_name, 'menu-') === 0)) { + $active_menus[] = $menu_name; + $update_variable = TRUE; + } + } + if ($update_variable) { + variable_set('menu_default_active_menus', $active_menus); + } + // Clear the menu cache. + cache_clear_all(NULL, 'cache_menu'); +} + /** * @} End of "defgroup updates-7.x-extra" * The next series of updates should start at 8000. diff --git a/modules/menu/menu.module b/modules/menu/menu.module index c91486731..615548c1e 100644 --- a/modules/menu/menu.module +++ b/modules/menu/menu.module @@ -268,6 +268,15 @@ function menu_save($menu) { switch ($status) { case SAVED_NEW: + // Make sure the menu is present in the active menus variable so that its + // items may appear in the menu active trail. + // @see menu_set_active_menu_names() + $active_menus = variable_get('menu_default_active_menus', array_keys(menu_get_menus())); + if (!in_array($menu['menu_name'], $active_menus)) { + $active_menus[] = $menu['menu_name']; + variable_set('menu_default_active_menus', $active_menus); + } + module_invoke_all('menu_insert', $menu); break; @@ -305,6 +314,15 @@ function menu_delete($menu) { // Delete all links from the menu. menu_delete_links($menu['menu_name']); + // Remove menu from active menus variable. + $active_menus = variable_get('menu_default_active_menus', array_keys(menu_get_menus())); + foreach ($active_menus as $i => $menu_name) { + if ($menu['menu_name'] == $menu_name) { + unset($active_menus[$i]); + variable_set('menu_default_active_menus', $active_menus); + } + } + // Delete the custom menu. db_delete('menu_custom') ->condition('menu_name', $menu['menu_name']) diff --git a/modules/menu/menu.test b/modules/menu/menu.test index 0edfc47b4..44b5d687a 100644 --- a/modules/menu/menu.test +++ b/modules/menu/menu.test @@ -205,7 +205,7 @@ class MenuTestCase extends DrupalWebTestCase { // Add menu links. $item1 = $this->addMenuLink(0, 'node/' . $node1->nid, $menu_name); - $item2 = $this->addMenuLink($item1['mlid'], 'node/' . $node2->nid, $menu_name); + $item2 = $this->addMenuLink($item1['mlid'], 'node/' . $node2->nid, $menu_name, FALSE); $item3 = $this->addMenuLink($item2['mlid'], 'node/' . $node3->nid, $menu_name); $this->assertMenuLink($item1['mlid'], array('depth' => 1, 'has_children' => 1, 'p1' => $item1['mlid'], 'p2' => 0)); $this->assertMenuLink($item2['mlid'], array('depth' => 2, 'has_children' => 1, 'p1' => $item1['mlid'], 'p2' => $item2['mlid'], 'p3' => 0)); @@ -283,7 +283,7 @@ class MenuTestCase extends DrupalWebTestCase { * @param string $menu_name Menu name. * @return array Menu link created. */ - function addMenuLink($plid = 0, $link = '', $menu_name = 'navigation') { + function addMenuLink($plid = 0, $link = '', $menu_name = 'navigation', $expanded = TRUE) { // View add menu link page. $this->drupalGet("admin/structure/menu/manage/$menu_name/add"); $this->assertResponse(200); @@ -294,7 +294,7 @@ class MenuTestCase extends DrupalWebTestCase { 'link_title' => $title, 'description' => '', 'enabled' => TRUE, // Use this to disable the menu and test. - 'expanded' => TRUE, // Setting this to true should test whether it works when we do the std_user tests. + 'expanded' => $expanded, // Setting this to true should test whether it works when we do the std_user tests. 'parent' => $menu_name . ':' . $plid, 'weight' => '0', ); @@ -345,7 +345,7 @@ class MenuTestCase extends DrupalWebTestCase { if (isset($parent)) { // Verify menu link. $title = $parent['link_title']; - $this->assertText($title, 'Parent menu link was displayed'); + $this->assertLink($title, 0, 'Parent menu link was displayed'); // Verify menu link link. $this->clickLink($title); @@ -355,7 +355,7 @@ class MenuTestCase extends DrupalWebTestCase { // Verify menu link. $title = $item['link_title']; - $this->assertText($title, 'Menu link was displayed'); + $this->assertLink($title, 0, 'Menu link was displayed'); // Verify menu link link. $this->clickLink($title); -- cgit v1.2.3