Index: mollom.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mollom/mollom.admin.inc,v
retrieving revision 1.32
diff -u -p -r1.32 mollom.admin.inc
--- mollom.admin.inc	10 Aug 2010 19:33:51 -0000	1.32
+++ mollom.admin.inc	8 Sep 2010 21:54:27 -0000
@@ -258,8 +258,6 @@ function mollom_admin_configure_form_sub
   $mollom_form = $form_state['values']['mollom'];
   // Merge in form information from $form_state.
   $mollom_form += $form_state['storage']['mollom_form'];
-  // Update form information in $form_state for potential rebuilds.
-  $form_state['storage']['mollom_form'] = $mollom_form;
 
   // Only store a list of enabled textual analysis checks.
   $mollom_form['checks'] = array_keys(array_filter($mollom_form['checks']));
Index: mollom.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mollom/mollom.module,v
retrieving revision 1.69
diff -u -p -r1.69 mollom.module
--- mollom.module	3 Sep 2010 17:34:07 -0000	1.69
+++ mollom.module	8 Sep 2010 21:59:45 -0000
@@ -395,7 +395,6 @@ function mollom_data_load($entity, $id) 
  * - session: The session ID returned by the Mollom server.
  * - quality: A quality rating assigned to the content to tell whether or not
  *   it's spam.
- * - reputation: The reputation of the author.
  * - languages: An array containing language codes the content might be
  *   written in.
  *
@@ -409,14 +408,14 @@ function mollom_data_load($entity, $id) 
  * @param $id
  *   The entity id the data belongs to.
  *
