### Eclipse Workspace Patch 1.0 #P drupal-contrib-modules-mailhandler Index: mailhandler.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.module,v retrieving revision 1.87.2.9 diff -u -r1.87.2.9 mailhandler.module --- mailhandler.module 2 May 2008 17:32:18 -0000 1.87.2.9 +++ mailhandler.module 25 Jun 2008 19:18:16 -0000 @@ -151,9 +151,39 @@ list($fromaddress, $fromname) = mailhandler_get_fromaddress($header, $mailbox); //dprint_r($node); //DEBUG + + // 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 = is_array($_SESSION['messages']['error']) ? $_SESSION['messages']['error'] : array(); + $_SESSION['messages']['error'] = array(); node_validate($node); - $error = form_get_errors(); + $error = 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[$keys[count($keys) - 1]] = $message; + } + } + } + $_SESSION['messages']['error'] = $saved_errors; + if (!$error) { // Prepare the node for save and allow modules make changes $node = node_submit($node);