'textfield', '#title' => t('Math question'), '#required' => TRUE, '#size' => $maxlength + 2, '#maxlength' => $maxlength, '#description' => t('Solve this math question and enter the solution with digits. E.g. for "two plus four = ?" enter "6".'), ); switch (mt_rand(0, 2)) { case 0: // question like "x + y = ?" $form_item['solution'] = "$result"; $form_item['form']['captcha_response']['#field_prefix'] = _math_captcha_repr($x, TRUE) .' '. _math_captcha_repr_op($operator) .' '. _math_captcha_repr($y, TRUE) .' '. _math_captcha_repr_op('='); break; case 1: // question like "x + ? = z" $form_item['solution'] = "$y"; $form_item['form']['captcha_response']['#field_prefix'] = _math_captcha_repr($x, TRUE) .' '. _math_captcha_repr_op($operator) .' '; $form_item['form']['captcha_response']['#field_suffix'] = ' '. _math_captcha_repr_op('=') .' '. _math_captcha_repr($result); break; case 2: // question like "? + y = z" $form_item['solution'] = "$x"; $form_item['form']['captcha_response']['#field_suffix'] = ' '. _math_captcha_repr_op($operator) .' '. _math_captcha_repr($y, TRUE) .' '. _math_captcha_repr_op('=') .' '. _math_captcha_repr($result); break; } return $form_item; } /** * Helper function for transforming a number to a textual representation */ function _math_captcha_repr($n, $add_paratheses_when_negative=FALSE) { // start with no textual representation $t = "$n"; // if enabled and available: do textual representation if (variable_get('math_captcha_textual_numbers', TRUE)) { $repr_map = array( 0 => t('zero'), 1 => t('one'), 2 => t('two'), 3 => t('three'), 4 => t('four'), 5 => t('five'), 6 => t('six'), 7 => t('seven'), 8 => t('eight'), 9 => t('nine'), 10 => t('ten'), 11 => t('eleven'), 12 => t('twelve'), 13 => t('thirteen'), 14 => t('fourteen'), 15 => t('fifteen'), ); if (array_key_exists(abs($n), $repr_map)) { $t = $repr_map[abs($n)]; if ($n < 0) { $t = t('minus !number', array('!number' => $t)); } } } if ($add_paratheses_when_negative && $n < 0) { $t = "($t)"; } return $t; } function _math_captcha_repr_op($op) { // start with no textual representation $t = "$op"; // if enabled and available: do textual representation if (variable_get('math_captcha_textual_operators', FALSE)) { $repr_map = array('+' => t('plus'), '-' => t('minus'), '*' => t('times'), '=' => t('equals')); if (array_key_exists($op, $repr_map)) { $t = $repr_map[$op]; } } return $t; }