diff --git a/booking.module b/booking.module index 8bcea1f..b7ef21d 100644 --- a/booking.module +++ b/booking.module @@ -462,6 +462,14 @@ function booking_menu() { 'access arguments' => array('edit variety sessions'), 'type' => MENU_CALLBACK, ); + + $items['admin/config/booking/variety/registration/%/edit'] = array( + 'title' => 'Edit Variety Session Registration', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_variety_regn_edit_form', 5), + 'access arguments' => array('edit variety sessions'), + 'type' => MENU_CALLBACK, + ); } //configure study groups diff --git a/booking.variety_admin.inc b/booking.variety_admin.inc index c0bdc38..e80ffe3 100644 --- a/booking.variety_admin.inc +++ b/booking.variety_admin.inc @@ -457,6 +457,8 @@ function booking_variety_sessions_view_summary() { foreach ($timeslot_list as $timeslot) { $header[] = $timeslot->booking_variety_time_descrip; } + // Add a link at the end to edit a variety session registration + $header[] = "Edit Session Registrations"; $person_query = db_query("SELECT * FROM {booking_person_view} WHERE booking_status = 1 " . " ORDER BY booking_lastname, booking_firstname")->fetchAllAssoc('nid'); @@ -472,9 +474,9 @@ function booking_variety_sessions_view_summary() { //get details of the person's variety session for this timeslot $vid = $session_ids[$timeslot->tid]; - watchdog('booking_debug', 'Person @nid in timeslot @tid registered for session id @vid', array( - '@nid' => $person->nid, '@tid' => $timeslot->tid, '@vid' => $vid, - )); + //watchdog('booking_debug', 'Person @nid in timeslot @tid registered for session id @vid', array( + // '@nid' => $person->nid, '@tid' => $timeslot->tid, '@vid' => $vid, + //)); // in case the person is somehow registered for a session that no longer exists if (isset($sessions[$vid])) { @@ -483,13 +485,14 @@ function booking_variety_sessions_view_summary() { else { $text = ""; } - $newline[] = $text; } else { $newline[] = ""; } } //end iterate variety session timeslot list + $newline[] = l('Edit', t('admin/config/booking/variety/!tid/csv', array('!tid' => $data->tid))), + //add the line to the array of rows $rows[] = $newline; } //end iterate person list @@ -609,4 +612,100 @@ function booking_varietysessions_csv_report($timeslot_id) { drupal_add_http_header("Content-Disposition", "attachment; filename=" . $name . ".csv"); print $csv; exit(0); -} \ No newline at end of file +} + +/** + * Build the admin form for editing variety session registrations + */ +function booking_variety_regn_edit_form($node, &$form_state, $variety_regn_id) +{ + global $event; + $form = array(); + $data = $node; + $redirect_path = "admin/config/booking/variety/report"; + $prefix = "

Edit variety session registration for user

" + + //verify that $variety_regn_id is a number + if (! preg_match('/^[0-9]+$/', $variety_regn_id)) { + drupal_set_message("Error: Invalid variety session registration ID supplied. Unable to update variety session registration for user.", 'error', FALSE); + drupal_goto($redirect_path); + return ""; + } + + $variety_session_query = db_query("SELECT r.*, p.* FROM {booking_variety_regn} r + inner join {booking_person} p on p.nid = r.booking_person_nid + WHERE p.booking_eventid = :eid AND r.booking_person_nid = :rid", + array(':eid' => $event->eid, ':rid' => $variety_regn_id)); + $session_details = $variety_session_query->fetchAll(); + + if (! $session_details) { + drupal_set_message("Error: Unable to find matching variety session registration ID. Unable to update variety session registration for user.", 'error', FALSE); + drupal_goto($redirect_path); + return ""; + } + + $session_ids = drupal_json_decode($session_details->booking_variety_ids); + + // Query the variety timeslot table so we know how many select elements to create + $timeslot_query = db_select('booking_variety_timeslots', 'v'); + $timeslot_query->condition('v.booking_eventid', $event->eid, '=') + ->fields('v') + ->orderBy('v.booking_variety_start'); + $timeslot_result = $timeslot_query->execute(); + + + //define the form for variety session configuration if we're not deleting a session + if(!isset($form_state['storage']['confirm'])) { + $form[] = array ( + 'first_heading' => array( + '#type' => 'markup', + '#markup' => $prefix, + ), + ); + + //add this to the form in a hidden field so we can update the right event + $form['rid'] = array ( + '#type' => 'hidden', + '#value' => $variety_regn_id, + ); + + $form['variety-sessions'] = array( + '#type' => 'fieldset', + '#title' => 'Select Variety Sessions', + '#prefix' => '
', + '#suffix' => '
' + ); + + //for each entry in the variety timeslot table, create a new form select item + foreach($timeslot_result as $timeslot) { + $fieldname = 'select-variety-' . $timeslot->tid; + + //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] : $session_ids[$timeslot->$tid], + '#options' => _booking_get_variety_timeslot_options($timeslot->tid), + ); + } + + $form['Update'] = array( + '#type' => 'submit', + '#value' => t('Update Session Registration'), + ); + $form['Delete'] = array( + '#type' => 'submit', + '#value' => t('Delete Session Registration'), + ); + + return array ( + 'form' => $form, + ); + } //end checking for delete confirmation + else { + return confirm_form($form, "Are you sure you wish to delete all variety session registrations for id " . $variety_regn_id . "?", + current_path(), NULL, "Delete Session"); + } + +}