diff --git a/booking.helper.inc b/booking.helper.inc index 28c2912..6a553b9 100644 --- a/booking.helper.inc +++ b/booking.helper.inc @@ -383,6 +383,7 @@ function _booking_studygroups_cleanup($nid) foreach ($to_remove as $group) { + /* $role = "None"; if ($group->booking_is_leader == 'Y') $role = "Lead group #" . $group->booking_studygroup_id; @@ -390,8 +391,12 @@ function _booking_studygroups_cleanup($nid) $role = "Help group #" . $group->booking_studygroup_id; elseif ($group->booking_is_reserveleader == 'Y') $role = "Reserve group #" . $group->booking_studygroup_id; - - $message = t("Removing id !nid from group id !group with role !role.", array('!nid' => $nid, '!group' => $group->booking_studygroup_id, '!role' => $role)); + */ + $message = t("Removing id !nid from group id !group with role !role.", + array('!nid' => $nid, '!group' => $group->booking_studygroup_id, ' + !role' => _booking_studygroup_role_lookup($group->booking_studygroup_role) + ) + ); watchdog('booking', $message); drupal_set_message($message, 'status', FALSE); diff --git a/booking.module b/booking.module index f4f8213..0d7b71b 100644 --- a/booking.module +++ b/booking.module @@ -365,13 +365,13 @@ function booking_menu() { //'type' => MENU_NORMAL_ITEM, ); - $items['admin/booking/studygroups/selectleaders'] = array( + $items['admin/booking/studygroups/%/selectleaders'] = array( 'title' => 'Select Study Group Leaders', 'description' => 'Define attendees to lead or help study groups', 'page callback' => 'drupal_get_form', - 'page arguments' => array('booking_available_leadhelp_select_form'), + 'page arguments' => array('booking_available_leadhelp_select_form', 3), 'access arguments' => array('edit study groups'), - 'type' => MENU_LOCAL_ACTION, + //'type' => MENU_LOCAL_ACTION, ); $items['admin/booking/studygroups/calculate'] = array( diff --git a/booking.studygroups.inc b/booking.studygroups.inc index ca4b874..018b342 100644 --- a/booking.studygroups.inc +++ b/booking.studygroups.inc @@ -8,7 +8,7 @@ /** * Function for selecting who is available to lead or help sessions */ -function booking_available_leadhelp_select_form() { +function booking_available_leadhelp_select_form($node, &$form_state, $group_id) { global $event; //see http://www.jaypan.com/blog/themeing-drupal-7-forms-tables-checkboxes-or-radios @@ -16,19 +16,33 @@ function booking_available_leadhelp_select_form() { $options = array (); $group_options = array(); $session_options = array(); - $prefix = t("

Allocate a leader/helper session for attendees. Note that at this stage there is no way to remove this data.

"); - $suffix = t("

Make sure you have selected a study group to apply these changes to!

"); + + + //verify that $group_id is a number + if (! preg_match('/^[0-9]+$/', $group_id)) { + drupal_set_message("Error: Invalid study group ID '" . $group_id . "' supplied. Unable to edit group leaders and helpers.", 'error', FALSE); + drupal_goto('admin/booking/studygroups'); + return ""; + } //select all the study groups for this event id - $studygroups_query = db_query("SELECT * FROM {booking_studygroup_list} WHERE booking_eventid = :eid", array(':eid' => $event->eid)); - $studygroups = $studygroups_query->fetchAllAssoc('sid'); - //$group_options[0] = ''; - foreach ($studygroups as $group) - $group_options[$group->sid] = $group->booking_studygroup_descrip; + $studygroup = db_query("SELECT * FROM {booking_studygroup_list} WHERE sid = :sid", array(':sid' => $group_id)) + ->fetchObject(); + + if (! $studygroup) + { + drupal_set_message("Error: Could not find matching study group ID. Unable to edit leaders/helpers.", 'error', FALSE); + drupal_goto('admin/booking/studygroups'); + return ""; + } + + $prefix = t("

Study Group ‐ !descrip

Allocate a leader/helper session for attendees.

", + array('!descrip' => $studygroup->booking_studygroup_descrip)); + $suffix = t("

Make sure you have selected a study group to apply these changes to!

"); //select the number of study group sessions //assume they all have the same number of sessions - $num_sessions = reset($studygroups)->booking_num_group_sessions; + $num_sessions = $studygroup->booking_num_group_sessions; $session_options[0] = ''; for ($i = 1; $i <= $num_sessions; $i++) $session_options[$i] = $i; @@ -39,17 +53,14 @@ function booking_available_leadhelp_select_form() { $group_mapping = $group_mapping_query->fetchAllAssoc('sid'); //***form starts here*** - $form['booking_studygroup'] = array( - '#type' => 'select', - '#title' => t('Select which Study Group to process'), - '#required' => TRUE, - '#options' => $group_options, - ); + $form['booking_studygroup'] = array ( + '#type' => 'hidden', + '#value' => $group_id, + ); $header = array ( 'booking_nid' => array('data' => t('Booking ID'), 'field' => 'nid'), 'booking_name' => array('data' => t('Name'), 'field' => 'booking_lastname'), - //'booking_gender' => array('data' => t('Gender')), 'booking_baptised' => array('data' => t('Baptised?'), 'field' => 'booking_baptised'), 'booking_age' => array('data' => t('Age (start of week)'), 'field' => 'booking_dob', 'sort' => 'asc'), 'booking_state' => array('data' => t('State'), 'field' => 'booking_state'), @@ -61,87 +72,77 @@ function booking_available_leadhelp_select_form() { ); $query = db_select('booking_person', 'p'); - //$query->leftJoin('booking_leadhelp_list', 'l', 'p.nid = l.booking_node_id'); + //only select people that are either booked in or on the waiting list + $db_or = db_or(); + $db_or->condition('p.booking_status', 1, '='); + $db_or->condition('p.booking_status', 2, '='); + + //also restrict to males from the current event $db_and = db_and(); $db_and->condition('p.booking_event_id', $event->eid, '='); $db_and->condition('p.booking_gender', 'M', '='); + $db_and->condition($db_or); $query->condition($db_and); - //$query->fields('p')->fields('l'); $query->fields('p'); $table_sort = $query->extend('TableSort')->orderbyHeader($header); $result = $table_sort->execute(); foreach($result as $data) { - $currently_doing = ""; + $role_listing = ""; + $assigned_role = 0; + $session_id = 0; //work out what this person is currently leading/helping - foreach ($group_mapping as $person) - { - if ($person->booking_node_id == $data->nid) + foreach ($group_mapping as $group) + { + $role = $group->booking_studygroup_role; + //add to the listing of all the roles this person is doing + if ($group->booking_node_id == $data->nid && $role > 0) { - if ($person->booking_is_leader == 'Y') - $currently_doing .= "Lead " . $person->booking_studygroup_id . " #" . $person->booking_session_id . "; "; - elseif ($person->booking_is_helper == 'Y') - $currently_doing .= "Help " . $person->booking_studygroup_id . " #" . $person->booking_session_id . "; "; - elseif ($person->booking_is_reserveleader == 'Y') - $currently_doing .= "Reserve " . $person->booking_studygroup_id . " #" . $person->booking_session_id . "; "; + $text = _booking_studygroup_role_lookup($role); + $role_listing .= $text . " group " . $group->booking_studygroup_id . " #" . $group->booking_session_id . "; "; + } + + //also record if they are doing anything for our current group + if ($group->booking_node_id == $data->nid && $group->booking_studygroup_id == $group_id) + { + $assigned_role = $role; + $session_id = $group->booking_session_id; } } $options[$data->nid] = array ( 'booking_nid' => l(t('!id', array('!id' => $data->nid)), t('node/!id', array('!id' => $data->nid))), 'booking_name' => l(t($data->booking_firstname . " " . $data->booking_lastname), t('node/!id', array('!id' => $data->nid))), - //'booking_gender' => $data->booking_gender == 'M' ? 'Male' : 'Female', 'booking_baptised' => $data->booking_baptised == 'Y' ? 'Yes' : 'No', 'booking_age' => _booking_avg_age($data->booking_dob, 1, $event->booking_event_start), 'booking_state' => $data->booking_state, 'booking_status' => _booking_status_generate($data->booking_status), - //'booking_lead_sessions' => $data->booking_total_lead === NULL ? '0' : $data->booking_total_lead, - //'booking_available_lead' => $data->booking_available_lead === NULL ? '0' : $data->booking_available_lead, - //'booking_help_sessions' => $data->booking_total_help === NULL ? '0' : $data->booking_total_help, - //'booking_available_help' => $data->booking_available_help === NULL ? '0' : $data->booking_available_help, - /* - 'booking_assign_leader_group' => array('data' => array( - '#type' => 'select', - //'#title' => t('Select group'), - '#default_value' => 0, - '#options' => $group_options, - '#name' => 'booking_assign_leader_group[' . $data->nid . ']', - ) - ), - */ 'booking_assign_leader_session' => array('data' => array( '#type' => 'select', - //'#default_value' => 0, '#options' => $session_options, '#name' => 'booking_assign_leader_session[' . $data->nid . ']', + '#value' => $assigned_role == 1 ? $session_id : 0, ) ), - /* - 'booking_assign_helper_group' => array('data' => array( - '#type' => 'select', - '#default_value' => 0, - '#options' => $group_options, - '#name' => 'booking_assign_helper_group[' . $data->nid . ']', - ) - ), - */ 'booking_assign_helper_session' => array('data' => array( '#type' => 'select', '#options' => $session_options, '#name' => 'booking_assign_helper_session[' . $data->nid . ']', + '#value' => $assigned_role == 2 ? $session_id : 0, ) ), 'booking_assign_reserveleader_session' => array('data' => array( '#type' => 'select', '#options' => $session_options, '#name' => 'booking_assign_reserveleader_session[' . $data->nid . ']', + '#value' => $assigned_role == 3 ? $session_id : 0, ) ), - 'booking_currently_leadhelp' => $currently_doing, + 'booking_currently_leadhelp' => $role_listing, ); } @@ -154,8 +155,6 @@ function booking_available_leadhelp_select_form() { ); //so we can access the dropdown elements - //$form['booking_assign_leader_group'] = array( '#type' => 'value', ); - //$form['booking_assign_helper_group'] = array( '#type' => 'value', ); $form['booking_assign_leader_session'] = array( '#type' => 'value', ); $form['booking_assign_reserveleader_session'] = array( '#type' => 'value', ); $form['booking_assign_helper_session'] = array( '#type' => 'value', ); @@ -203,10 +202,8 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { $checkboxes = $form_state['values']['table']; $booking_studygroup = $form_state['values']['booking_studygroup']; - //$leader_list = $form_state['values']['booking_assign_leader_group']; $leader_session = $form_state['values']['booking_assign_leader_session']; $reserve_leader_session = $form_state['values']['booking_assign_reserveleader_session']; - //$helper_list = $form_state['values']['booking_assign_helper_group']; $helper_session = $form_state['values']['booking_assign_helper_session']; //watchdog('booking', "Leader list: @info", array('@info' => var_export($form_state['values'], TRUE))); @@ -223,6 +220,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { $helper = 'N'; $reserve_leader = 'N'; $session = 0; + $role = 0; $found = FALSE; //remove from being a leader? @@ -233,9 +231,10 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) // ->condition('booking_session_id', $leader_session[$key]) - ->condition('booking_is_leader', 'Y') + // ->condition('booking_is_leader', 'Y') ->execute(); - watchdog('booking', 'Removed person !nid from being a leader in study group !sid, affected !num rows.', array ('!nid' => $key, '!sid' => $booking_studygroup, '!num' => $num_deleted)); + watchdog('booking', 'Removed person !nid from being a leader in study group !sid, affected !num rows.', + array ('!nid' => $key, '!sid' => $booking_studygroup, '!num' => $num_deleted)); //skip to the next person $counter++; continue; @@ -248,7 +247,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) // ->condition('booking_session_id', $helper_session[$key]) - ->condition('booking_is_helper', 'Y') + // ->condition('booking_is_helper', 'Y') ->execute(); watchdog('booking', 'Removed person !nid from being a helper in study group !sid, affected !num rows.', array ('!nid' => $key, '!sid' => $booking_studygroup, '!num' => $num_deleted)); //skip to the next person @@ -263,7 +262,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) // ->condition('booking_session_id', $reserve_leader_session[$key]) - ->condition('booking_is_reserveleader', 'Y') + // ->condition('booking_is_reserveleader', 'Y') ->execute(); watchdog('booking', 'Removed person !nid from being a reserve leader in study group !sid, affected !num rows.', array ('!nid' => $key, '!sid' => $booking_studygroup, '!num' => $num_deleted)); @@ -274,22 +273,25 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { //was this person set as a leader? elseif ($leader_session[$key] <> 0) { - $leader = 'Y'; + $role = 1; $session = $leader_session[$key]; - watchdog('booking', 'Person !nid is set to be a leader in session !sid, group !group', array ('!nid' => $key, '!sid' => $leader_session[$key], '!group' => $booking_studygroup)); + watchdog('booking', 'Person !nid is set to be a leader in session !sid, group !group', + array ('!nid' => $key, '!sid' => $leader_session[$key], '!group' => $booking_studygroup)); } //was this person set as a helper? elseif ($helper_session[$key] <> 0) { - $helper = 'Y'; + $role = 2; $session = $helper_session[$key]; - watchdog('booking', 'Person !nid is set to be a helper in session !sid, group !group', array ('!nid' => $key, '!sid' => $helper_session[$key], '!group' => $booking_studygroup)); + watchdog('booking', 'Person !nid is set to be a helper in session !sid, group !group', + array ('!nid' => $key, '!sid' => $helper_session[$key], '!group' => $booking_studygroup)); } elseif ($reserve_leader_session[$key] <> 0) { - $reserve_leader = 'Y'; + $role = 3; $session = $reserve_leader_session[$key]; - watchdog('booking', 'Person !nid is set to be a reserve leader in session !sid, group !group', array ('!nid' => $key, '!sid' => $helper_session[$key], '!group' => $booking_studygroup)); + watchdog('booking', 'Person !nid is set to be a reserve leader in session !sid, group !group', + array('!nid' => $key, '!sid' => $helper_session[$key], '!group' => $booking_studygroup)); } //if we reach the else something weird happened, make sure we don't insert else @@ -298,8 +300,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { //check if this person already exists in the booking_studygroup_mapping table foreach ($group_mapping as $person) { - if ($person->booking_node_id == $key && $person->booking_studygroup_id == $booking_studygroup && - ($person->booking_is_leader == 'Y' || $person->booking_is_helper == 'Y')) + if ($person->booking_node_id == $key && $person->booking_studygroup_id == $booking_studygroup) { $found = TRUE; break; @@ -315,9 +316,10 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { 'booking_node_id' => $key, 'booking_studygroup_id' => $booking_studygroup, 'booking_session_id' => $session, - 'booking_is_leader' => $leader, - 'booking_is_helper' => $helper, - 'booking_is_reserveleader' => $reserve_leader, + 'booking_studygroup_role' => $role, + //'booking_is_leader' => $leader, + //'booking_is_helper' => $helper, + //'booking_is_reserveleader' => $reserve_leader, )) ->execute(); } @@ -327,9 +329,10 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { db_update('booking_studygroup_mapping') ->fields(array ( 'booking_session_id' => $session, - 'booking_is_leader' => $leader, - 'booking_is_helper' => $helper, - 'booking_is_reserveleader' => $reserve_leader, + 'booking_studygroup_role' => $role, + //'booking_is_leader' => $leader, + //'booking_is_helper' => $helper, + //'booking_is_reserveleader' => $reserve_leader, )) ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) @@ -488,13 +491,15 @@ function booking_studygroups_edit_form_submit($form, &$form_state) { } $nid = $values['personid']; - watchdog('booking', "
Study Groups Edit submission:\n@info
", array('@info' => print_r( $form_state, true))); + //watchdog('booking', "
Study Groups Edit submission:\n@info
", array('@info' => print_r( $form_state, true))); //select the groups this person is already assigned to, indexed by studygroup id $person_groups_query = db_query("SELECT * FROM {booking_studygroup_mapping} WHERE booking_eventid = :eid AND booking_node_id = :nid", array(':eid' => $event->eid, ':nid' => $nid)); $person_groups = $person_groups_query->fetchAllAssoc('booking_studygroup_id'); + //watchdog('booking', "
Study Groups person mapping:\n@info
", array('@info' => print_r( $person_groups, true))); + //select all the study groups for this event id $studygroups_query = db_query("SELECT * FROM {booking_studygroup_list} WHERE booking_eventid = :eid", array(':eid' => $event->eid)); $studygroups = $studygroups_query->fetchAll(); @@ -502,25 +507,26 @@ function booking_studygroups_edit_form_submit($form, &$form_state) { //loop through array of study group IDs and compare against existing database entries foreach ($studygroup_ids as $key => $value) { + //watchdog('booking', "
Study Group key:\n@key\nValue\n@value
", array('@key' => print_r( $key, true), '@value' => print_r( $value, true))); + //check if there is a valid value to process if ($value > 0 || $value == 'Remove') { - - //watchdog('booking', "
Study Group key:\n@key\nValue\n@value
", array('@key' => print_r( $key, true), '@value' => print_r( $value, true))); - //check to see if we need to remove a study group mapping if (! empty($person_groups[$key]) && $value == 'Remove') { - watchdog('booking', "Removing an existing Study Group session id: @id from group @group.\n
@info
", array('@id' => $value, '@group' => $key, '@info' => print_r( $person_groups[$key], true))); + watchdog('booking', "Removing an existing Study Group session id: @id from group @group.\n
@info
", + array('@id' => $value, '@group' => $key, '@info' => print_r( $person_groups[$key], true))); $num_deleted = db_delete('booking_studygroup_mapping') ->condition('sid', $person_groups[$key]->sid) ->execute(); } //check for an existing study group mapping to change - elseif (! empty($person_groups[$key]) && $person_groups[$key]->booking_session_id != $value) + elseif ((!empty($person_groups[$key])) && $person_groups[$key]->booking_session_id != $value) { - watchdog('booking', "Updating Study Group session from: @key to @value", array('@key' => $person_groups[$key]->booking_session_id, '@value' => $value)); + watchdog('booking', "Updating Study Group session from: @key to @value", + array('@key' => $person_groups[$key]->booking_session_id, '@value' => $value)); db_update('booking_studygroup_mapping') ->fields(array( @@ -532,6 +538,12 @@ function booking_studygroups_edit_form_submit($form, &$form_state) { ->condition('sid', $person_groups[$key]->sid) ->execute(); } + //found this entry already, so no change needed + elseif ((!empty($person_groups[$key])) && $person_groups[$key]->booking_session_id == $value) + { + watchdog('booking', "Study Group @group session already set to @session.", + array('@group' => $key, '@session' => $value)); + } //no previously defined value, so add a new entry to the mapping table else { @@ -969,7 +981,7 @@ function booking_studygroups_view_summary() { global $event; $output = ""; - $header = array('Link','Study Group', 'Session Count'); + $header = array('Link','Study Group', 'Session Count', 'Select Leaders'); $attributes = array('style' => 'max-width:30%'); //get study groups @@ -980,9 +992,10 @@ function booking_studygroups_view_summary() { foreach ($result as $group) { $rows[] = array( - l(t('!id', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/view', array('!id' => $group->sid))), + l(t('View', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/view', array('!id' => $group->sid))), $group->booking_studygroup_descrip, $group->booking_num_group_sessions, + l(t('Edit Leaders/Helpers', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/selectleaders', array('!id' => $group->sid))), ); } @@ -1127,6 +1140,12 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { $form = array(); $options = array(); $last_session = ""; + $class_array = array( + 0 => "normal-row", + 1 => "leader-row", + 2 => "helper-row", + 3 => "helper-row", + ); //attach the custom css $form['#attached']['css'] = array( @@ -1182,8 +1201,8 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { foreach($result as $data) { - $class = ""; - + $class = $class_array[$data->booking_studygroup_role]; + /* //apply theme as required if ($data->booking_is_leader == 'Y') $class = "leader-row"; @@ -1193,6 +1212,7 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { $class = "helper-row"; else $class = "normal-row"; + */ //only add the lines separating groups if we're sorting by the session id if ($sort['sql'] == "m.booking_session_id")