Fix for Multipage User Registration

  1. <?php
  2. /**
  3. *       The purpose of this module is to take the user-registration form and make it
  4. *       multipage, where the pages change depending on the options selected during
  5. *       the last step. Needs to integrate with either content profiles or the default
  6. *   user profiles.
  7. */
  8.  
  9. function multipage_register_help($path, $arg){
  10.         $output = '';
  11.         switch($path){
  12.                 case "admin/help/#multipage_register";
  13.                         $output = '<p>'.t("Enables Multipage Register.");
  14.         }
  15. }
  16.  
  17.  
  18. function multipage_register_perm(){
  19.         return array('access multipage register form', 'administer multipage form');
  20. }
  21.  
  22.  
  23. function multipage_register_menu(){
  24.         $items = array();
  25.        
  26.         $items['admin/advanced_roles/settings'] = array(
  27.                 'title' => 'Multipage Form Settings',
  28.                 'page callback' => 'drupal_get_form',
  29.                 'page arguments' => array('multipage_register_settings_form'),
  30.                 'description' => 'Administer the Multipage Form settings.',
  31.                 'access arguments' => array('administer multipage form'),
  32.         );
  33.        
  34.         $items['add/user'] = array(
  35.                 'title' => 'Create a new user',
  36.                 'page callback' => 'drupal_get_form',
  37.                 'page arguments' => array('multipage_register_user_form'),
  38.                 'description' => 'Add a new user via multipage',
  39.                 'access arguments' => array('access multipage register form'),
  40.         );
  41.         return $items;
  42. }
  43.  
  44. function multipage_register_settings_form(){
  45.         $form = array();
  46.         //Settings here.
  47. }
  48.  
  49. function multipage_register_user_form($form_state){
  50.         //check if we've set next step
  51.         if(!empty($form_state['storage']['step'])){
  52.                 $function = $form_state['storage']['step'];
  53.                 return $function($form_state);
  54.         }
  55.         else{
  56.                 return _multipage_register_user_form_start();
  57.         }
  58. }
  59.  
  60. /**
  61. *       Step 1 (START)
  62. */
  63. function _multipage_register_user_form_start(){
  64.         $form['name'] = array(
  65.                 '#type' => 'textfield',
  66.                 '#title' => t('Name'),
  67.                 '#required' => TRUE,
  68.         );
  69.         $form['mail'] = array(
  70.                 '#type' => 'textfield',
  71.                 '#title' => t('Email'),
  72.                 '#required' => TRUE,
  73.         );
  74.         $form['mail_confirm'] = array(
  75.                 '#type' => 'textfield',
  76.                 '#title' => t('Email (confirm)'),
  77.                 '#required' => TRUE,
  78.         );
  79.         $form['continue'] = array(
  80.                 '#type' => 'submit',
  81.                 '#value' => 'Continue',
  82.         );
  83.         //Special value elements
  84.         $form['this_step'] = array(
  85.                 '#type' => 'value',
  86.                 '#value' => 'start',
  87.         );
  88.         $form['step_next'] = array(
  89.                 '#type' => 'value',
  90.                 '#value' => '_multipage_register_user_form_step2',
  91.         );
  92.         return $form;
  93. }
  94.  
  95. /**
  96. *       Step 2 (Is Dealer or Employee?)
  97. */
  98. function _multipage_register_user_form_step2(){
  99.         $form['employee'] = array(
  100.                 '#type' => 'radios',
  101.                 '#title' => t('Is this user an Employee?'),
  102.                 '#required' => TRUE,
  103.                 '#options' => array(
  104.                                                 0 => 'No',
  105.                                             1 => 'Yes',
  106.                                           ),
  107.         );
  108.         $form['dealer'] = array(
  109.                 '#type' => 'select',
  110.                 '#title' => t('Is this user a Dealer Admin or Dealer Tech?'),
  111.                 '#required' => TRUE,
  112.                 '#options' => array(
  113.                                                 0 => 'No',
  114.                                                 1 => 'Yes',
  115.                                           ),
  116.         );
  117.         $form['continue'] = array(
  118.                 '#type' => 'submit',
  119.                 '#value' => 'Continue'
  120.         );
  121.         //Special value elements
  122.         $form['this_step'] = array(
  123.                 '#type' => 'value',
  124.                 '#value' => 'step2'
  125.         );
  126.         $form['step_submit'] = array(
  127.                 '#type' => 'value',
  128.                 '#value' => '_multipage_register_user_form_special_submit',
  129.         );
  130.         return $form;
  131. }
  132. /**
  133. *       Step 3 (Dealer version)
  134. */
  135. function _multipage_register_user_form_dealer($form_state){
  136.         $form['department'] = array(
  137.                 '#type' => 'textfield',
  138.                 '#title' => t('Company'),
  139.                 '#required' => FALSE,
  140.         );
  141.         $form['this_step'] = array(
  142.                 '#type' => 'value',
  143.                 '#value' => 'step3'
  144.         );
  145.         $form['step_submit'] = array(
  146.                 '#type' => 'value',
  147.                 '#value' => '_multipage_register_form_submit',
  148.         );
  149. }
  150. /**
  151. *       Step 3 (Employee version)
  152. */
  153. function _multipage_register_user_form_employee($form_state){
  154.         $form['department'] = array(
  155.                 '#type' => 'textfield',
  156.                 '#title' => t('Department'),
  157.                 '#required' => FALSE,
  158.         );
  159.         $form['this_step'] = array(
  160.                 '#type' => 'value',
  161.                 '#value' => 'step3'
  162.         );
  163.         $form['step_submit'] = array(
  164.                 '#type' => 'value',
  165.                 '#value' => '_multipage_register_form_submit',
  166.         );
  167. }
  168.  
  169. /*
  170. * Custom Submit Handler
  171. */
  172. function _multipage_register_user_form_special_submit($form, &$form_state){
  173.         if($form_state['values']['employee'] == 1){
  174.                 $form_state['values']['step_next'] = '_multipage_register_user_form_employee';
  175.         }
  176.         elseif($form_state['values']['dealer'] == 1){
  177.                 $form_state['values']['step_next'] = '_multipage_register_user_form_dealer';
  178.         }
  179. }
  180. /*
  181. * Main Submit handler
  182. */
  183. function multipage_register_form_submit($form, &$form_state){
  184.         if(empty($form_state['storage'])){
  185.                 $form_state['storage'] = array();
  186.                 $form_state['storage']['values'] = array();
  187.         }
  188.         //Call user-defined submit function
  189.         if (!empty($form_state['values']['step_submit'])) {
  190.         $function = $form_state['values']['step_submit'];
  191.         $function($form, $form_state);
  192.         }
  193.         //Store submitted form values. Must happen after the call to user-defined submit to allow modifying.
  194.         $this_step = $form_state['values']['this_step'];
  195.         $form_state['storage']['values'][$this_step] = $form_state['values'];
  196.         //Set up next step.
  197.         if(!empty($form_state['values']['step_next'])){
  198.                 $form_state['storage']['step'] = $form_state['values']['step_next'];
  199.         }
  200.         else{
  201.                 //Form Complete!!!
  202.                 $values = $form_state['storage']['values'];
  203.                 //Do something with $values
  204.                 //Set $form['#redirect'] to not return to the first step.
  205.                 drupal_set_message(t('Complete! !values', array('!values' => print_r($values, TRUE))));
  206.         }
  207. }
  208. /*
  209. * Form Validation Controller
  210. */
  211.  
  212. function multipage_register_form_validate($form, &$form_state){
  213.         if(!empty($form_state['values']['step_validate'])){
  214.                 $function = $form_state['values']['step_validate'];
  215.                 $function($form, $form_state);
  216.         }
  217. }

Submit Fix

Any tags you'd like to associate with your code, delimitered by commas (example: Views, CCK, Module, etc).
Select the syntax highlighting mode to use.