summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/common.inc2
-rw-r--r--includes/form.inc23
-rw-r--r--includes/menu.inc4
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;