diff --git a/booking.studygroups.inc b/booking.studygroups.inc index b1080ba..f21370e 100644 --- a/booking.studygroups.inc +++ b/booking.studygroups.inc @@ -15,50 +15,131 @@ function booking_available_leadhelp_select_form() { //see http://www.jaypan.com/blog/themeing-drupal-7-forms-tables-checkboxes-or-radios $form = array (); $options = array (); - $prefix = t("

Specify the number of leader or helper sessions for each attendee. Note that this will overwrite the previous value.

"); - $session_count = array(); - $session_count['0'] = 0; - $session_count['1'] = 1; - $session_count['2'] = 2; - $session_count['3'] = 3; - $session_count['4'] = 4; - $session_count['5'] = 5; + $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!

"); - $form['booking-leadhelp-count'] = array( + //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; + + //select the number of study group sessions + //assume they all have the same number of sessions + $num_sessions = reset($studygroups)->booking_num_group_sessions; + $session_options[0] = ''; + for ($i = 1; $i <= $num_sessions; $i++) + $session_options[$i] = $i; + + //select any entries already in the mapping table + $group_mapping_query = db_query("SELECT * FROM {booking_studygroup_mapping} WHERE booking_eventid = :eid", array(':eid' => $event->eid)); + $group_mapping = $group_mapping_query->fetchAllAssoc('sid'); + + + + //***form starts here*** + $form['booking_studygroup'] = array( '#type' => 'select', - '#title' => t('Set Number of Sessions'), + '#title' => t('Select which Study Group to process'), '#required' => TRUE, '#default_value' => '0', - '#options' => $session_count, - ); + '#options' => $group_options, + ); + $header = array ( - 'booking_nid' => array('data' => t('Booking ID')), - 'booking_name' => array('data' => t('Name')), - 'booking_gender' => array('data' => t('Gender')), - 'booking_baptised' => array('data' => t('Baptised?')), - 'booking_age' => array('data' => t('Age at start of event')), - 'booking_lead_sessions' => array('data' => t('Total number of groups to lead')), - 'booking_available_lead' => array('data' => t('Remaining slots')), - 'booking_help_sessions' => array('data' => t('Total number of groups to help')), - 'booking_available_help' => array('data' => t('Remaining slots')), - ); + '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 at week'), 'field' => 'booking_dob', 'sort' => 'asc'), + 'booking_state' => array('data' => t('State'), 'field' => 'booking_state'), + //'booking_assign_leader_group' => array('data' => t('Assign leader group')), + 'booking_assign_leader_session' => array('data' => t('Leader Session')), + //'booking_assign_helper_group' => array('data' => t('Assign helper group')), + 'booking_assign_helper_session' => array('data' => t('Helper Session')), + //'booking_lead_sessions' => array('data' => t('Total groups leading')), + //'booking_help_sessions' => array('data' => t('Total groups helping')), + 'booking_currently_leadhelp' => array('data' => t('Currently leading/helping')), + ); + + $query = db_select('booking_person', 'p'); + //$query->leftJoin('booking_leadhelp_list', 'l', 'p.nid = l.booking_node_id'); - $result = db_query("SELECT * FROM {booking_person} p left outer join {booking_leadhelp_list} l on p.nid = l.booking_node_id WHERE p.booking_event_id = :eid ORDER BY p.booking_gender DESC, p.booking_dob, p.booking_baptised", - array(':eid' => $event->eid)); + $db_and = db_and(); + $db_and->condition('p.booking_event_id', $event->eid, '='); + $db_and->condition('p.booking_gender', 'M', '='); + + $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 = ""; + + //work out what this person is currently leading/helping + foreach ($group_mapping as $person) + { + if ($person->booking_node_id == $data->nid) + { + 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 . "; "; + } + } + $options[$data->nid] = array ( 'booking_nid' => l(t('!id', array('!id' => $data->nid)), t('node/!id', array('!id' => $data->nid))), 'booking_name' => $data->booking_firstname . " " . $data->booking_lastname, - 'booking_gender' => $data->booking_gender == 'M' ? 'Male' : 'Female', + //'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_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_state' => $data->booking_state, + //'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 . ']', + ) + ), + /* + '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', + '#default_value' => 0, + '#options' => $session_options, + '#name' => 'booking_assign_helper_session[' . $data->nid . ']', + ) + ), + 'booking_currently_leadhelp' => $currently_doing, ); } @@ -67,8 +148,22 @@ function booking_available_leadhelp_select_form() { '#header' => $header, '#options' => $options, '#empty' => t('No attendees found.'), + '#attributes' => array('id' => 'sort-table'), ); + //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_helper_session'] = array( '#type' => 'value', ); + + + $form['submit'] = array ( + '#type' => 'submit', + '#value' => t('Submit'), + ); + + /* $form['submit-leader'] = array ( '#type' => 'submit', '#value' => t('Set Leader'), @@ -78,16 +173,35 @@ function booking_available_leadhelp_select_form() { '#type' => 'submit', '#value' => t('Set Helper'), ); - + */ return array ( 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), 'form' => $form, + 'last_para' => array ( + '#type' => 'markup', + '#markup' => $suffix, + ), ); } +/** + * Validate the submission for defining which study group sessions people will lead or help + */ +function booking_available_leadhelp_select_form_validate($form, &$form_state) { + + //check that a study group was selected + if ($booking_studygroup = $form_state['values']['booking_studygroup'] == 0) + { + form_set_error('booking_studygroup', + t('You forgot to select which study group to apply this list to.') + ); + } + +} + /** * Process the submission for number of study group sessions to lead/help */ @@ -95,6 +209,108 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { global $event; $counter = 0; $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']; + //$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($leader_list, TRUE))); + //watchdog('booking', "Helper list: @info", array('@info' => var_export($helper_list, TRUE))); + + //select any entries already in the mapping table + $group_mapping_query = db_query("SELECT * FROM {booking_studygroup_mapping} WHERE booking_eventid = :eid", array(':eid' => $event->eid)); + $group_mapping = $group_mapping_query->fetchAllAssoc('sid'); + + //update the attendees as specified + foreach($checkboxes as $key => $value) + { + $leader = 'N'; + $helper = 'N'; + $session = 0; + $found = FALSE; + + //was this person set as a leader? + if ($leader_session[$key] <> 0) + { + $leader = 'Y'; + $session = $leader_session[$key]; + watchdog('booking', 'Person !nid is set to be a leader in session !sid', array ('!nid' => $key, '!sid' => $leader_session[$key])); + } + //was this person set as a helper? + elseif ($helper_session[$key] <> 0) + { + $helper = 'Y'; + $session = $helper_session[$key]; + watchdog('booking', 'Person !nid is set to be a helper in session !sid', array ('!nid' => $key, '!sid' => $helper_session[$key])); + } + //if we reach the else something weird happened, make sure we don't insert + else + continue; + + //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')) + { + $found = TRUE; + break; + } + } + + if ($found == FALSE) + { + //run an insert + db_insert('booking_studygroup_mapping') + ->fields(array( + 'booking_eventid' => $event->eid, + 'booking_node_id' => $key, + 'booking_studygroup_id' => $booking_studygroup, + 'booking_session_id' => $session, + 'booking_is_leader' => $leader, + 'booking_is_helper' => $helper, + )) + ->execute(); + } + else + { + //run an update + db_update('booking_studygroup_mapping') + ->fields(array ( + 'booking_session_id' => $session, + 'booking_is_leader' => $leader, + 'booking_is_helper' => $helper, + )) + ->condition('booking_node_id', $key) + ->condition('booking_studygroup_id', $booking_studygroup) + ->execute(); + } + + $counter++; + +/* +$person = db_query("SELECT m.booking_node_id " . + "FROM {booking_studygroup_mapping} m " . + "WHERE booking_node_id = :nid AND booking_eventid = :eid AND booking_studygroup_id = :sid", + array(':nid' => $key, ':eid' => $event->eid, ':sid' = > $value)) + ->fetchObject(); +*/ + + + + + } + drupal_set_message("Defined leader/helper numbers for $counter people.", 'status', FALSE); + watchdog('booking', "Defined leader/helper numbers for $counter people."); + + + + + + + /* $session_count = $form_state['values']['booking-leadhelp-count']; foreach($checkboxes as $key => $value) @@ -178,7 +394,8 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { } drupal_set_message("Defined leader/helper numbers for $counter people.", 'status', FALSE); - watchdog('booking', "Defined leader/helper numbers for $counter people."); + watchdog('booking', "Defined leader/helper numbers for $counter people."); + */ } /** @@ -655,35 +872,43 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { $result = $table_sort->execute(); //watchdog('booking', 'Study groups raw data: @info', array ('@info' => var_export($result, TRUE))); + + //retrieve which sort is active in the current view + $sort = tablesort_get_order($header); + foreach($result as $data) { $class = ""; //apply theme as required - if ($data->booking_is_leader == 1) + if ($data->booking_is_leader == 'Y') $class = "leader-row"; - elseif ($data->booking_is_helper == 1) + elseif ($data->booking_is_helper == 'Y') $class = "helper-row"; else - $class = "normal-row"; - - //Add a different id for first entry of new session, with a border-top to distinguish it - if ($last_session <> $data->booking_session_id && $last_session <> "") + $class = "normal-row"; + + //only add the lines separating groups if we're sorting by the session id + if ($sort['sql'] == "m.booking_session_id") { - if ($class === "leader-row") - $class = "leader-new-group-row"; - elseif ($class === "helper-row") - $class = "helper-new-group-row"; - else - $class = "new-group-row"; + //Add a different id for first entry of new session, with a border-top to distinguish it + if ($last_session <> $data->booking_session_id && $last_session <> "") + { + if ($class === "leader-row") + $class = "leader-new-group-row"; + elseif ($class === "helper-row") + $class = "helper-new-group-row"; + else + $class = "new-group-row"; + } } $options[$data->nid] = array ( 'booking_session_id' => $data->booking_session_id, 'booking_name' => $data->booking_firstname . " " . $data->booking_lastname, - 'booking_is_leader' => $data->booking_is_leader == 1 ? 'Yes' : 'No', - 'booking_is_helper' => $data->booking_is_helper == 1 ? 'Yes' : 'No', + 'booking_is_leader' => $data->booking_is_leader == 'Y' ? 'Yes' : 'No', + 'booking_is_helper' => $data->booking_is_helper == 'Y' ? 'Yes' : 'No', '#attributes' => array('id' => array($class)) );