[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/mollom/tests/ -> mollom_test.module (source)

   1  <?php
   2  // $Id: mollom_test.module,v 1.1.2.10 2010/09/12 23:44:15 dries Exp $
   3  
   4  /**
   5   * @file
   6   * Testing functionality for Mollom module.
   7   */
   8  
   9  /**
  10   * Implements hook_xmlrpc().
  11   */
  12  function mollom_test_xmlrpc() {
  13    return array(
  14      // $data contains a variable amount of properties, so we cannot specify a
  15      // signature.
  16      'mollom.getServerList' => 'mollom_test_get_server_list',
  17      'mollom.verifyKey' => 'mollom_test_verify_key',
  18      'mollom.checkContent' => 'mollom_test_check_content',
  19      'mollom.getImageCaptcha' => 'mollom_test_get_captcha',
  20      'mollom.checkCaptcha' => 'mollom_test_check_captcha',
  21   );
  22  }
  23  
  24  /**
  25   * XML-RPC callback for mollom.getServerList to retrieve new server list.
  26   */
  27  function mollom_test_get_server_list($data) {
  28    $storage = variable_get(__FUNCTION__, array());
  29    $storage[] = $data;
  30    variable_set(__FUNCTION__, $storage);
  31  
  32    return array($GLOBALS['base_url'] . '/xmlrpc.php?version=');
  33  }
  34  
  35  /**
  36   * XML-RPC callback for mollom.verifyKey to validate API keys.
  37   */
  38  function mollom_test_verify_key($data) {
  39    $storage = variable_get(__FUNCTION__, array());
  40    $storage[] = $data;
  41    variable_set(__FUNCTION__, $storage);
  42  
  43    module_load_include('inc', 'mollom');
  44    module_load_include('php', 'simpletest', 'drupal_web_test_case');
  45    module_load_include('test', 'mollom', 'tests/mollom');
  46  
  47    if ($data['public_key'] === MOLLOM_TEST_PUBLIC_KEY) {
  48      return TRUE;
  49    }
  50    xmlrpc_error(MOLLOM_ERROR);
  51  }
  52  
  53  /**
  54   * XML-RPC callback for mollom.checkContent to perform textual analysis.
  55   *
  56   * @todo Add support for 'redirect' and 'refresh' values.
  57   */
  58  function mollom_test_check_content($data) {
  59    $storage = variable_get(__FUNCTION__, array());
  60    $storage[] = $data;
  61    variable_set(__FUNCTION__, $storage);
  62  
  63    $response = array();
  64  
  65    // Spam filter: Check post_title and post_body for ham, spam, or unsure.
  66    if (!isset($data['checks']) || strpos($data['checks'], 'spam') !== FALSE) {
  67      $spam = FALSE;
  68      $ham = FALSE;
  69      foreach (array('post_title', 'post_body') as $key) {
  70        if (!isset($data[$key])) {
  71          continue;
  72        }
  73        // 'spam' always has precedence.
  74        if (strpos($data[$key], 'spam') !== FALSE) {
  75          $spam = TRUE;
  76        }
  77        // Otherwise, check for 'ham'.
  78        elseif (strpos($data[$key], 'ham') !== FALSE) {
  79          $ham = TRUE;
  80        }
  81        // Lastly, take a forced 'unsure' into account.
  82        elseif (strpos($data[$key], 'unsure') !== FALSE) {
  83          $spam = TRUE;
  84          $ham = TRUE;
  85        }
  86      }
  87      if ($spam && $ham) {
  88        $response['spam'] = MOLLOM_ANALYSIS_UNSURE;
  89        $quality = 0.5;
  90      }
  91      elseif ($spam) {
  92        $response['spam'] = MOLLOM_ANALYSIS_SPAM;
  93        $quality = 0;
  94      }
  95      elseif ($ham) {
  96        $response['spam'] = MOLLOM_ANALYSIS_HAM;
  97        $quality = 1;
  98      }
  99      else {
 100        $response['spam'] = MOLLOM_ANALYSIS_UNKNOWN;
 101        $quality = NULL;
 102      }
 103    }
 104  
 105    // Quality filter.
 106    if (!isset($data['checks']) || strpos($data['checks'], 'quality') !== FALSE) {
 107      if (isset($quality)) {
 108        $response['quality'] = $quality;
 109      }
 110      // @todo No idea how quality is calculated during testing without spam
 111      //   results above.
 112      else {
 113        $response['quality'] = 0;
 114      }
 115    }
 116  
 117    // Profanity filter.
 118    if (isset($data['checks']) && strpos($data['checks'], 'profanity') !== FALSE) {
 119      $profanity = 0.0;
 120      foreach (array('post_title', 'post_body') as $key) {
 121        if (isset($data[$key]) && strpos($data[$key], 'profanity') !== FALSE) {
 122          $profanity = 1.0;
 123        }
 124      }
 125      $response['profanity'] = $profanity;
 126    }
 127  
 128    if (!empty($data['session_id'])) {
 129      $response['session_id'] = $data['session_id'];
 130    }
 131    else {
 132      // Drupal 6 Pressflow support.
 133      if (function_exists('drupal_session_start')) {
 134        drupal_session_start();
 135      }
 136      $response['session_id'] = session_id();
 137    }
 138  
 139    return $response;
 140  }
 141  
 142  /**
 143   * XML-RPC callback for mollom.getImageCaptcha to fetch a CATPCHA image.
 144   */
 145  function mollom_test_get_captcha($data) {
 146    $storage = variable_get(__FUNCTION__, array());
 147    $storage[] = $data;
 148    variable_set(__FUNCTION__, $storage);
 149  
 150    // Drupal 6 Pressflow support.
 151    if (function_exists('drupal_session_start')) {
 152      drupal_session_start();
 153    }
 154    return array(
 155      'session_id' => !empty($data['session_id']) ? $data['session_id'] : session_id(),
 156      'url' => $GLOBALS['base_url'] . '/' . drupal_get_path('module', 'mollom') . '/images/powered-by-mollom-2.gif',
 157    );
 158  }
 159  
 160  /**
 161   * XML-RPC callback for mollom.checkCaptcha to validate a CAPTCHA response.
 162   *
 163   * @todo Add support for 'redirect' and 'refresh' values.
 164   */
 165  function mollom_test_check_captcha($data) {
 166    $storage = variable_get(__FUNCTION__, array());
 167    $storage[] = $data;
 168    variable_set(__FUNCTION__, $storage);
 169  
 170    if ($data['captcha_result'] == 'correct') {
 171      return TRUE;
 172    }
 173    if ($data['captcha_result'] == 'incorrect') {
 174      return FALSE;
 175    }
 176  }
 177  
 178  /**
 179   * Implements hook_menu().
 180   */
 181  function mollom_test_menu() {
 182    $items['mollom-test/form'] = array(
 183      'title' => 'Mollom test form',
 184      'page callback' => 'drupal_get_form',
 185      'page arguments' => array('mollom_test_form'),
 186      'access callback' => TRUE,
 187    );
 188    return $items;
 189  }
 190  
 191  /**
 192   * Implements hook_mollom_form_list().
 193   */
 194  function mollom_test_mollom_form_list() {
 195    $forms['mollom_test_form'] = array(
 196      'title' => 'Mollom test form',
 197      'entity' => 'mollom_test',
 198    );
 199    return $forms;
 200  }
 201  
 202  /**
 203   * Implements hook_mollom_form_info().
 204   */
 205  function mollom_test_mollom_form_info($form_id) {
 206    $form_info = array(
 207      'title' => 'Mollom test form',
 208      'bypass access' => array('administer mollom'),
 209      'entity' => 'mollom_test',
 210      'elements' => array(
 211        'title' => 'Title',
 212        'body' => 'Body',
 213        'exclude' => 'Some other field',
 214        'parent][child' => 'Nested element',
 215        'field' => 'Multiple value field',
 216      ),
 217      'mapping' => array(
 218        'post_id' => 'mid',
 219        'post_title' => 'title',
 220        'author_name' => 'name',
 221      ),
 222    );
 223    return $form_info;
 224  }
 225  
 226  /**
 227   * Form builder for Mollom test form.
 228   */
 229  function mollom_test_form(&$form_state, $mid = NULL) {
 230    if (empty($form_state['storage'])) {
 231      $body = '';
 232      if (isset($mid)) {
 233        $body = db_result(db_query("SELECT body FROM {mollom_test} WHERE mid = %d", $mid));
 234      }
 235      $form_state['storage'] = array(
 236        'mid' => $mid,
 237        'title' => '',
 238        'body' => $body,
 239        'exclude' => '',
 240        'parent' => array('child' => ''),
 241        'field' => array(),
 242      );
 243    }
 244    // Always add an empty field the user can submit.
 245    $form_state['storage']['field']['new'] = '';
 246  
 247    $form['#tree'] = TRUE;
 248    $form['mid'] = array(
 249      '#type' => 'hidden',
 250      '#value' => $form_state['storage']['mid'],
 251    );
 252    $form['title'] = array(
 253      '#type' => 'textfield',
 254      '#title' => 'Title',
 255      '#default_value' => $form_state['storage']['title'],
 256      '#required' => TRUE,
 257    );
 258    $form['body'] = array(
 259      '#type' => 'textfield',
 260      '#title' => 'Body',
 261      '#default_value' => $form_state['storage']['body'],
 262    );
 263    $form['exclude'] = array(
 264      '#type' => 'textfield',
 265      '#title' => 'Some other field',
 266      '#default_value' => $form_state['storage']['exclude'],
 267    );
 268    $form['parent']['child'] = array(
 269      '#type' => 'textfield',
 270      '#title' => 'Nested element',
 271      '#default_value' => $form_state['storage']['parent']['child'],
 272    );
 273  
 274    $form['field'] = array(
 275      '#type' => 'fieldset',
 276      '#title' => 'Field',
 277    );
 278    $weight = 0;
 279    foreach ($form_state['storage']['field'] as $delta => $value) {
 280      $form['field'][$delta] = array(
 281        '#type' => 'textfield',
 282        '#title' => 'Field ' . $delta,
 283        '#default_value' => $value,
 284        '#weight' => $weight++,
 285      );
 286    }
 287    $form['field']['new']['#weight'] = 999;
 288    $form['field']['submit'] = array(
 289      '#type' => 'submit',
 290      '#value' => 'Add',
 291      '#validate_parents' => array('field'),
 292      '#submit' => array('mollom_test_form_field_submit'),
 293      '#weight' => 1000,
 294    );
 295  
 296    $form['submit'] = array('#type' => 'submit', '#value' => 'Submit');
 297  
 298    return $form;
 299  }
 300  
 301  /**
 302   * Form element submit handler for mollom_test_form().
 303   */
 304  function mollom_test_form_field_submit($form, &$form_state) {
 305    // Store the new value and clear out the 'new' field.
 306    $form_state['storage'] = $form_state['values'];
 307    $form_state['storage']['field'][] = $form_state['values']['field']['new'];
 308    unset($form_state['input']['field']['new']);
 309    $form_state['rebuild'] = TRUE;
 310  }
 311  
 312  /**
 313   * Form submit handler for mollom_test_form().
 314   */
 315  function mollom_test_form_submit($form, &$form_state) {
 316    $form_state['rebuild'] = FALSE;
 317    unset($form_state['storage']);
 318  
 319    $form_state['values']['field'][] = $form_state['values']['field']['new'];
 320    unset($form_state['values']['field']['new']);
 321  
 322    // Store submission.
 323    $update = !empty($form_state['values']['mid']) ? 'mid' : array();
 324    drupal_write_record('mollom_test', $form_state['values'], $update);
 325  
 326    // Redirect to stored entry.
 327    $form_state['redirect'] = 'mollom-test/form/' . $form_state['values']['mid'];
 328  
 329    drupal_set_message('Successful form submission.');
 330    drupal_set_message('<pre>' . var_export($form_state['values'], TRUE) . '</pre>');
 331  }
 332  
 333  /**
 334   * Implements hook_form_alter().
 335   */
 336  function mollom_test_form_alter(&$form, &$form_state, $form_id) {
 337    if (variable_get('mollom_test_disable_mollom', FALSE)) {
 338      $form_state['mollom']['require_analysis'] = FALSE;
 339      $form_state['mollom']['require_captcha'] = FALSE;
 340    }
 341  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7