Drupal 7 Captcha en todos los formularios web o por tipo de contenido.

9

Estoy en D7.

Tengo un tipo de contenido que está habilitado para formularios web.

Requisito Necesito implementar captcha para todos los formularios web para nodos de este tipo de contenido.

Problema En D7, se supone que debe dar el form_id en la página de configuración para obtener captcha en el formulario, sin embargo, tendré un montón de formularios con todos los diferentes form_ids.

Estoy usando el módulo Captcha .

¿Hay alguna forma de implementar mi requisito?

SGhosh
fuente

Respuestas:

9

Puede agregar el siguiente código a su template.php

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

esto debe colocarse dentro de yourthemename_form_alter

Mohammed Shameem
fuente
Gracias. Acabo de recibir esta solución, la puse a funcionar, volví a responder mi propia pregunta y vi que ya la tenía. :) Gracias por la ayuda, no obstante.
SGhosh
Para que su código personalizado respete los permisos establecidos para aquellas personas que pueden omitir CAPTCHA, agregue lo siguiente a su lógica: if ((strstr ($ form_id, 'webform_client_form')) &&! (User_access ('skip CAPTCHA'))) {$ form ['my_captcha_element'] = array ('#type' => 'captcha', '#captcha_type' => 'default',); }
kbrinner
1

Alternativamente, puede poner este código en un 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',
    );
  }
}

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

Antonello
fuente
0

Para que su código personalizado respete los permisos establecidos en admin / people / permissions para aquellas personas que pueden omitir CAPTCHA, agregue lo siguiente a su lógica:

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