diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/common.inc | 2 | ||||
-rw-r--r-- | includes/form.inc | 23 | ||||
-rw-r--r-- | includes/menu.inc | 4 |
3 files changed, 23 insertions, 6 deletions
diff --git a/includes/common.inc b/includes/common.inc index aead0a2d7..52088a12f 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -1193,7 +1193,7 @@ function drupal_to_js($var) { } return '[ '. implode(', ', $output) .' ]'; } - // Fall through + // Fall through case 'object': $output = array(); foreach ($var as $k => $v) { diff --git a/includes/form.inc b/includes/form.inc index 66159313f..fa2fdef49 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -103,11 +103,24 @@ function drupal_get_form($form_id, &$form, $callback = NULL) { } $form = _form_builder($form_id, $form); - + $goto = $_GET['q']; if (!empty($_POST['edit']) && (($_POST['edit']['form_id'] == $form_id) || ($_POST['edit']['form_id'] == $callback))) { drupal_validate_form($form_id, $form, $callback); if ($form_submitted && !form_get_errors()) { - drupal_submit_form($form_id, $form, $callback); + $redirect = drupal_submit_form($form_id, $form, $callback); + if (!is_null($redirect)) { + $goto = $redirect; + } + else if ($form['#redirect']) { + $goto = $form['#redirect']; + } + + if (is_array($goto)) { + call_user_func_array('drupal_goto', $redirect); + } + else { + drupal_goto(drupal_get_path_alias($goto)); + } } } @@ -136,14 +149,18 @@ function drupal_validate_form($form_id, &$form, $callback = NULL) { function drupal_submit_form($form_id, $form, $callback = NULL) { global $form_values; + $goto = null; unset($GLOBALS['form_values']['submit'], $GLOBALS['form_values']['form_id']); if (isset($form['#submit'])) { foreach ($form['#submit'] as $function => $args) { if (function_exists($function)) { - call_user_func_array($function, $args); + // Since we can only redirect to one page, only the last redirect will work + $redirect = call_user_func_array($function, $args); + $goto = (!is_null($redirect)) ? $redirect : $goto; } } } + return $goto; } function _form_validate($elements, $form_id = NULL) { diff --git a/includes/menu.inc b/includes/menu.inc index 5c961cca4..d224dc824 100644 --- a/includes/menu.inc +++ b/includes/menu.inc @@ -998,8 +998,8 @@ function _menu_sort($a, $b) { elseif ($a['weight'] > $b['weight']) { return 1; } - elseif (isset($a['title']) && isset($b['title']) && ($a['title'] < $b['title'])) { - return -1; + elseif (isset($a['title']) && isset($b['title'])) { + return strnatcasecmp($a['title'], $b['title']); } else { return 1; |