summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGábor Hojtsy2008-02-08 19:13:57 (GMT)
committerGábor Hojtsy2008-02-08 19:13:57 (GMT)
commitafb0e4b0565da3078f25997ec294d6765ee86125 (patch)
treecf38ae493536bf107cd0932052712f4693fb18d2
parent8e4422306546e6750fed92f1d9115d00f72e33b9 (diff)
#211979 by theborg, chx, pwolanin: menu items moved out of the navigation menu were not found as parents
-rw-r--r--includes/menu.inc28
1 files changed, 24 insertions, 4 deletions
diff --git a/includes/menu.inc b/includes/menu.inc
index 6e3e099..2bb593b 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -1810,23 +1810,43 @@ function menu_link_save(&$item) {
'customized' => 0,
'updated' => 0,
);
- $menu_name = $item['menu_name'];
$existing_item = FALSE;
if (isset($item['mlid'])) {
$existing_item = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE mlid = %d", $item['mlid']));
}
- // Find the parent - it must be in the same menu.
if (isset($item['plid'])) {
- $parent = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE menu_name = '%s' AND mlid = %d", $menu_name, $item['plid']));
+ $parent = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE mlid = %d", $item['plid']));
}
else {
+ // Find the parent - it must be unique.
$parent_path = $item['link_path'];
+ $where = "WHERE link_path = '%s'";
+ // Only links derived from router items should have module == 'system', and
+ // we want to find the parent even if it's in a different menu.
+ if ($item['module'] == 'system') {
+ $where .= " AND module = '%s'";
+ $arg2 = 'system';
+ }
+ else {
+ // If not derived from a router item, we respect the specified menu name.
+ $where .= " AND menu_name = '%s'";
+ $arg2 = $item['menu_name'];
+ }
do {
+ $parent = FALSE;
$parent_path = substr($parent_path, 0, strrpos($parent_path, '/'));
- $parent = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE menu_name = '%s' AND link_path = '%s'", $menu_name, $parent_path));
+ $result = db_query("SELECT COUNT(*) FROM {menu_links} ". $where, $parent_path, $arg2);
+ // Only valid if we get a unique result.
+ if (db_result($result) == 1) {
+ $parent = db_fetch_array(db_query("SELECT * FROM {menu_links} ". $where, $parent_path, $arg2));
+ }
} while ($parent === FALSE && $parent_path);
}
+ if ($parent !== FALSE) {
+ $item['menu_name'] = $parent['menu_name'];
+ }
+ $menu_name = $item['menu_name'];
// Menu callbacks need to be in the links table for breadcrumbs, but can't
// be parents if they are generated directly from a router item.
if (empty($parent['mlid']) || $parent['hidden'] < 0) {