<?php
/**
* The purpose of this module is to take the user-registration form and make it
* multipage, where the pages change depending on the options selected during
* the last step. Needs to integrate with either content profiles or the default
* user profiles.
*/
function multipage_register_help($path, $arg){
$output = '';
switch($path){
case "admin/help/#multipage_register";
$output = '<p>'.t("Enables Multipage Register.");
}
}
function multipage_register_perm(){
return array('access multipage register form', 'administer multipage form');
}
function multipage_register_menu(){
$items = array();
$items['admin/advanced_roles/settings'] = array(
'title' => 'Multipage Form Settings',
'page callback' => 'drupal_get_form',
'page arguments' => array('multipage_register_settings_form'),
'description' => 'Administer the Multipage Form settings.',
'access arguments' => array('administer multipage form'),
);
$items['add/user'] = array(
'title' => 'Create a new user',
'page callback' => 'drupal_get_form',
'page arguments' => array('multipage_register_user_form'),
'description' => 'Add a new user via multipage',
'access arguments' => array('access multipage register form'),
);
return $items;
}
function multipage_register_settings_form(){
$form = array();
//Settings here.
}
function multipage_register_user_form($form_state){
//check if we've set next step
if(!empty($form_state['storage']['step'])){
$function = $form_state['storage']['step'];
return $function($form_state);
}
else{
return _multipage_register_user_form_start();
}
}
/**
* Step 1 (START)
*/
function _multipage_register_user_form_start(){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#required' => TRUE,
);
$form['mail'] = array(
'#type' => 'textfield',
'#title' => t('Email'),
'#required' => TRUE,
);
$form['mail_confirm'] = array(
'#type' => 'textfield',
'#title' => t('Email (confirm)'),
'#required' => TRUE,
);
$form['continue'] = array(
'#type' => 'submit',
'#value' => 'Continue',
);
//Special value elements
$form['this_step'] = array(
'#type' => 'value',
'#value' => 'start',
);
$form['step_next'] = array(
'#type' => 'value',
'#value' => '_multipage_register_user_form_step2',
);
return $form;
}
/**
* Step 2 (Is Dealer or Employee?)
*/
function _multipage_register_user_form_step2(){
$form['employee'] = array(
'#type' => 'radios',
'#title' => t('Is this user an Employee?'),
'#required' => TRUE,
'#options' => array(
0 => 'No',
1 => 'Yes',
),
);
$form['dealer'] = array(
'#type' => 'select',
'#title' => t('Is this user a Dealer Admin or Dealer Tech?'),
'#required' => TRUE,
'#options' => array(
0 => 'No',
1 => 'Yes',
),
);
$form['continue'] = array(
'#type' => 'submit',
'#value' => 'Continue'
);
//Special value elements
$form['this_step'] = array(
'#type' => 'value',
'#value' => 'step2'
);
$form['step_submit'] = array(
'#type' => 'value',
'#value' => '_multipage_register_user_form_special_submit',
);
return $form;
}
/**
* Step 3 (Dealer version)
*/
function _multipage_register_user_form_dealer($form_state){
$form['department'] = array(
'#type' => 'textfield',
'#title' => t('Company'),
'#required' => FALSE,
);
$form['this_step'] = array(
'#type' => 'value',
'#value' => 'step3'
);
$form['step_submit'] = array(
'#type' => 'value',
'#value' => '_multipage_register_form_submit',
);
}
/**
* Step 3 (Employee version)
*/
function _multipage_register_user_form_employee($form_state){
$form['department'] = array(
'#type' => 'textfield',
'#title' => t('Department'),
'#required' => FALSE,
);
$form['this_step'] = array(
'#type' => 'value',
'#value' => 'step3'
);
$form['step_submit'] = array(
'#type' => 'value',
'#value' => '_multipage_register_form_submit',
);
}
/*
* Custom Submit Handler
*/
function _multipage_register_user_form_special_submit($form, &$form_state){
if($form_state['values']['employee'] == 1){
$form_state['values']['step_next'] = '_multipage_register_user_form_employee';
}
elseif($form_state['values']['dealer'] == 1){
$form_state['values']['step_next'] = '_multipage_register_user_form_dealer';
}
}
/*
* Main Submit handler
*/
function multipage_register_form_submit($form, &$form_state){
if(empty($form_state['storage'])){
$form_state['storage'] = array();
$form_state['storage']['values'] = array();
}
//Call user-defined submit function
if (!empty($form_state['values']['step_submit'])) {
$function = $form_state['values']['step_submit'];
$function($form, $form_state);
}
//Store submitted form values. Must happen after the call to user-defined submit to allow modifying.
$this_step = $form_state['values']['this_step'];
$form_state['storage']['values'][$this_step] = $form_state['values'];
//Set up next step.
if(!empty($form_state['values']['step_next'])){
$form_state['storage']['step'] = $form_state['values']['step_next'];
}
else{
//Form Complete!!!
$values = $form_state['storage']['values'];
//Do something with $values
//Set $form['#redirect'] to not return to the first step.
drupal_set_message(t('Complete! !values', array('!values' => print_r($values, TRUE))));
}
}
/*
* Form Validation Controller
*/
function multipage_register_form_validate($form, &$form_state){
if(!empty($form_state['values']['step_validate'])){
$function = $form_state['values']['step_validate'];
$function($form, $form_state);
}
}