- Patch #302638 by pwolanin: no-op queries during menu rebuild.
parent
b4ab2ac2ce
commit
010d7294a4
|
@ -1896,7 +1896,7 @@ function menu_link_save(&$item) {
|
||||||
|
|
||||||
// This is the easiest way to handle the unique internal path '<front>',
|
// This is the easiest way to handle the unique internal path '<front>',
|
||||||
// since a path marked as external does not need to match a router path.
|
// since a path marked as external does not need to match a router path.
|
||||||
$item['_external'] = (menu_path_is_external($item['link_path']) || $item['link_path'] == '<front>') ? 1 : 0;
|
$item['external'] = (menu_path_is_external($item['link_path']) || $item['link_path'] == '<front>') ? 1 : 0;
|
||||||
// Load defaults.
|
// Load defaults.
|
||||||
$item += array(
|
$item += array(
|
||||||
'menu_name' => 'navigation',
|
'menu_name' => 'navigation',
|
||||||
|
@ -1916,7 +1916,13 @@ function menu_link_save(&$item) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($item['plid'])) {
|
if (isset($item['plid'])) {
|
||||||
$parent = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE mlid = %d", $item['plid']));
|
if ($item['plid']) {
|
||||||
|
$parent = db_fetch_array(db_query("SELECT * FROM {menu_links} WHERE mlid = %d", $item['plid']));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Don't bother with the query - mlid can never equal zero..
|
||||||
|
$parent = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Find the parent - it must be unique.
|
// Find the parent - it must be unique.
|
||||||
|
@ -1968,7 +1974,7 @@ function menu_link_save(&$item) {
|
||||||
%d, %d,
|
%d, %d,
|
||||||
'%s', '%s', '%s', %d, %d)",
|
'%s', '%s', '%s', %d, %d)",
|
||||||
$item['menu_name'], $item['plid'], $item['link_path'],
|
$item['menu_name'], $item['plid'], $item['link_path'],
|
||||||
$item['hidden'], $item['_external'], $item['has_children'],
|
$item['hidden'], $item['external'], $item['has_children'],
|
||||||
$item['expanded'], $item['weight'],
|
$item['expanded'], $item['weight'],
|
||||||
$item['module'], $item['link_title'], serialize($item['options']),
|
$item['module'], $item['link_title'], serialize($item['options']),
|
||||||
$item['customized'], $item['updated']);
|
$item['customized'], $item['updated']);
|
||||||
|
@ -2000,10 +2006,9 @@ function menu_link_save(&$item) {
|
||||||
if ($existing_item && ($item['plid'] != $existing_item['plid'] || $menu_name != $existing_item['menu_name'])) {
|
if ($existing_item && ($item['plid'] != $existing_item['plid'] || $menu_name != $existing_item['menu_name'])) {
|
||||||
_menu_link_move_children($item, $existing_item);
|
_menu_link_move_children($item, $existing_item);
|
||||||
}
|
}
|
||||||
// Find the callback. During the menu update we store empty paths to be
|
// Find the router_path.
|
||||||
// fixed later, so we skip this.
|
if (empty($item['router_path']) || !$existing_item || ($existing_item['link_path'] != $item['link_path'])) {
|
||||||
if (!isset($_SESSION['system_update_6021']) && (empty($item['router_path']) || !$existing_item || ($existing_item['link_path'] != $item['link_path']))) {
|
if ($item['external']) {
|
||||||
if ($item['_external']) {
|
|
||||||
$item['router_path'] = '';
|
$item['router_path'] = '';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -2012,24 +2017,32 @@ function menu_link_save(&$item) {
|
||||||
$item['router_path'] = _menu_find_router_path($menu, $item['link_path']);
|
$item['router_path'] = _menu_find_router_path($menu, $item['link_path']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
db_query("UPDATE {menu_links} SET menu_name = '%s', plid = %d, link_path = '%s',
|
$item['options'] = serialize($item['options']);
|
||||||
router_path = '%s', hidden = %d, external = %d, has_children = %d,
|
// If every value in $existing_item is the same in the $item, there is no
|
||||||
expanded = %d, weight = %d, depth = %d,
|
// reason to run the update queries or clear the caches. We use
|
||||||
p1 = %d, p2 = %d, p3 = %d, p4 = %d, p5 = %d, p6 = %d, p7 = %d, p8 = %d, p9 = %d,
|
// array_diff_assoc() with the $existing_item as the first parameter
|
||||||
module = '%s', link_title = '%s', options = '%s', customized = %d WHERE mlid = %d",
|
// because $item has additional keys left over from the process of building
|
||||||
$item['menu_name'], $item['plid'], $item['link_path'],
|
// the router item.
|
||||||
$item['router_path'], $item['hidden'], $item['_external'], $item['has_children'],
|
if (!$existing_item || array_diff_assoc($existing_item, $item)) {
|
||||||
$item['expanded'], $item['weight'], $item['depth'],
|
db_query("UPDATE {menu_links} SET menu_name = '%s', plid = %d, link_path = '%s',
|
||||||
$item['p1'], $item['p2'], $item['p3'], $item['p4'], $item['p5'], $item['p6'], $item['p7'], $item['p8'], $item['p9'],
|
router_path = '%s', hidden = %d, external = %d, has_children = %d,
|
||||||
$item['module'], $item['link_title'], serialize($item['options']), $item['customized'], $item['mlid']);
|
expanded = %d, weight = %d, depth = %d,
|
||||||
// Check the has_children status of the parent.
|
p1 = %d, p2 = %d, p3 = %d, p4 = %d, p5 = %d, p6 = %d, p7 = %d, p8 = %d, p9 = %d,
|
||||||
_menu_update_parental_status($item);
|
module = '%s', link_title = '%s', options = '%s', customized = %d WHERE mlid = %d",
|
||||||
menu_cache_clear($menu_name);
|
$item['menu_name'], $item['plid'], $item['link_path'],
|
||||||
if ($existing_item && $menu_name != $existing_item['menu_name']) {
|
$item['router_path'], $item['hidden'], $item['external'], $item['has_children'],
|
||||||
menu_cache_clear($existing_item['menu_name']);
|
$item['expanded'], $item['weight'], $item['depth'],
|
||||||
|
$item['p1'], $item['p2'], $item['p3'], $item['p4'], $item['p5'], $item['p6'], $item['p7'], $item['p8'], $item['p9'],
|
||||||
|
$item['module'], $item['link_title'], $item['options'], $item['customized'], $item['mlid']);
|
||||||
|
// Check the has_children status of the parent.
|
||||||
|
_menu_update_parental_status($item);
|
||||||
|
menu_cache_clear($menu_name);
|
||||||
|
if ($existing_item && $menu_name != $existing_item['menu_name']) {
|
||||||
|
menu_cache_clear($existing_item['menu_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
_menu_clear_page_cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
_menu_clear_page_cache();
|
|
||||||
return $item['mlid'];
|
return $item['mlid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue