Can't get form to display in module

mediumgrade - August 17, 2007 - 00:24

I am trying to develop a simple module for taking information from a form, then emailing it to a specified address. I was able to get the module to show under the admin section and it displays the link in the menu, but when I try to access the form, the page simply says "Array'.

What am I doing wrong?

<?php
// $Id$

/**
* @file

* Additional notes
*
*
*
*/

function voicet1quote_menu($may_cache) {
 
 
$access = user_access('request quote');
 
   
$items[] = array(
     
'path' => 'products/telecommunications/requestvoicet1quote',
     
'title' => t('Request Voice T1 Quote'),
     
'callback' => voicet1quote_form,
     
'access' => TRUE
   
);

return
$items;

}


function
voicet1quote_form() {

 
$form = array();

 
$circuitoptions = array('t' => t('T1'), 'p' => t('PRI'), 'a' => t('Analog'), 'u' => t('Unknown'));
 
 
$form['contact'] = array(
 
'#type' => 'fieldset',
 
'#title' => t('Contact and Site Information'),
 
'#tree' => TRUE,
  );

 
$form['contact']['name'] = array(
 
'#type' => 'textfield',
 
'#size' => 24,
 
'#title' => t('Name'),
  );

 
$form['contact']['email'] = array(
 
'#type' => 'textfield',
 
'#size' => 128,
 
'#title' => t('Email Address'),
  );
 
 
$form['contact']['address1'] = array(
 
'#type' => 'textfield',
 
'#size' => 128,
 
'#title' => t('Address 1'),
  );
 
 
$form['contact']['address2'] = array(
 
'#type' => 'textfield',
 
'#size' => 32,
 
'#title' => t('Address 2'),
  );
 
 
$form['contact']['city'] = array(
 
'#type' => 'textfield',
 
'#size' => 32,
 
'#title' => t('City'),
  );
 
 
$form['contact']['state'] = array(
 
'#type' => 'textfield',
 
'#size' => 2,
 
'#title' => t('State'),
  );
 
 
$form['contact']['zip'] = array(
 
'#type' => 'textfield',
 
'#size' => 16,
 
'#title' => t('Zip'),
  );
 
 
$form['quote'] = array(
 
'#type' => 'fieldset',
 
'#title' => t('Quote Information'),
 
'#tree' => TRUE,
  );
 
 
$form['quote']['lines'] = array(
 
'#type' => 'textfield',
 
'#size' => 3,
 
'#title' => t('Number of Lines Needed'),
  );
 
 
$form['quote']['circuitoptions'] = array(
 
'#type' => 'radios',
 
'#title' => t('Type of Lines Needed'),
 
'#default_value' =>  variable_get('circuitoptions', 't'),
 
'#options' => $circuitoptions,
  );
 
 
$form['quote']['dlongdistance'] = array(
 
'#type' => 'checkbox',
 
'#title' => t('We have domestic long distance needs'),
 
'#default_value' => variable_get('dlongdistance', 0),
  );
 
 
$form['quote']['ilongdistance'] = array(
 
'#type' => 'checkbox',
 
'#title' => t('We have international long distance needs'),
 
'#default_value' => variable_get('ilongdistance', 0),
  );
 
 
$form['quote']['existing'] = array(
 
'#type' => 'checkbox',
 
'#title' => t('We have existing service through another provider'),
 
'#default_value' => variable_get('existing', 0),
  );
 
 
$form['quote']['pname'] = array(
 
'#type' => 'textfield',
 
'#size' => 32,
 
'#title' => t('Provider Name'),
  );
 
 
$form['quote']['payment'] = array(
 
'#type' => 'textfield',
 
'#size' => 32,
 
'#title' => t('Estimated Monthly Payment'),
  );
 
 
$form['quote']['details'] = array(
 
'#type' => 'textarea',
 
'#title' => t('Additional Details'),
 
'#cols' => 60,
 
'#rows' => 8,
  );

 
$form['submit'] = array('#type' => 'submit', '#value' => t('Request Quote'));

  return
drupal_get_form('voicet1quote_form', $form);
}


function
voicet1quote_form_validate($form_id, $form_values) {

  if ( !isset(
$form_values['contact']['name']) ) {
   
form_set_error('name', t('Please specify your name.'));
  }
  
  if ( !isset(
$form_values['contact']['email']) ) {
   
form_set_error('email', t('Please specify your email address.'));
  }

  if ( !isset(
$form_values['contact']['address1']) ) {
   
form_set_error('address1', t('Please specify your mailing address.'));
  }

  if ( !isset(
$form_values['contact']['city']) ) {
   
form_set_error('city', t('Please specify your city.'));
  }

  if ( !isset(
$form_values['contact']['state']) ) {
   
form_set_error('state', t('Please specify your state.'));
  }

  if ( !isset(
$form_values['quote']['existing']) ) {
    if ( !isset(
$form_values['quote']['pname']) ) {
     
form_set_error('pname', t('Please specify the existing provider name.'));
    }
    else if ( !
is_numeric($form_values['quote']['payment']) ) {
     
form_set_error('payment', t('Monthly payment must be inn numeric form.'));
    }
  }

  if ( !isset(
$form_values['quote']['existing']) ) {
   
form_set_error('zip', t('Please specify your zip code.'));
  }

  if ( !isset(
$form_values['quote']['lines']) ) {
   
form_set_error('lines', t('Please specify the number of lines you need.'));
  }

  else if ( !
is_numeric($form_values['quote']['lines']) ) {
       
form_set_error('lines', t('The number of lines must be in numeric form.'));
  }

}

function
voicet1quote_form_submit($form_id, $form_values) { 
 
//SEND OUT EMAIL------------------------------------------------------------------------------------------------
 
 
$output  = 'products/telecommunications/requestvoicet1quote/results/';
 
  return
$output;

}

function
voicet1quotesubmit() {

 
$output = "Your quote has been submitted.";
 
  return
$output;

}

   
?>

bug in your code..

panis - August 17, 2007 - 08:21

change the menu code to:

    $items[] = array(
      'path' => 'products/telecommunications/requestvoicet1quote',
      'title' => t('Request Voice T1 Quote'),
      'callback' => drupal_get_form,
      'callback arguments' => array('voicet1quote_form'),
      'access' => TRUE
    );

And replace the last line of your form function voicet1quote_form() with

return $form;

instead of

return drupal_get_form(...)

You cannot easily combine the form definition and rendering as you have done in a single function.

That's it! Thanks!

mediumgrade - August 17, 2007 - 21:59

That's it! Thanks!

 
 

Drupal is a registered trademark of Dries Buytaert.