[development] How to interrupt/redirect Search submit to auth/validate (via Captcha) *BEFORE* actual submit to search engine & display of results?
Anth
malkouna at yahoo.com.au
Mon May 17 00:38:13 UTC 2010
Just to further what Lee has said, look into what the module does out of
the box, but I suspect that you're going to need to manage your form
states on your own. Effectively what you're doing is a multistep form
and I found the two documents helpful:
10. Multistep form - http://drupal.org/node/717750
Display a confirmation message before processing a form -
http://drupal.org/node/470834
Basically I think the switch you'll need is to create yourself a session
variable (e.g. $_SESSION['captcha_attempts']) and chose to load various
other forms based on that.
HTH.
Anthony.
On 6:59 AM, Lee Rowlands wrote:
> Hi Ben
> I think captcha can be configured to run on any form, add mollom to the
> mix and you get some advanced intelligence as to when you want the captcha
> to be shown.
>
> That said you should have a look at hook_form_alter
> http://api.lullabot.com/hook_form_alter
> You want to target when the form_id argument equals 'search_box_form'
> You can add your handlers (submit/validation) to the form processing using
>
> $form['#submit'] and $form['#validate'], the $form arg is passed by
> reference.
> Both of these are arrays, you should test that they exist first eg
> if (is_array($form['#submit']) {
> array_unshift($form['#submit'], 'name_of_your_handler');
> }
> else {
> $form['#submit'] = array('name_of_your_handler');
> }
> If you use array_unshift, your handlers will run first.
> You can then do form_state['redirect'] = 'your path' if needs be.
> You can also add the captcha elements directly to the form if no session
> var has been set
> Ie in hook_form_alter, check the form_id is the search form, if it is and
> there is no session var (tracking they've satisfied the captcha) then you
> can add the captcha elements directly to the $form var (and your
> submit/validate handlers). In your validate handler, test the captcha was
> satisfied and then in your submit handler, set the session variable so the
> next time the form is built, your form_alter hook doesn't add the captcha
> again.
> Hope this makes sense.
> Lee
More information about the development
mailing list