Implementation of travel form

This commit is contained in:
2014-02-25 13:44:13 +11:00
parent b710954bdd
commit b833125db8
9 changed files with 219 additions and 164 deletions

View File

@@ -77,31 +77,38 @@ function travel_form($node, &$form_state, $inserting = FALSE, $nid = 0)
$booking_dietary = '';
$booking_medical_conditions = '';
$booking_bf_gf = '';
$booking_bf_gf_nid = '';
if (!empty($node))
{
$data = $node;
watchdog('booking', 'Travel form loading data from saved node: @info', array('@info' => var_export($node, TRUE)));
//watchdog('booking', 'Travel form loading data from saved node: @info', array('@info' => var_export($node, TRUE)));
//check for existing booking_person data to use in the form
$person = db_query("SELECT booking_dietary, booking_medical_conditions, booking_bf_gf_nid, booking_partner_id " .
"FROM {booking_person} " .
"WHERE nid = :nid ",
array(':nid' => $data->booking_person_nid))
->fetchObject();
}
else
{
$data = $form_state['input'];
//check for existing booking_person data to use in the form
$person = db_query("SELECT booking_dietary, booking_medical_conditions, booking_bf_gf, booking_partner_id " .
$person = db_query("SELECT booking_dietary, booking_medical_conditions, booking_bf_gf_nid, booking_partner_id " .
"FROM {booking_person} " .
"WHERE nid = :nid ",
array(':nid' => $nid))
->fetchObject();
if ($person)
{
$booking_dietary = $person->booking_dietary;
$booking_medical_conditions = $person->booking_medical_conditions;
$booking_bf_gf = $person->booking_bf_gf;
}
->fetchObject();
//watchdog('booking', 'Booking registration form loading data from form submission: @info', array('@info' => var_export($form_state, TRUE)));
}
if ($person)
{
$booking_dietary = $person->booking_dietary;
$booking_medical_conditions = $person->booking_medical_conditions;
$booking_bf_gf_nid = $person->booking_bf_gf_nid;
}
$transport_type_options = array(
'Driving' => 'Driving',
//'Train' => 'Train',
@@ -123,8 +130,8 @@ function travel_form($node, &$form_state, $inserting = FALSE, $nid = 0)
'#type' => 'radios',
'#title' => t('Transport Type'),
'#options' => $transport_type_options,
'#default_value' => !empty($data->booking_transport_type) ? $data->booking_transport_type : '0',
//'#required' => TRUE,
'#default_value' => !empty($data->booking_transport_type) ? $data->booking_transport_type : NULL,
'#required' => TRUE,
);
/*
@@ -263,12 +270,13 @@ function travel_form($node, &$form_state, $inserting = FALSE, $nid = 0)
//TODO: Get their registration ID instead of their name
if ((variable_get('booking_enable_combined_pricing', 0) == 1) && $person->booking_partner_id == 0)
{
$form['requirements']['booking_bf_gf'] = array(
$form['requirements']['booking_bf_gf_nid'] = array(
'#type' => 'textfield',
'#title' => t('Boyfriend/Girlfriend that you want to be in the same discussion groups as you.'),
'#maxlength' => 180,
'#required' => FALSE,
'#default_value' => !empty($data->booking_bf_gf) ? $data->booking_bf_gf : $booking_bf_gf,
'#title' => t('Registration ID of Boyfriend/Girlfriend to be placed in the same discussion groups as you.'),
'#maxlength' => 15,
'#size' => 4,
'#required' => FALSE,
'#default_value' => !empty($data->booking_bf_gf_nid) ? $data->booking_bf_gf_nid : $booking_bf_gf_nid,
);
}
@@ -282,12 +290,41 @@ function travel_form($node, &$form_state, $inserting = FALSE, $nid = 0)
}
function travel_form_validate($form, &$form_state) {
watchdog('booking', 'Travel form: @info', array('@info' => var_export($form_state, TRUE)));
//watchdog('booking', "<pre>Travel form:\n@info</pre>", array('@info' => print_r( $form_state, true)));
//check that a transport choice has been made
if (isset($form_state['booking_transport_type']) && $form_state['booking_transport_type'] == 0)
/*
if ((! isset($form_state['booking_transport_type'])) || $form_state['booking_transport_type'] == NULL)
{
form_set_error('booking_transport_type', t('You must select a transport type.'));
}
*/
//verify boyfriend/girlfriend id is in the correct format
if (isset($form_state['values']['booking_bf_gf_nid']) && $form_state['values']['booking_bf_gf_nid'] != '')
{
if (! is_numeric($form_state['values']['booking_bf_gf_nid'] ))
{
form_set_error('booking_bf_gf_nid',
t('You have entered an invalid registration id for your boyfriend/girlfriend. Please ensure you are using only the registration reference number your boyfriend/girlfriend received via email. If you believe this to be incorrect, please !contact using the details provided.',
array('!contact' => l('contact us', 'contact')))
);
}
//check that the partner exists
$partner = db_query("SELECT person.nid " .
"FROM {booking_person} person " .
"WHERE nid = :nid",
array(':nid' => $form_state['values']['booking_bf_gf_nid']))
->fetchObject();
if (! $partner)
{
form_set_error('booking_bf_gf_nid',
t('We cannot find a matching registration id for your boyfriend/girlfriend. Please ensure you are using only the number that relates to their registration. If you believe this to be incorrect, please !contact using the details provided.',
array('!contact' => l('contact us', 'contact')))
);
}
}
}
@@ -340,14 +377,16 @@ function travel_form_submit($form, &$form_state) {
//booking_person related fields
$node->booking_dietary = $values['booking_dietary'];
$node->booking_medical_conditions = $values['booking_medical_conditions'];
$node->booking_bf_gf = empty($values['booking_bf_gf']) ? 'N/A' : $values['booking_bf_gf'];
$node->booking_bf_gf_nid = empty($values['booking_bf_gf_nid']) ? 0 : $values['booking_bf_gf_nid'];
watchdog('booking', "<pre>Travel data to save:\n@info</pre>", array('@info' => print_r( $node, true)));
//store the node
$foo = node_submit(&$node);
$blah = node_save($foo);
//send a confirmation email
_booking_travelform_confirmation_email($node);
_booking_travelform_confirmation_email($values['personid']);
drupal_set_message("Thanks for submitting your travel details. You should receive a confirmation email shortly.", $type = 'status');
$form_state['redirect'] = array('content/travel');
@@ -364,7 +403,7 @@ function travel_load($nodes) {
$query->distinct();
$query->join('booking_person','p','p.nid = t.booking_person_nid');
$query->fields('t');
$query->fields('p', array('booking_dietary','booking_medical_conditions','booking_bf_gf'));
$query->fields('p', array('booking_dietary','booking_medical_conditions','booking_bf_gf_nid'));
$query->condition('tid', array_keys($nodes), 'IN');
$result = $query->execute();
@@ -404,15 +443,19 @@ function travel_insert($node)
))
->execute();
watchdog('booking', 'booking_travel table completed.');
//update the booking_person fields
db_update('booking_person')
->fields(array(
'booking_dietary' => $node->booking_dietary,
'booking_medical_conditions' => $node->booking_medical_conditions,
'booking_bf_gf' => $node->booking_bf_gf,
'booking_bf_gf_nid' => $node->booking_bf_gf_nid,
))
->condition('nid', $node->booking_person_nid)
->execute();
watchdog('booking', 'booking_person table completed.');
}
function travel_update($node)
@@ -444,7 +487,7 @@ function travel_update($node)
->fields(array(
'booking_dietary' => $node->booking_dietary,
'booking_medical_conditions' => $node->booking_medical_conditions,
'booking_bf_gf' => $node->booking_bf_gf,
'booking_bf_gf_nid' => $node->booking_bf_gf_nid,
))
->condition('nid', $node->booking_person_nid)
->execute();
@@ -470,8 +513,19 @@ function travel_view($node, $view_mode) {
"left outer join {booking_travel} t on p.nid = t.booking_person_nid " .
"where p.nid = :nid",
array(':nid' => $node->booking_person_nid))
->fetchObject();
->fetchObject();
//and their boyfriend/girlfriend if it is defined
if ($person->booking_bf_gf_nid != 0)
{
$query = db_query("Select booking_firstname, booking_lastname from {booking_person} where nid = :nid",
array(':nid' => $node->booking_bf_gf_nid))
->fetchObject();
$bf_gf = $query->booking_firstname . " " . $query->booking_lastname;
}
else
$bf_gf = "N/A";
$header = array('Attribute', 'Value');
$rows = array();
@@ -488,7 +542,7 @@ function travel_view($node, $view_mode) {
//fields from booking_person
$rows[] = array(t('Special Dietary Requirements:'), $node->booking_dietary);
$rows[] = array(t('Special Medical Conditions:'), $node->booking_medical_conditions);
$rows[] = array(t('Boyfriend/Girlfriend:'), $node->booking_bf_gf);
$rows[] = array(t('Boyfriend/Girlfriend:'), $bf_gf);
$node->content['details'] = array(
'#markup' => theme('table', array('header' => $header, 'rows' => $rows)),