Fix for Fix for putting user values back into a form

  1. /* two page form.
  2. page 1 collects data; page 2 presents stuff done with it and allows to go back page 1.
  3.  
  4. function module_builder_page($form_state) {
  5.   $step = 'input';
  6.   if (isset($form_state['clicked_button'])) {
  7.      $step = $form_state['clicked_button']['#name'];
  8.   }  
  9.   #dsm($step);
  10.   switch ($step) {
  11.     case 'input':    
  12.     case 'back':    
  13.       $form = module_builder_page_input($form_state);
  14.       break;
  15.     case 'generate':
  16.       $form = module_builder_page_generate($form_state);
  17.       break;
  18.     case 'download':
  19.       $form = module_builder_page_download($form_state);
  20.       break;
  21.   }  
  22.  
  23.   return $form;
  24. }
  25.  
  26.  
  27. // build page 1
  28. function module_builder_page_input($form_state) {
  29.   // built some default values.
  30.   // these are either hardcoded or what the user already put into the form on a previous go round.
  31.   $form_default_values = array(
  32.     'module_root_name' => 'mymodule',
  33.   );
  34.   $form_default_values += (array)$form_state['storage']['input'];
  35. // IS THERE A BETTER WAY TO DO THIS?
  36.  
  37.   $form['module_root_name'] = array(
  38.     '#type' => 'textfield',
  39.     '#title' => t('Machine-readable name'),
  40.     '#description' => t('This string is used to name the module files and to prefix all of your functions. This must only contain letters, numbers, and underscores, and may not start with a number.'),
  41.     '#required' => TRUE,
  42.     '#default_value' => $form_default_values['module_root_name'],
  43.   );
  44.   $form['generate_module'] = array(
  45.     '#type' => 'submit',
  46.     '#name' => 'generate',
  47.     '#value' => t('Generate'),
  48.   );
  49.   $form['#submit'] = array('module_builder_page_input_submit');
  50.  
  51.   return $form;
  52. }
  53.  
  54. // submit page 1
  55. function module_builder_page_input_submit($form, &$form_state) {
  56.   // stash input.... these values will follow us around everywhere like a little dog...
  57.   $form_state['storage']['input'] = $form_state['values'];
  58.   foreach (array('generate', 'generate_module', 'form_build_id', 'form_token', 'form_id') as $key) {
  59.     unset($form_state['storage']['input'][$key]);
  60.   }
  61. }
  62.  
  63. function module_builder_page_generate($form_state) {
  64.   $form['back'] = array(
  65.     '#type' => 'submit',
  66.     '#value' => t('Back'),
  67.     '#name' => 'back',
  68.   );
  69.   $form['module_code'] = array(
  70.     '#type' => 'textarea',
  71.     '#title' => t('Module code'),
  72.     '#rows' => 20,
  73.     '#default_value' => 'code!',
  74.     '#prefix' => '<div id="module-code">',
  75.     '#suffix' => '</div>',
  76.   );
  77.   return $form;
  78. }

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.