AnswerBun.com

Form and gated content

Drupal Answers Asked by DataGuy on November 17, 2021

UPDATED from earlier:

I am using a simple Drupal form that collect user info before allowing the user access to donwloadable content. NOTE: This is using the form API and I am no longer using a modal; just using a regular page created by a hook. Here is the scenario:

<?php

function my_form_menu() {
  $items = array();

  $items['form/userinfo'] = array( //this creates a URL that will call this form 
    'title' => 'Download Form', //page title
    'description' => 'A form that gathers user infomation',
    'page callback' => 'drupal_get_form', //this is the function that will be called w           hen the page is accessed.  for a form, use drupal_get_form
    'page arguments' => array('my_form'), //name of the form
   'access callback' => TRUE
 );

 return $items;
}

function my_form() {
 if (!empty($_COOKIE['Drupal_visitor_downloadbypass'])) {
 drupal_goto('this is where the pdf file will go'); // rest of the page will not execute because drupal_goto ends the request. 
}
 $form['name']['first'] = array(
'#type' => 'textfield',
'#title' => t('First name'),
 '#required' => TRUE,
 );
$form['name']['last'] = array(
'#type' => 'textfield',
'#title' => t('Last name'),
 '#required' => TRUE,
 );
$form['name']['title'] = array(
'#type' => 'textfield',
'#title' => t('title'),
 '#required' => TRUE,
 );

 $form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',

 );

 return $form;
 }
   function my_form_submit($form, &$form_state) {
 // $form_state['values']['example'] contains the submitted value of 'example' element. 
 user_cookie_save(array('downloadbypass' => 1));
  $form_state['redirect'] = 'this is where the pdf file will go';
  }

So here is my question: Now my form page is not showing up and I didnt change the hook except for the form name argument. The form will need to redirect back to the previous page and open the file in a new window upon submission.

Thanks!

phi

One Answer

You didn't mention whether you are using ctools modal forms or a custom modal form.

For general form API submissions, the submit handler will only be executed when the form validation has passed, including the regular CSRF checks.

Suppose you have a form like this:

<?php
function my_form() {
  if (!empty($_COOKIE['Drupal_visitor_downloadbypass'])) {
    drupal_goto('download/able/file.here'); // rest of the page will not execute because drupal_goto ends the request. 
  }
  $form['example'] = ...;// your form building goes here
  ..
  ..

  return $form;
}

function my_form_submit($form, &$form_state) {
  // $form_state['values']['example'] contains the submitted value of 'example' element. 
  user_cookie_save(array('downloadbypass' => 1));
  $form_state['redirect'] = 'download/able/file.here';
}

If you are using a ctools modals, you can check the $form_state in your ctools form builder to do the same cookie check and redirect above.

Your ctools form builder can be as follows. Note the $form_state check.

<?php
function my_ctools_form_wrapper($js = NULL) {
  ctools_include('ajax');
  ctools_include('modal');
  $form_state = array(
    'ajax' => TRUE,
    'title' => t('My Ajax Form'),
  );

  $output = ctools_modal_form_wrapper('my_form', $form_state);

  if (!empty($form_state['executed'])) { // is the form submitted ?

    // Add the responder javascript, required by ctools
    ctools_add_js('ajax-responder');

    // Create ajax command array, dismiss the modal window.
    $output = array();
    $output[] = ctools_modal_command_dismiss();
    $output[] = ctools_ajax_command_reload();
  }

  print ajax_render($output);
  exit();
}

Answered by AKS on November 17, 2021

Add your own answers!

Related Questions

Social Media Embed Problems With the URL Embed module

0  Asked on November 30, 2021 by mckinzie25

 

Contextual links for node blocks

3  Asked on November 28, 2021

   

Set node to flagged by default

1  Asked on November 28, 2021 by andrew-morris

     

How do I replace drush_set_error()?

1  Asked on November 28, 2021

   

Get file ID and path to use in View template

1  Asked on November 25, 2021 by srodrig

         

How to use drupal_add_library with a module?

2  Asked on November 25, 2021

   

Ajax Form Not Working in some Some Regions

2  Asked on November 23, 2021 by sandesh-yadav

     

Facebook Album fetcher

1  Asked on November 23, 2021 by rajat-goyal

 

Condition on current moderation state

2  Asked on November 23, 2021 by paul-cappucci

   

how to apply a css code for a specific screen size

1  Asked on November 23, 2021 by coding-mv

 

hook_entity_predelete never called

0  Asked on November 23, 2021

   

User reference and Views 3 and Panels 3

1  Asked on November 21, 2021

     

MetaTag with JSON API won’t serialize

2  Asked on November 21, 2021 by johnventions

   

How to disable Rich Text Editor in image field caption ?

1  Asked on November 19, 2021 by lee-woodman

   

search block form not accepting special characters in drupal 7

1  Asked on November 19, 2021 by blueztechz

   

Unknown engine type outputformat

1  Asked on November 19, 2021 by gilles9999

     

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP