diff --git a/booking.install b/booking.install index cd485c2..e6fb9c6 100644 --- a/booking.install +++ b/booking.install @@ -265,6 +265,14 @@ function booking_update_7208() { db_change_field('booking_person', 'booking_welfare_required', 'booking_welfare_required', $spec); } +/** +* Add field for reserve leader +*/ +function booking_update_7209() { + $spec = array('type' => 'varchar', 'length' => '1', 'not null' => FALSE); + db_add_field( 'booking_studygroup_mapping', 'booking_is_reserveleader', $spec); +} + /** * Implementation of hook_install(). */ diff --git a/booking.module b/booking.module index f903935..19a1482 100644 --- a/booking.module +++ b/booking.module @@ -97,7 +97,13 @@ function booking_permission() { ), 'edit bookings' => array( 'title' => t('Edit all bookings'), + ), + 'view study groups' => array( + 'title' => t('View study groups'), ), + 'edit study groups' => array( + 'title' => t('Edit study groups'), + ), ); } @@ -278,26 +284,31 @@ function booking_menu() { 'access arguments' => array("access waiting list"), 'type' => MENU_NORMAL_ITEM, ); - - /** - * Define the administration menu - */ //configure study groups $items['admin/config/booking/studygroups'] = array( - 'title' => 'View All Study Groups', + 'title' => 'View Study Groups', 'description' => 'View Study Group memberships', 'page callback' => 'booking_studygroups_view_summary', - 'access arguments' => array("access administration pages"), + 'access arguments' => array("view study groups"), 'type' => MENU_NORMAL_ITEM, ); + $items['admin/config/booking/studygroups/%/view'] = array( + 'title' => 'View Study Group', + 'description' => 'View Study Group memberships', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_studygroups_view_form', 4), + 'access arguments' => array('view study groups'), + //'type' => MENU_NORMAL_ITEM, + ); + $items['admin/config/booking/studygroups/selectleaders'] = array( 'title' => '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'), - 'access arguments' => array('access administration pages'), + 'access arguments' => array('edit study groups'), 'type' => MENU_LOCAL_ACTION, ); @@ -306,21 +317,10 @@ function booking_menu() { 'description' => 'Calculate Study Group memberships', 'page callback' => 'drupal_get_form', 'page arguments' => array('booking_studygroups_calculate'), - 'access arguments' => array('access administration pages'), + 'access arguments' => array('edit study groups'), 'type' => MENU_LOCAL_ACTION, ); - - - $items['admin/config/booking/studygroups/%/view'] = array( - 'title' => 'View Study Group', - 'description' => 'View Study Group memberships', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('booking_studygroups_view_form', 4), - 'access arguments' => array('access administration pages'), - //'type' => MENU_NORMAL_ITEM, - ); - //Configure prices $items['admin/config/booking/prices/create'] = array( 'title' => 'Add New Price Entry', diff --git a/booking.register.inc b/booking.register.inc index 3cfc866..3ee0d3a 100644 --- a/booking.register.inc +++ b/booking.register.inc @@ -809,8 +809,12 @@ function _booking_validate($node, &$form_state) { //if DOB on form is more recent than DOB limit, display validation error if ($dob_check > _booking_max_dob_ts()) + { + watchdog('booking', "Attempt to register from !first !last, who is too young (!info) to attend event.", + array ('!first' => $form_state['booking_firstname'], '!last' => $form_state['booking_lastname'], '!info' => var_export($form_state['booking_dob'], TRUE) ) ); form_set_error('booking_dob', t('Unfortunately you are too young to attend !event.', - array('!event' => variable_get('booking_event_name','this event')))); + array ('!event' => variable_get('booking_event_name','this event')))); + } //check the terms and conditions have been agreed to if ($form_state['booking_agreement'] == 0) diff --git a/booking.reports.inc b/booking.reports.inc index 618f520..baddf37 100644 --- a/booking.reports.inc +++ b/booking.reports.inc @@ -371,6 +371,18 @@ function booking_waitinglist_page() { return $output; } +function ucname($string) { + $string =ucwords(strtolower($string)); + + foreach (array('-', '\'') as $delimiter) { + if (strpos($string, $delimiter)!==false) { + $string =implode($delimiter, array_map('ucfirst', explode($delimiter, $string))); + } + } + return $string; +} + + /** * Generate a CSV file as a report of all current registrations */ @@ -400,7 +412,7 @@ function booking_csv_report() { */ //pivot table based on http://anothermysqldba.blogspot.de/2013/06/pivot-tables-example-in-mysql.html - $query = db_query("select distinct p.*, s1.booking_session_id as session1, s1.booking_is_leader as session1_leader, s1.booking_is_helper as session1_helper, s2.booking_session_id as session2, s2.booking_is_leader as session2_leader, s2.booking_is_helper as session2_helper, s3.booking_session_id as session3, s3.booking_is_leader as session3_leader, s3.booking_is_helper as session3_helper, s4.booking_session_id as session4, s4.booking_is_leader as session4_leader, s4.booking_is_helper as session4_helper, s5.booking_session_id as session5, s5.booking_is_leader as session5_leader, s5.booking_is_helper as session5_helper, s6.booking_session_id as session6, s6.booking_is_leader as session6_leader, s6.booking_is_helper as session6_helper from {booking_person} p + $query = db_query("select distinct p.*, s1.booking_session_id as session1, s1.booking_is_leader as session1_leader, s1.booking_is_reserveleader as session1_reserveleader, s1.booking_is_helper as session1_helper, s2.booking_session_id as session2, s2.booking_is_leader as session2_leader, s2.booking_is_reserveleader as session2_reserveleader, s2.booking_is_helper as session2_helper, s3.booking_session_id as session3, s3.booking_is_leader as session3_leader, s3.booking_is_reserveleader as session3_reserveleader, s3.booking_is_helper as session3_helper, s4.booking_session_id as session4, s4.booking_is_leader as session4_leader, s4.booking_is_reserveleader as session4_reserveleader, s4.booking_is_helper as session4_helper, s5.booking_session_id as session5, s5.booking_is_leader as session5_leader, s5.booking_is_reserveleader as session5_reserveleader, s5.booking_is_helper as session5_helper, s6.booking_session_id as session6, s6.booking_is_leader as session6_leader, s6.booking_is_reserveleader as session6_reserveleader, s6.booking_is_helper as session6_helper from {booking_person} p left outer join {booking_studygroup_mapping} s1 on p.nid = s1.booking_node_id and s1.booking_studygroup_id = 1 left outer join {booking_studygroup_mapping} s2 on p.nid = s2.booking_node_id and s2.booking_studygroup_id = 2 left outer join {booking_studygroup_mapping} s3 on p.nid = s3.booking_node_id and s3.booking_studygroup_id = 3 @@ -449,6 +461,10 @@ function booking_csv_report() { continue; } + //capitalise street name and suburb name + if ($key == 'booking_street' || $key == 'booking_suburb') + $value = ucname($value); + //handle dates if ($key == 'booking_dob') { $output[] = format_date($value, 'custom', 'd/m/Y'); diff --git a/booking.studygroups.inc b/booking.studygroups.inc index 2c848ba..867b0e8 100644 --- a/booking.studygroups.inc +++ b/booking.studygroups.inc @@ -47,19 +47,16 @@ function booking_available_leadhelp_select_form() { ); $header = array ( - //'booking_nid' => array('data' => t('Booking ID'), 'field' => 'nid'), + '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'), 'booking_status' => array('data' => t('Status'), 'field' => 'booking_status'), - //'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_assign_helper_session' => array('data' => t('Helper Session')), + 'booking_assign_reserveleader_session' => array('data' => t('Reserve Leader Session')), 'booking_currently_leadhelp' => array('data' => t('Currently leading/helping')), ); @@ -89,11 +86,13 @@ function booking_available_leadhelp_select_form() { $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 . "; "; } } $options[$data->nid] = array ( - //'booking_nid' => l(t('!id', array('!id' => $data->nid)), t('node/!id', array('!id' => $data->nid))), + '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', @@ -132,11 +131,16 @@ function booking_available_leadhelp_select_form() { */ 'booking_assign_helper_session' => array('data' => array( '#type' => 'select', - //'#default_value' => 0, '#options' => $session_options, '#name' => 'booking_assign_helper_session[' . $data->nid . ']', ) ), + 'booking_assign_reserveleader_session' => array('data' => array( + '#type' => 'select', + '#options' => $session_options, + '#name' => 'booking_assign_reserveleader_session[' . $data->nid . ']', + ) + ), 'booking_currently_leadhelp' => $currently_doing, ); } @@ -150,9 +154,10 @@ 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_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', ); @@ -199,12 +204,13 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { $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']; + $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))); - //watchdog('booking', "Helper list: @info", array('@info' => var_export($helper_list, TRUE))); + //watchdog('booking', "Helper list: @info", array('@info' => var_export($reserve_leader_session, 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)); @@ -215,6 +221,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { { $leader = 'N'; $helper = 'N'; + $reserve_leader = 'N'; $session = 0; $found = FALSE; @@ -225,11 +232,12 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { ->condition('booking_eventid', $event->eid) ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) - ->condition('booking_session_id', $leader_session[$key]) + // ->condition('booking_session_id', $leader_session[$key]) ->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)); //skip to the next person + $counter++; continue; } //remove from being a helper? @@ -239,13 +247,30 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { ->condition('booking_eventid', $event->eid) ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) - ->condition('booking_session_id', $helper_session[$key]) + // ->condition('booking_session_id', $helper_session[$key]) ->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 + $counter++; continue; } + //remove from being a reserve leader? + elseif ($reserve_leader_session[$key] == "Remove") + { + $num_deleted = db_delete('booking_studygroup_mapping') + ->condition('booking_eventid', $event->eid) + ->condition('booking_node_id', $key) + ->condition('booking_studygroup_id', $booking_studygroup) + // ->condition('booking_session_id', $reserve_leader_session[$key]) + ->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)); + //skip to the next person + $counter++; + continue; + } //was this person set as a leader? elseif ($leader_session[$key] <> 0) { @@ -259,7 +284,13 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { $helper = 'Y'; $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)); - } + } + elseif ($reserve_leader_session[$key] <> 0) + { + $reserve_leader = 'Y'; + $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)); + } //if we reach the else something weird happened, make sure we don't insert else continue; @@ -286,6 +317,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { 'booking_session_id' => $session, 'booking_is_leader' => $leader, 'booking_is_helper' => $helper, + 'booking_is_reserveleader' => $reserve_leader, )) ->execute(); } @@ -297,6 +329,7 @@ function booking_available_leadhelp_select_form_submit($form, &$form_state) { 'booking_session_id' => $session, 'booking_is_leader' => $leader, 'booking_is_helper' => $helper, + 'booking_is_reserveleader' => $reserve_leader, )) ->condition('booking_node_id', $key) ->condition('booking_studygroup_id', $booking_studygroup) @@ -427,7 +460,7 @@ function booking_studygroups_calculate() { //search for the leaders and helpers for this study group foreach ($group_mapping as $person) { - if ($person->booking_studygroup_id == $group->sid && ($person->booking_is_leader == 'Y' || $person->booking_is_helper == 'Y')) + if ($person->booking_studygroup_id == $group->sid && ($person->booking_is_leader == 'Y' || $person->booking_is_helper == 'Y' || $person->booking_is_reserveleader == 'Y')) { drupal_set_message(t('Leader/helper with id !id assigned to session !session (currently with !num people).', array('!id' => $person->booking_node_id, '!session' => $person->booking_session_id, '!num' => $session_count[$person->booking_session_id]))); @@ -686,9 +719,10 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { $header = array( 'booking_session_id' => array('data' => t('Study Group Session'), 'field' => 'm.booking_session_id', 'sort' => 'asc'), - 'booking_name' => array('data' => t('Name'), 'field' => 'p.booking_lastname', 'sort' => 'asc'), - 'booking_is_leader' => array('data' => t('Leader?'), 'field' => 'm.booking_is_leader', 'sort' => 'asc'), - 'booking_is_helper' => array('data' => t('Helper?'), 'field' => 'm.booking_is_helper', 'sort' => 'asc'), + 'booking_name' => array('data' => t('Name'), 'field' => 'p.booking_lastname'), + 'booking_is_leader' => array('data' => t('Leader?'), 'field' => 'm.booking_is_leader'), + 'booking_is_helper' => array('data' => t('Helper?'), 'field' => 'm.booking_is_helper'), + 'booking_is_reserveleader' => array('data' => t('Reserve Leader?'), 'field' => 'm.booking_is_reserveleader'), ); $query = db_select('booking_person', 'p'); @@ -719,6 +753,8 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { $class = "leader-row"; elseif ($data->booking_is_helper == 'Y') $class = "helper-row"; + elseif ($data->booking_is_reserveleader == 'Y') + $class = "helper-row"; else $class = "normal-row"; @@ -742,6 +778,7 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { 'booking_name' => $data->booking_firstname . " " . $data->booking_lastname, 'booking_is_leader' => $data->booking_is_leader == 'Y' ? 'Yes' : 'No', 'booking_is_helper' => $data->booking_is_helper == 'Y' ? 'Yes' : 'No', + 'booking_is_reserveleader' => $data->booking_is_reserveleader == 'Y' ? 'Yes' : 'No', '#attributes' => array('id' => array($class)) );