danielebarchiesi@2: reCAPTCHA web service to improve the CAPTCHA system and protect email addresses.', array('@url' => url('https://www.google.com/recaptcha'))); danielebarchiesi@2: break; danielebarchiesi@2: case 'admin/help#recaptcha': danielebarchiesi@2: $output .= '
' . danielebarchiesi@2: t('Uses the reCAPTCHA web service to improve the CAPTCHA module and protect email addresses. For more information on what reCAPTCHA is, visit the official website.', array('@url' => url('https://www.google.com/recaptcha'))) . danielebarchiesi@2: '
' . danielebarchiesi@2: t('The settings associated with reCAPTCHA can be found in the reCAPTCHA tab, in the CAPTCHA settings. You must set your public and private reCAPTCHA keys in order to use the module. Once the public and private keys are set, visit the CAPTCHA settings, where you can choose where reCAPTCHA should be displayed.', array('@recaptchatab' => url('admin/user/captcha/recaptcha'), '@captchasettings' => url('admin/user/captcha'))) . danielebarchiesi@2: '
'; danielebarchiesi@2: break; danielebarchiesi@2: } danielebarchiesi@2: return $output; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: /** danielebarchiesi@2: * Implements hook_menu(). danielebarchiesi@2: */ danielebarchiesi@2: function recaptcha_menu() { danielebarchiesi@2: $items = array(); danielebarchiesi@2: $items['admin/config/people/captcha/recaptcha'] = array( danielebarchiesi@2: 'title' => 'reCAPTCHA', danielebarchiesi@2: 'description' => 'Administer the reCAPTCHA web service.', danielebarchiesi@2: 'page callback' => 'drupal_get_form', danielebarchiesi@2: 'page arguments' => array('recaptcha_admin_settings'), danielebarchiesi@2: 'access arguments' => array('administer recaptcha'), danielebarchiesi@2: 'type' => MENU_LOCAL_TASK, danielebarchiesi@2: 'file' => 'recaptcha.admin.inc', danielebarchiesi@2: ); danielebarchiesi@2: return $items; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: /** danielebarchiesi@2: * Implements hook_permission(). danielebarchiesi@2: */ danielebarchiesi@2: function recaptcha_permission() { danielebarchiesi@2: return array( danielebarchiesi@2: 'administer recaptcha' => array( danielebarchiesi@2: 'title' => t('reCaptcha Administration'), danielebarchiesi@2: 'description' => t('Administer reCaptcha settings'), danielebarchiesi@2: ), danielebarchiesi@2: ); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: /** danielebarchiesi@2: * Implements hook_captcha(). danielebarchiesi@2: */ danielebarchiesi@2: function recaptcha_captcha() { danielebarchiesi@2: $args = func_get_args(); danielebarchiesi@2: $op = array_shift($args); danielebarchiesi@2: switch ($op) { danielebarchiesi@2: case 'list': danielebarchiesi@2: return array('reCAPTCHA'); danielebarchiesi@2: danielebarchiesi@2: case 'generate': danielebarchiesi@2: $captcha_type = array_shift($args); danielebarchiesi@2: $captcha = array(); danielebarchiesi@2: if ($captcha_type == 'reCAPTCHA') { danielebarchiesi@2: // Retrieve configuration variables. danielebarchiesi@2: $recaptcha_theme = variable_get('recaptcha_theme', 'red'); danielebarchiesi@2: $recaptcha_tabindex = variable_get('recaptcha_tabindex', NULL); danielebarchiesi@2: $recaptcha_public_key = variable_get('recaptcha_public_key', FALSE); danielebarchiesi@2: $recaptcha_ajax_api = variable_get('recaptcha_ajax_api', FALSE); danielebarchiesi@2: danielebarchiesi@3: // Test if reCAPTCHA can be used, falling back to Math if it is not danielebarchiesi@3: // configured, the library won't load, or the server is down. danielebarchiesi@3: if (!$recaptcha_public_key || !_recaptcha_load_library() || !_recaptcha_test_recaptcha_server()) { danielebarchiesi@2: return captcha_captcha('generate', 'Math', $args); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: if ($recaptcha_ajax_api) { danielebarchiesi@2: // By default CAPTCHA turns off page caching on any page where a danielebarchiesi@2: // CAPTCHA challenge appears. If recaptcha is using AJAX API, set danielebarchiesi@2: // caching back to its old state as stored in DB. danielebarchiesi@2: global $conf; danielebarchiesi@2: $conf['cache'] = unserialize(db_query("SELECT value FROM {variable} WHERE name = 'cache'")->fetchField()); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: $recaptcha_options = array( danielebarchiesi@2: 'theme' => $recaptcha_theme, danielebarchiesi@2: ); danielebarchiesi@2: danielebarchiesi@2: // Localization support. danielebarchiesi@2: global $language; danielebarchiesi@2: if (isset($language->language)) { danielebarchiesi@2: // reCAPTCHA uses two-character language codes, so 'pt-br' must be danielebarchiesi@2: // passed as 'pt'; cf. https://developers.google.com/recaptcha/docs/customization#i18n danielebarchiesi@2: $recaptcha_options['lang'] = drupal_substr($language->language, 0, 2); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: // Construct the Javascript, but only display it once. danielebarchiesi@2: static $_recaptcha_jsadded = FALSE; danielebarchiesi@2: if ($_recaptcha_jsadded == FALSE && $recaptcha_ajax_api == FALSE) { danielebarchiesi@2: $_recaptcha_jsadded = TRUE; danielebarchiesi@2: danielebarchiesi@2: // Add support to display the custom theme. danielebarchiesi@2: if ($recaptcha_theme == 'custom') { danielebarchiesi@2: $recaptcha_options['custom_theme_widget'] = 'recaptcha_custom_theme_widget'; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: // Set the default tab index. danielebarchiesi@2: if (!empty($recaptcha_tabindex)) { danielebarchiesi@2: $recaptcha_options['tabindex'] = $recaptcha_tabindex; danielebarchiesi@2: } danielebarchiesi@2: drupal_add_js('var RecaptchaOptions = ' . drupal_json_encode($recaptcha_options) . ';', array('type' => 'inline')); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: // Create the form. Captcha requires TRUE to be returned in solution. danielebarchiesi@2: $captcha['solution'] = TRUE; danielebarchiesi@2: $captcha['captcha_validate'] = 'recaptcha_captcha_validation'; danielebarchiesi@2: danielebarchiesi@2: // If 'Disable Client-Side Cookies' is set, then add query string to danielebarchiesi@2: // end of the public key string before passing to recaptchalib. danielebarchiesi@2: if (variable_get('recaptcha_nocookies', FALSE)) { danielebarchiesi@2: $recaptcha_public_key .= '&nocookie=1'; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: $captcha['form']['captcha_response'] = array( danielebarchiesi@2: '#type' => 'hidden', danielebarchiesi@2: '#value' => 'reCAPTCHA', danielebarchiesi@2: ); danielebarchiesi@2: danielebarchiesi@2: // Expose the form, either straight HTML, or using the AJAX API. danielebarchiesi@3: // Build the custom theme HTML if necessary. danielebarchiesi@3: $recaptcha_custom_html = ($recaptcha_theme == 'custom') ? theme('recaptcha_custom_widget') : ''; danielebarchiesi@2: if ($recaptcha_ajax_api == FALSE) { danielebarchiesi@3: // Only generate recaptcha_get_html() if we're not using the AJAX API. danielebarchiesi@3: $html = recaptcha_get_html($recaptcha_public_key, NULL, TRUE); danielebarchiesi@2: $captcha['form']['captcha_form'] = array( danielebarchiesi@2: '#type' => 'item', danielebarchiesi@3: '#markup' => (!empty($recaptcha_custom_html) ? '