Drupal 7 Captcha em todos os formulários da web ou por tipo de conteúdo

9

Eu estou no D7.

Eu tenho um tipo de conteúdo habilitado para webform.

Requisito Eu preciso implementar o captcha para todos os formulários da web para nós desse tipo de conteúdo.

Problema No D7, você deve fornecer o form_id na página de configurações para obter o captcha no formulário, no entanto, terei vários formulários com todos os diferentes form_ids.

Estou usando o módulo Captcha .

Existe alguma maneira de implementar minha exigência?

SGhosh
fonte

Respostas:

9

Você pode adicionar o seguinte código ao seu template.php

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

isso deve ser colocado dentro do yourthemename_form_alter

Mohammed Shameem
fonte
Obrigado. Acabei de obter esta solução, funcionei, voltei para responder minha própria pergunta e vi que você já tinha. :) Obrigado pela ajuda, no entanto.
precisa saber é o seguinte
Para que seu código personalizado respeite as permissões definidas para as pessoas que podem ignorar CAPTCHA, adicione o seguinte à sua lógica: if ((strstr ($ form_id, 'webform_client_form')) &&! (User_access ('skip CAPTCHA'))) {$ form ['my_captcha_element'] = array ('#type' => 'captcha', '#captcha_type' => 'padrão'); }
kbrinner 17/04/2015
1

Como alternativa, você pode colocar esse código em um módulo personalizado:

/**
* 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',
    );
  }
}

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

Antonello
fonte
0

Para que seu código personalizado respeite as permissões definidas em admin / pessoas / permissões para as pessoas que podem ignorar o CAPTCHA, adicione o seguinte à sua lógica:

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