From 340cfa503d8bd9013a73c2961cd6f6870c22d61a Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Wed, 2 May 2018 11:20:26 +1000 Subject: [PATCH] develop variety session form --- booking.module | 20 +-- ...g.variety.inc => booking.variety_admin.inc | 85 ++----------- booking.variety_form.inc | 120 ++++++++++++++++++ 3 files changed, 142 insertions(+), 83 deletions(-) rename booking.variety.inc => booking.variety_admin.inc (82%) create mode 100644 booking.variety_form.inc diff --git a/booking.module b/booking.module index 4519b8f..d7c5b65 100644 --- a/booking.module +++ b/booking.module @@ -54,7 +54,8 @@ module_load_include('inc', 'booking', 'booking.emails_admin'); // Load the include for bulk data import module_load_include('inc', 'booking', 'booking.import_data'); // Load the include for variety session configuration -module_load_include('inc', 'booking', 'booking.variety'); +module_load_include('inc', 'booking', 'booking.variety_form'); +module_load_include('inc', 'booking', 'booking.variety_admin'); // Load the include for study group configuration module_load_include('inc', 'booking', 'booking.studygroups'); // Load the include for study group definitions @@ -232,14 +233,6 @@ function booking_menu() { 'weight' => -96, //'type' => MENU_LOCAL_TASK, ); - $items['admin/config/booking/variety'] = array( - 'title' => 'Booking module variety sessions', - 'description' => 'Configure variety sessions for the Booking module', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('booking_variety_admin'), - 'access arguments' => array('administer site configuration'), - //'type' => MENU_LOCAL_TASK, - ); //one off internal tasks $items['admin/booking/luckynumbers'] = array( @@ -387,6 +380,15 @@ function booking_menu() { if (variable_get('booking_enable_variety_sessions', 0) == 1) { + $items['admin/config/booking/variety'] = array( + 'title' => 'Booking module variety sessions', + 'description' => 'Configure variety sessions for the Booking module', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_variety_admin'), + 'access arguments' => array('administer site configuration'), + //'type' => MENU_LOCAL_TASK, + ); + $items['variety'] = array( 'title' => $bookingTitle . ' Variety Sessions', 'page callback' => 'drupal_get_form', diff --git a/booking.variety.inc b/booking.variety_admin.inc similarity index 82% rename from booking.variety.inc rename to booking.variety_admin.inc index aa61804..266077c 100644 --- a/booking.variety.inc +++ b/booking.variety_admin.inc @@ -19,8 +19,8 @@ function booking_variety_admin() $header = array ( 'tid' => t('Event ID'), - 'booking_variety_time_descrip' => t('Description'), - 'booking_variety_status' => t('Status'), + 'booking_variety_time_descrip' => t('Description'), + 'booking_variety_status' => t('Status'), 'booking_variety_start' => t('Timeslot Start'), 'booking_variety_end' => t('Timeslot End'), 'variety_edit' => t('Edit Timeslot'), @@ -35,8 +35,8 @@ function booking_variety_admin() $options[$data->tid] = array ( 'tid' => $data->tid, - 'booking_variety_time_descrip' => $data->booking_variety_time_descrip, - 'booking_variety_status' => $data->booking_variety_status, + 'booking_variety_time_descrip' => $data->booking_variety_time_descrip, + 'booking_variety_status' => $data->booking_variety_status, 'booking_variety_start' => date("Y-m-d H:i", $data->booking_variety_start), 'booking_variety_end' => date("Y-m-d H:i", $data->booking_variety_end), 'variety_edit' => l('Edit Timeslot', t('admin/config/booking/variety/!tid/edit', array('!tid' => $data->tid))), @@ -203,8 +203,8 @@ function booking_variety_timeslot_form_submit($form, &$form_state) { db_update('booking_variety_times') ->fields(array ( 'booking_eventid' => $event->eid, - 'booking_variety_time_descrip' => $values['booking_variety_time_descrip'], - 'booking_variety_status' => $values['booking_variety_status'] == 1 ? 1 : 0, + 'booking_variety_time_descrip' => $values['booking_variety_time_descrip'], + 'booking_variety_status' => $values['booking_variety_status'] == 1 ? 1 : 0, 'booking_variety_start' => _datetime_array_to_ts($values['booking_variety_start']), 'booking_variety_end' => _datetime_array_to_ts($values['booking_variety_end']), )) @@ -328,8 +328,8 @@ function booking_variety_list_session_form($node, &$form_state, $timeslot_id = 0 $header = array ( 'variety_timeslot' => t('Variety Timeslot'), - 'booking_variety_descrip' => t('Variety Session Description'), - 'booking_variety_status' => t('Status'), + 'booking_variety_descrip' => t('Variety Session Description'), + 'booking_variety_status' => t('Status'), 'booking_variety_maxsize' => t('Maximum Capacity'), 'booking_variety_regncount' => t('Current Registration Count'), 'variety_edit' => t('Edit Session') @@ -339,9 +339,9 @@ function booking_variety_list_session_form($node, &$form_state, $timeslot_id = 0 { $options[$data->vid] = array ( - 'variety_timeslot' => $data->booking_variety_time_descrip, - 'booking_variety_descrip' => $data->booking_variety_descrip, - 'booking_variety_status' => $data->booking_variety_status == 1 ? 1 : 0, + 'variety_timeslot' => $data->booking_variety_time_descrip, + 'booking_variety_descrip' => $data->booking_variety_descrip, + 'booking_variety_status' => $data->booking_variety_status == 1 ? 'Active' : 'Inactive', 'booking_variety_maxsize' => $data->booking_variety_maxsize, 'booking_variety_regncount' => $data->booking_variety_regncount, 'variety_edit' => l('Edit Session', t('admin/config/booking/variety/session/!vid/edit', array('!vid' => $data->vid))), @@ -368,66 +368,3 @@ function booking_variety_edit_session_form() { } - -function booking_variety_regn_form($node, &$form_state) -{ - global $event; - $form = array (); - $data = $node; - $timeslot_count = 0; - - $query = db_query("SELECT * FROM {booking_variety_times} WHERE booking_eventid = :eid AND booking_variety_status = 1", - array(':eid' => $event->eid)); - - $form['booking_barcode'] = array ( - '#type' => 'textfield', - '#title' => t('Barcode'), - '#description' => t('Enter the barcode from your lanyard'), - '#size' => 60, - '#maxlength' => 150, - '#required' => TRUE, - '#default_value' => !empty($data->booking_barcode) ? $data->booking_barcode : '', - ); - - //for each entry in the variety timeslot table, create a new form select item - $result = db_query("SELECT * from {booking_variety_times}"); - - foreach($query as $timeslot) - { - //reset the array - $options = array (); - $options[''] = ''; - - //query for variety sessions in the timeslot - $session_query = db_query("SELECT * from {booking_variety_options} WHERE booking_variety_timeslot_id = :id AND booking_variety_status = 1", - array(':id' => $timeslot->tid)); - - //add all the sessions to the select list - foreach($session_query as $session) - { - $options[$session->vid] = $session->booking_variety_descrip; - } - - //create the form element for this timeslot - $form['select-variety-' . $timeslot_count] = array( - '#type' => 'select', - '#title' => t('Variety Session: ' . $timeslot->booking_variety_time_descrip), - '#required' => TRUE, - '#default_value' => '', - '#options' => $options, - ); - - $timeslot_count++; - } - - $form['submit'] = array - ( - '#type' => 'submit', - '#value' => t('Submit'), - ); - - return array ( - 'form' => $form, - ); - -} \ No newline at end of file diff --git a/booking.variety_form.inc b/booking.variety_form.inc new file mode 100644 index 0000000..65837db --- /dev/null +++ b/booking.variety_form.inc @@ -0,0 +1,120 @@ + $event->eid)); + + + $form['booking_variety_regn_feedback_wrapper'] = array( + '#markup' => '
Please enter your booking number from your lanyard. ' . + '


', + ); + $form['booking_nid'] = array( + '#type' => 'textfield', + '#title' => t('Booking ID'), + '#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', + ), + ); + + //for each entry in the variety timeslot table, create a new form select item + $result = db_query("SELECT * from {booking_variety_times}"); + + foreach($query as $timeslot) + { + //reset the array + $options = array (); + $options[''] = ''; + + //query for variety sessions in the timeslot + $session_query = db_query("SELECT * from {booking_variety_options} WHERE booking_variety_timeslot_id = :id AND booking_variety_status = 1", + array(':id' => $timeslot->tid)); + + //add all the sessions to the select list + foreach($session_query as $session) + { + $options[$session->vid] = $session->booking_variety_descrip; + } + + //create the form element for this timeslot + $form['select-variety-' . $timeslot_count] = array( + '#type' => 'select', + '#title' => t('Variety Session: ' . $timeslot->booking_variety_time_descrip), + '#required' => TRUE, + '#default_value' => '', + '#options' => $options, + ); + + $timeslot_count++; + } + + $form['submit'] = array + ( + '#type' => 'submit', + '#value' => t('Submit'), + ); + + return array ( + 'form' => $form, + ); + +} + + +/** + * 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.

'; + } +} \ No newline at end of file