summaryrefslogtreecommitdiff
path: root/modules/menu
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2011-12-24 17:20:23 -0800
committerwebchick <webchick@24967.no-reply.drupal.org>2011-12-24 17:20:23 -0800
commit1e126deba866db54fe1f55b0211bb7c6341e6612 (patch)
treea4fe7c816b6385924c47dce5a8dcc01aaa32f761 /modules/menu
parentfa4d4c5ce3c9e2d156ea00ca3d3299ac90d37a3b (diff)
downloadbrdo-1e126deba866db54fe1f55b0211bb7c6341e6612.tar.gz
brdo-1e126deba866db54fe1f55b0211bb7c6341e6612.tar.bz2
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.
Diffstat (limited to 'modules/menu')
-rw-r--r--modules/menu/menu.install22
-rw-r--r--modules/menu/menu.module18
-rw-r--r--modules/menu/menu.test10
3 files changed, 45 insertions, 5 deletions
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
@@ -183,6 +183,28 @@ function menu_update_7002(&$sandbox) {
}
}
/**
+ * 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 = '<front>', $menu_name = 'navigation') {
+ function addMenuLink($plid = 0, $link = '<front>', $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);