? 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
