diff --git a/modules/menu/menu.admin.inc b/modules/menu/menu.admin.inc index c8e21de..345b63d 100644 --- a/modules/menu/menu.admin.inc +++ b/modules/menu/menu.admin.inc @@ -168,7 +168,7 @@ function menu_overview_form_submit($form, &$form_state) { $form = array_merge($order, $form); // Update our original form with the new order. $updated_items = array(); - $fields = array('plid', 'weight'); + $fields = array('weight', 'plid'); foreach (element_children($form) as $mlid) { if (isset($form[$mlid]['#item'])) { $element = $form[$mlid]; @@ -176,16 +176,6 @@ function menu_overview_form_submit($form, &$form_state) { foreach ($fields as $field) { if ($element[$field]['#value'] != $element[$field]['#default_value']) { $element['#item'][$field] = $element[$field]['#value']; - // If the parent item itself has changed, make sure the original - // parent item will be saved before the child item. This prevents - // any changes to be overwritten by the original values of the - // parent item. - if ($field == 'plid') { - $original_plid = "mlid:{$element['plid']['#default_value']}"; - if (!array_key_exists($original_plid, $updated_items) && array_key_exists($original_plid, $form)) { - $updated_items[$original_plid] = $form[$original_plid]['#item']; - } - } $updated_items[$mlid] = $element['#item']; } } @@ -201,6 +191,11 @@ function menu_overview_form_submit($form, &$form_state) { // Save all our changed items to the database. foreach ($updated_items as $item) { $item['customized'] = 1; + // If items have been reparented, the 'has_children' flag will be out of + // date, so unset it here and let menu_link_save() recalculate it. This + // works as long as parents items are always saved before their children, + // which is already the case as described above. + unset($item['has_children']); menu_link_save($item); } drupal_set_message(t('Your configuration has been saved.'));