| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |