Index: includes/form.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/form.inc,v retrieving revision 1.502 diff -u -p -r1.502 form.inc --- includes/form.inc 7 Oct 2010 17:31:39 -0000 1.502 +++ includes/form.inc 9 Oct 2010 03:01:23 -0000 @@ -1214,7 +1214,21 @@ function _form_validate(&$elements, &$fo else { drupal_static_reset('form_set_error:limit_validation_errors'); } + } + + // Call user-defined form level validators. + if (isset($form_id)) { + form_execute_handlers('validate', $elements, $form_state); + } + // Call any element-specific validators. These must act on the element + // #value data. + elseif (isset($elements['#element_validate'])) { + foreach ($elements['#element_validate'] as $function) { + $function($elements, $form_state, $form_state['complete form']); + } + } + if (!isset($elements['#validated']) || !$elements['#validated']) { // Make sure a value is passed when the field is required. if (isset($elements['#needs_validation']) && $elements['#required']) { // A simple call to empty() will not cut it here as some fields, like @@ -1238,21 +1252,10 @@ function _form_validate(&$elements, &$fo } } } - - // Call user-defined form level validators. - if (isset($form_id)) { - form_execute_handlers('validate', $elements, $form_state); - } - // Call any element-specific validators. These must act on the element - // #value data. - elseif (isset($elements['#element_validate'])) { - foreach ($elements['#element_validate'] as $function) { - $function($elements, $form_state, $form_state['complete form']); - } - } - $elements['#validated'] = TRUE; } + $elements['#validated'] = TRUE; + // Done validating this element, so turn off error suppression. // _form_validate() turns it on again when starting on the next element, if // it's still appropriate to do so.