$event->eid));
// Query the variety timeslot table
$timeslot_query = db_select('booking_variety_times', 'v');
$timeslot_query->condition('v.booking_eventid', $event->eid, '=')
->fields('v')
->orderBy('v.booking_variety_start');
$result = $timeslot_query->execute();
$form['#prefix'] = '
';
$form['#suffix'] = '
';
$form['identity'] = array(
'#type' => 'fieldset',
'#title' => 'Select Person',
);
$form['identity']['booking_variety_regn_feedback_wrapper'] = array(
'#markup' => 'Please enter your booking number from your lanyard.
',
);
$form['identity']['booking_nid'] = array(
'#type' => 'textfield',
'#title' => t('Booking Number'),
'#size' => 60,
'#required' => TRUE,
'#default_value' => !empty($data->booking_nid) ? $data->booking_nid : '',
'#ajax' => array(
'event' => 'change',
//'wrapper' => 'booking_variety_regn_feedback_wrapper',
//'callback' => 'booking_variety_regn_callback',
//'wrapper' => 'booking_variety_session_wrapper',
//'callback' => 'booking_variety_session_callback',
'wrapper' => 'booking_variety_session_form_wrapper',
'callback' => 'booking_variety_session_form_callback',
),
);
$form['variety-sessions'] = array(
'#type' => 'fieldset',
'#title' => 'Select Variety Sessions',
);
//for each entry in the variety timeslot table, create a new form select item
foreach($result as $timeslot) {
$fieldname = 'select-variety-' . $timeslot->tid;
// Make sure we get rid of any stale data
if (isset($form_state['input']['variety-sessions'][$fieldname])) {
watchdog('booking_debug', 'Unsetting stale @name data, was: @info
',
array('@name' => $fieldname, '@info' => print_r($form_state['input'], true)));
unset($form_state['input']['variety-sessions'][$fieldname]);
}
//create the form element for this timeslot
$form['variety-sessions'][$fieldname] = array(
'#type' => 'select',
'#title' => t('Variety Session: ' . $timeslot->booking_variety_time_descrip),
'#required' => TRUE,
'#default_value' => isset($form_state['values'][$fieldname]) ? $form_state['values'][$fieldname] : 0,
'#options' => _booking_get_variety_timeslot_options($timeslot->tid),
'#prefix' => '',
'#suffix' => '
',
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return array (
'form' => $form,
);
}
function booking_variety_session_callback($form, &$form_state) {
global $event;
$commands = array();
//$node = $form_state['values']['form_id'];
$data = $form_state['input'];
watchdog('booking_debug', 'booking_variety_session_callback:
@info
', array('@info' => print_r( $form, true)));
// --- Update the wrapper for booking ID validity ---
//verify that user-entered data is a number
if (! preg_match('/^[0-9]+$/', $data['booking_nid'])) {
watchdog('booking_debug', "booking_variety_session_callback non-numerical input
");
$markup = '' .
'You have not entered a valid booking reference number.
';
$commands[] = ajax_command_replace('#booking_variety_regn_feedback_wrapper', $markup);
}
// Perform lookup on barcode to make sure it matches someone attending the current event
$db_and = db_and();
$db_and->condition('p.booking_eventid', $event->eid, '=');
$db_and->condition('p.booking_status', 1, '=');
$db_and->condition('p.nid', $data['booking_nid'], '=');
$query = db_select('booking_person', 'p');
$query->condition($db_and)
->fields('p');
$person = $query->execute()
->fetchObject();
if ($person) {
watchdog('booking_debug', "booking_variety_session_callback found valid attendee
");
$markup = '' .
'Matched booking reference number.
';
$commands[] = ajax_command_replace('#booking_variety_regn_feedback_wrapper', $markup);
}
else {
watchdog('booking_debug', "booking_variety_session_callback did not find valid attendee
");
$markup = '' .
'You have not entered a valid booking reference number.
';
$commands[] = ajax_command_replace('#booking_variety_regn_feedback_wrapper', $markup);
}
// --- Update the wrapper for available variety sessions ---
// Query the variety timeslot table
$timeslot_query = db_select('booking_variety_times', 'v');
$timeslot_query->condition('v.booking_eventid', $event->eid, '=')
->fields('v')
->orderBy('v.booking_variety_start');
$result = $timeslot_query->execute();
//for each entry in the variety timeslot table, create a new form select item
foreach($result as $timeslot) {
$fieldname = 'select-variety-' . $timeslot->tid;
$options = _booking_get_variety_timeslot_options($timeslot->tid);
watchdog('booking_debug', 'Timeslot @tid form state value: @info
',
array('@tid' => $timeslot->tid, '@info' => print_r($form_state['values'], true)));
watchdog('booking_debug', 'Setting timeslot @tid default value to @value', array(
'@tid' => $timeslot->tid,
'@value' => isset($form_state['values'][$fieldname]) ? $form_state['values'][$fieldname] : 0)
);
//re-create the form element for this timeslot
$form['variety-sessions'][$fieldname] = array(
'#type' => 'select',
'#title' => t('Rebuilt Variety Session: ' . $timeslot->booking_variety_time_descrip),
'#required' => TRUE,
'#options' => $options,
'#prefix' => '',
'#suffix' => '
',
'#default_value' => 1,
);
//$form['variety-sessions'][$fieldname]['#options'] = $options;
//$form['variety-sessions'][$fieldname]['#title'] = t('Rebuilt Variety Session: ' . $timeslot->booking_variety_time_descrip);
// Tell drupal to update the wrapper for this field
$commands[] = ajax_command_replace('#booking_variety_session_' . $timeslot->tid . '_wrapper', drupal_render($form['variety-sessions'][$fieldname]));
//$commands[] = ajax_command_replace('#booking_variety_session_' . $timeslot->tid . '_wrapper', drupal_render($form));
}
$form_state['rebuild'] = TRUE;
return array('#type' => 'ajax', '#commands' => $commands);
//$page = array('#type' => 'ajax', '#commands' => $commands);
//ajax_deliver($page);
}
/**
* Function to calculate available variety sessions for ajax enabled form booking_variety_regn_form()
* @param $timeslot_id - the timeslot ID to query
* @return array containing the variety sessions for specified timeslot that still have capacity
*/
function _booking_get_variety_timeslot_options($timeslot_id) {
$session_options = array();
$session_options[] = "--";
$session_query = db_query("SELECT * FROM {booking_variety_options} WHERE booking_variety_timeslot_id = :tid AND booking_variety_status = 1",
array(':tid' => $timeslot_id));
// Only add sessions that aren't full to the return result
foreach($session_query as $session) {
if ($session->booking_variety_regncount < $session->booking_variety_maxsize) {
$session_options[$session->vid] = $session->booking_variety_descrip;
}
}
//watchdog('booking_debug', "Variety Session Options:\n@info
", array('@info' => print_r( $session_options, true)));
return $session_options;
}
/**
* Callback function to verify if barcode was valid
*/
function booking_variety_regn_callback($form, &$form_state) {
global $event;
//$node = $form_state['values']['form_id'];
$data = $form_state['input'];
watchdog('booking', 'booking_variety_regn_callback validation:\n@info
', array('@info' => print_r( $data, true)));
//verify that user-entered data is a number
if (! preg_match('/^[0-9]+$/', $data['booking_nid'])) {
watchdog('booking_debug', "booking_variety_regn_callback non-numerical input
");
return '' .
'You have not entered a valid booking reference number.
';
}
// Perform lookup on barcode to make sure it matches someone attending the current event
$db_and = db_and();
$db_and->condition('p.booking_eventid', $event->eid, '=');
$db_and->condition('p.booking_status', 1, '=');
$db_and->condition('p.nid', $data['booking_nid'], '=');
$query = db_select('booking_person', 'p');
$query->condition($db_and)
->fields('p');
$person = $query->execute()
->fetchObject();
if ($person) {
watchdog('booking_debug', "booking_variety_regn_callback found valid attendee
");
return '' .
'Matched booking reference number.
';
}
else {
watchdog('booking_debug', "booking_variety_regn_callback did not find valid attendee
");
return '' .
'You have not entered a valid booking reference number.
';
}
}
/**
* Callback function
*/
function booking_variety_session_form_callback($form, &$form_state) {
return $form;
}
/**
* Process the submission
*/
function booking_variety_regn_form_submit($form, &$form_state) {
global $event;
$values = $form_state['input'];
watchdog('booking_debug', 'booking_variety_regn_form_submit: @info
', array('@info' => print_r( $form_state, true)));
}