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

9

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 les différents form_ids.

J'utilise le module Captcha .

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

SGhosh
la source

Réponses:

9

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

Mohammed Shameem
la source
Merci. Je viens de recevoir cette solution, de la faire fonctionner, je suis revenu pour répondre à ma propre question et j'ai vu que vous l'aviez déjà. :) Merci pour l'aide quand même.
SGhosh
Pour que votre code personnalisé respecte les autorisations définies pour les personnes qui peuvent ignorer CAPTCHA, ajoutez les éléments suivants à votre logique: if ((strstr ($ form_id, 'webform_client_form')) &&! (User_access ('skip CAPTCHA'))) {$ form ['my_captcha_element'] = array ('#type' => 'captcha', '#captcha_type' => 'default',); }
kbrinner
1

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

Antonello
la source
0

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',
    );
  }
kbrinner
la source