Drupal 7 Captcha во всех веб-формах или в зависимости от типа контента

9

Я на D7.

У меня есть тип контента с поддержкой веб-формы.

Требование Мне нужно реализовать капчу для всех веб-форм для узлов этого типа контента.

Проблема В D7 вы должны указать form_id на странице настроек, чтобы получить капчу в форме, однако у меня будет множество форм со всеми различными form_ids.

Я использую модуль Captcha .

Есть ли способ выполнить мое требование?

SGhosh
источник

Ответы:

9

Вы можете добавить следующий код в ваш template.php

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

это должно быть помещено в yourthemename_form_alter

Мохаммед Шамим
источник
Спасибо. Я только что получил это решение, заставил его работать, вернулся, чтобы ответить на мой собственный вопрос и увидел, что у вас уже есть. :) Спасибо за помощь, тем не менее.
SGhosh
Чтобы ваш пользовательский код соответствовал установленным разрешениям для тех, кто может пропустить CAPTCHA, добавьте в свою логику следующее: if ((strstr ($ form_id, 'webform_client_form')) &&! (User_access ('skip CAPTCHA')))) {$ form ['my_captcha_element'] = array ('#type' => 'captcha', '#captcha_type' => 'default',); }
kbrinner
1

В качестве альтернативы вы можете поместить этот код в пользовательский модуль:

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

Источник: https://drupal.org/node/255795

Антонелло
источник
0

Чтобы ваш пользовательский код соответствовал разрешениям, установленным в admin / people / permissions для тех людей, которые могут пропустить CAPTCHA, добавьте в свою логику следующее:

if ((strstr($form_id, 'webform_client_form')) && !(user_access('skip CAPTCHA'))) {
    $form['my_captcha_element'] = array(
      '#type' => 'captcha',
      '#captcha_type' => 'default',
    );
  }
kbrinner
источник