? mailhandler-validation-271975-16.patch Index: mailhandler.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.module,v retrieving revision 1.96.2.23 diff -u -p -r1.96.2.23 mailhandler.module --- mailhandler.module 9 Apr 2010 02:14:42 -0000 1.96.2.23 +++ mailhandler.module 30 Apr 2010 21:06:50 -0000 @@ -481,44 +481,10 @@ function mailhandler_comment_submit($nod function mailhandler_node_submit($node, $header, $mailbox, $origbody) { global $user; list($fromaddress, $fromname) = mailhandler_get_fromaddress($header, $mailbox); - - // Drupal 5.x & 6.x don't support multiple validations: each node_validate() - // call will ADD error messages to previous ones, so if some validation error - // occours in one message it will be reported in all messages after it. - // Since there is no way to reset form errors, the only method to avoid this - // problem is working with $_SESSION['messages'], used by form_set_error(). - // See http://drupal.org/node/271975 for more info. - // Warning: with this method, if the same error message is reported for 2+ different - // fields it will be detected only for the last one. - if (!isset($_SESSION['messages'])) { - $_SESSION['messages'] = array(); - } - $saved_errors = isset($_SESSION['messages']['error']) ? $_SESSION['messages']['error'] : array(); - $_SESSION['messages']['error'] = array(); + // Reset the static cache + form_set_error(NULL, '', TRUE); node_validate($node); - $error_messages = array(); - if (count($_SESSION['messages']['error'])) { - $allerrors = form_get_errors(); - foreach ($_SESSION['messages']['error'] as $message) { - $keys = array_keys($allerrors, $message); - if (!$keys || !count($keys)) { - // Not a validation error (but an error, i'll print it) - $saved_errors[] = $message; - } else { - // This is a validation error, i take the last field with it (previous fields - // should be about previous validations) - $error_messages[$keys[count($keys) - 1]] = $message; - } - } - } - if (is_array($saved_errors) && count($saved_errors)) { - $_SESSION['messages']['error'] = $saved_errors; - } - else { - unset($_SESSION['messages']['error']); - } - - if (!$error_messages) { + if (!$error_messages = form_set_error()) { // Prepare the node for save and allow modules make changes $node = node_submit($node); // Save the node