- * @todo Remove usage of global $mollom_response variable.
+ * @todo Remove usage of global $mollom variable.
  */
 function mollom_data_save($entity, $id) {
   // Nothing to do, if we do not have a valid Mollom response.
-  if (!isset($GLOBALS['mollom_response']['session_id'])) {
+  if (empty($GLOBALS['mollom']['response']['session_id'])) {
     return FALSE;
   }
-  $data = $GLOBALS['mollom_response'];
+  $data = $GLOBALS['mollom']['response'];
   $data['session'] = $data['session_id'];
   $data['entity'] = $entity;
   $data['did'] = $id;
@@ -1157,19 +1156,15 @@ function mollom_process_mollom($element,
   // Setup initial Mollom session and form information.
   if (empty($form_state['mollom'])) {
     $form_state['mollom'] = array(
-      'form_id' => $element['#mollom_form']['form_id'],
       'require_analysis' => $element['#mollom_form']['mode'] == MOLLOM_MODE_ANALYSIS,
       'require_captcha' => $element['#mollom_form']['mode'] == MOLLOM_MODE_CAPTCHA,
       'passed_captcha' => FALSE,
-      'entity' => $element['#mollom_form']['entity'],
-      'checks' => $element['#mollom_form']['checks'],
-      'enabled_fields' => $element['#mollom_form']['enabled_fields'],
-      'mapping' => $element['#mollom_form']['mapping'],
       'response' => array(
         'session_id' => '',
       ),
     );
   }
+  $form_state['mollom'] += $element['#mollom_form'];
 
   // Add the Mollom session element.
   $element['session_id'] = array(
@@ -1227,6 +1222,10 @@ function mollom_process_mollom($element,
   drupal_add_js(drupal_get_path('module', 'mollom') . '/mollom.js');
   drupal_add_css(drupal_get_path('module', 'mollom') . '/mollom.css');
 
+  // Make Mollom form and session information available to entirely different
+  // functions.
+  $GLOBALS['mollom'] = &$form_state['mollom'];
+
   return $element;
 }
 
@@ -1261,8 +1260,6 @@ function mollom_validate_analysis(&$form
   // Store the response returned by Mollom.
   $form_state['mollom']['response'] = $result;
   $form['mollom']['session_id']['#value'] = $result['session_id'];
-  $GLOBALS['mollom_response'] = $form_state['mollom']['response'];
-  $GLOBALS['mollom_form'] = $form['mollom']['#mollom_form'];
 
   // Check the profanity threshold of the content.
   if (isset($result['profanity']) && $result['profanity'] >= 0.5) {
@@ -1273,20 +1270,21 @@ function mollom_validate_analysis(&$form
   if (isset($result['spam'])) {
     switch ($result['spam']) {
       case MOLLOM_ANALYSIS_HAM:
+        $form_state['mollom']['require_captcha'] = FALSE;
         watchdog('mollom', 'Ham: <pre>@message</pre>Result: <pre>@result</pre>', array('@message' => print_r($data, TRUE), '@result' => print_r($result, TRUE)));
         break;
 
       case MOLLOM_ANALYSIS_SPAM:
+        $form_state['mollom']['require_captcha'] = FALSE;
         form_set_error('mollom', t('Your submission has triggered the spam filter and will not be accepted.'));
         watchdog('mollom', 'Spam: <pre>@message</pre>Result: <pre>@result</pre>', array('@message' => print_r($data, TRUE), '@result' => print_r($result, TRUE)));
         break;
 
       case MOLLOM_ANALYSIS_UNSURE:
-        // Fall back to a CAPTCHA.
-        form_set_error('mollom', t("To complete this form, please complete the word verification below."));
+        $form_state['mollom']['require_captcha'] = TRUE;
+        form_set_error('mollom][captcha', t('To complete this form, please complete the word verification below.'));
         watchdog('mollom', 'Unsure: <pre>@message</pre>Result: <pre>@result</pre>', array('@message' => print_r($data, TRUE), '@result' => print_r($result, TRUE)));
 
-        $form_state['mollom']['require_captcha'] = TRUE;
         $form['mollom']['captcha']['#access'] = TRUE;
         $form['mollom']['captcha']['#required'] = TRUE;
 
@@ -1326,11 +1324,10 @@ function mollom_validate_captcha(&$form,
   // request, we need to re-populate our global variable for mollom_data_save().
   if ($form_state['mollom']['passed_captcha']) {
     $form['mollom']['captcha']['#access'] = FALSE;
-    $GLOBALS['mollom_response'] = $form_state['mollom']['response'];
     return;
   }
 
-  // Bail out if no value was provided.
+  // Nothing to validate if there is no value.
   if (empty($form_state['values']['mollom']['captcha'])) {
     return;
   }
@@ -1354,10 +1351,8 @@ function mollom_validate_captcha(&$form,
   }
 
   // Store the response for #submit handlers.
-  $form_state['mollom']['response']['spam'] = (int) $result;
+  $form_state['mollom']['response']['captcha'] = $result;
   $form['mollom']['session_id']['#value'] = $form_state['mollom']['response']['session_id'];
-  $GLOBALS['mollom_response'] = $form_state['mollom']['response'];
-  $GLOBALS['mollom_form'] = $form['mollom']['#mollom_form'];
 
   // Explictly check for TRUE, since mollom.checkCaptcha() can also return an
   // error message (e.g. expired or invalid session_id).
@@ -1790,7 +1785,7 @@ function mollom_mail_alter(&$message) {
   // submitted form's hook_mollom_form_info(). This should ensure that the
   // report link is added to mails sent by actual users and not any mails sent
   // by Drupal since they should never be reported as spam.
-  if (!empty($GLOBALS['mollom_form']['mail ids']) && in_array($message['id'], $GLOBALS['mollom_form']['mail ids'])) {
+  if (!empty($GLOBALS['mollom']['mail ids']) && in_array($message['id'], $GLOBALS['mollom']['mail ids'])) {
     mollom_mail_add_report_link($message);
   }
 }
@@ -1799,10 +1794,10 @@ function mollom_mail_alter(&$message) {
  * Add the 'Report as innapropriate' link to an e-mail message.
  */
 function mollom_mail_add_report_link(&$message) {
-  if (!empty($GLOBALS['mollom_response']['session_id'])) {
-    mollom_data_save('session', $GLOBALS['mollom_response']['session_id']);
+  if (!empty($GLOBALS['mollom']['response']['session_id'])) {
+    mollom_data_save('session', $GLOBALS['mollom']['response']['session_id']);
     $report_link = t('Report as inappropriate: @link', array(
-      '@link' => url('mollom/report/session/' . $GLOBALS['mollom_response']['session_id'], array('absolute' => TRUE)),
+      '@link' => url('mollom/report/session/' . $GLOBALS['mollom']['response']['session_id'], array('absolute' => TRUE)),
     ));
     $message['body'][] = $report_link;
   }
