web-dev-qa-db-fra.com

Drupal 7 Captcha dans tous les formulaires Web ou par formulaires Web de type de contenu

Je suis sur D7.

J'ai un type de contenu qui est activé par formulaire Web.

Exigence J'ai besoin d'implémenter captcha pour tous les formulaires Web pour les nœuds de ce type de contenu.

Problème Dans D7, vous êtes censé donner le form_id dans la page des paramètres pour obtenir le captcha dans le formulaire, mais j'aurai beaucoup de formulaires avec tous différents form_ids.

J'utilise le module Captcha .

Existe-t-il un moyen de mettre en œuvre mon exigence?

9
SGhosh

Vous pouvez ajouter le code suivant à votre template.php

if (strstr($form_id, 'webform_client_form')) {
        $form['my_captcha_element'] = array(
            '#type' => 'captcha',
            '#captcha_type' => 'image_captcha/Image',
        );
    }

cela devrait être placé à l'intérieur du yourthemename_form_alter

9
Mohammed Shameem

Alternativement, vous pouvez mettre ce code dans un module personnalisé:

/**
* Implementation of hook_form_alter().
*/
function mymodule_form_alter(&$form, $form_state, $form_id) {
  if (preg_match("/^webform_client_form_[0-9]+$/",$form_id) && user_is_logged_in() == FALSE) {
    $form['my_captcha_element'] = array(
      '#type' => 'captcha',
    );
  }
}

Source: https://drupal.org/node/255795

1
Antonello

Pour que votre code personnalisé respecte les autorisations définies dans admin/people/permissions pour les personnes qui peuvent ignorer CAPTCHA, ajoutez ce qui suit à votre logique:

if ((strstr($form_id, 'webform_client_form')) && !(user_access('skip CAPTCHA'))) {
    $form['my_captcha_element'] = array(
      '#type' => 'captcha',
      '#captcha_type' => 'default',
    );
  }
0
kbrinner