From 8f46835ea281a1a70c91350fd743a9a0d583333d Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Fri, 13 May 2011 11:57:47 -0400 Subject: =?UTF-8?q?-=20Patch=20#761648=20by=20lyricnz,=20andypost,=20ksenz?= =?UTF-8?q?ee,=20Jody=20Lynn,=20G=C3=A1bor=20Hojtsy,=20Damien=20Tournoud,?= =?UTF-8?q?=20Shawn=20DeArmond,=20David=5FRothstein:=20menu=20items=20disa?= =?UTF-8?q?ppear=20after=20upgrade=20or=20manual=20menu=20entry.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/menu/menu.module | 21 +++++++++++++-------- modules/menu/menu.test | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) (limited to 'modules/menu') diff --git a/modules/menu/menu.module b/modules/menu/menu.module index 3edf158df..fc8f68a6c 100644 --- a/modules/menu/menu.module +++ b/modules/menu/menu.module @@ -540,18 +540,23 @@ function menu_node_delete($node) { function menu_node_prepare($node) { if (empty($node->menu)) { // Prepare the node for the edit form so that $node->menu always exists. - $menu_name = variable_get('menu_parent_' . $node->type, 'main-menu:0'); + $menu_name = strtok(variable_get('menu_parent_' . $node->type, 'main-menu:0'), ':'); $item = array(); if (isset($node->nid)) { + $mlid = FALSE; // Give priority to the default menu - $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND menu_name = :menu_name AND module = 'menu' ORDER BY mlid ASC", 0, 1, array( - ':path' => 'node/' . $node->nid, - ':menu_name' => $menu_name, - ))->fetchField(); - // Check all menus if a link does not exist in the default menu. - if (!$mlid) { - $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND module = 'menu' ORDER BY mlid ASC", 0, 1, array( + $type_menus = variable_get('menu_options_' . $node->type, array('main-menu' => 'main-menu')); + if (in_array($menu_name, $type_menus)) { + $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND menu_name = :menu_name AND module = 'menu' ORDER BY mlid ASC", 0, 1, array( ':path' => 'node/' . $node->nid, + ':menu_name' => $menu_name, + ))->fetchField(); + } + // Check all allowed menus if a link does not exist in the default menu. + if (!$mlid && !empty($type_menus)) { + $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND module = 'menu' AND menu_name IN (:type_menus) ORDER BY mlid ASC", 0, 1, array( + ':path' => 'node/' . $node->nid, + ':type_menus' => array_values($type_menus), ))->fetchField(); } if ($mlid) { diff --git a/modules/menu/menu.test b/modules/menu/menu.test index 510e20c11..b457177cd 100644 --- a/modules/menu/menu.test +++ b/modules/menu/menu.test @@ -664,5 +664,21 @@ class MenuNodeTestCase extends DrupalWebTestCase { // Assert that there is no link for the node. $this->drupalGet(''); $this->assertNoLink($node_title); + + // Add a menu link to the Management menu. + $item = array( + 'link_path' => 'node/' . $node->nid, + 'link_title' => $this->randomName(16), + 'menu_name' => 'management', + ); + menu_link_save($item); + + // Assert that disabled Management menu is not shown on the node/$nid/edit page. + $this->drupalGet('node/' . $node->nid . '/edit'); + $this->assertText('Provide a menu link', t('Link in not allowed menu not shown in node edit form')); + // Assert that the link is still in the management menu after save. + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $link = menu_link_load($item['mlid']); + $this->assertTrue($link, t('Link in not allowed menu still exists after saving node')); } } -- cgit v1.2.3