From e83db04800bfdf85d7cc76d63e5b91d87f542c08 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Fri, 20 Jun 2014 13:07:46 +1000 Subject: [PATCH] Add token for leader-helper pairs --- booking.helper.inc | 86 +++++++++++++++++++++++++++++++++++++++++ booking.install | 12 +++++- booking.rooms.inc | 5 ++- booking.studygroups.inc | 48 ++++++++++++++++++++--- booking.tokens.inc | 5 +++ 5 files changed, 147 insertions(+), 9 deletions(-) diff --git a/booking.helper.inc b/booking.helper.inc index 9d5af32..8ebd41d 100644 --- a/booking.helper.inc +++ b/booking.helper.inc @@ -1180,6 +1180,92 @@ function _booking_studygroup_email_summary($node) { return implode("\n", $rows); } +/** + * Helper function to format information matching leaders and helpers, to be used as a token + */ +function _booking_leader_helper_email_summary($node) { + global $event; + $rows = array(); + $found = FALSE; + + //display study session data if enabled + if (variable_get('booking_enable_studygroups', 0) == 1) + { + //look up the titles of the study groups + $studygroups_query = db_query("SELECT * FROM {booking_studygroup_list} WHERE booking_eventid = :eid", + array(':eid' => $event->eid)); + $studygroups = $studygroups_query->fetchAllAssoc('sid'); + + for ($i = 1; $i <= variable_get('booking_studygroup_count','0'); $i++) + { + //don't print info about the readings groups + if ($i == variable_get('booking_readinggroup_id','7')) + continue; + + //calculate the session references + $sessionid = "session" . $i; + $roleid = $sessionid . "_role"; + $otherperson_name = "TBA"; + + //check that this study group session has been defined for this attendee and that they + if (!empty($node->$sessionid) && $node->$roleid > 0) + { + //make sure we only add this prefix text once, as soon as we've found a matching role + if ($found == FALSE) + { + $found = TRUE; + $rows[] = t("You have been assigned to perform the following roles for study groups:"); + } + + //TODO: use a function for this. + //if they're a leader or reserver leader, then the matching person is the helper + if ($node->$roleid == 1 || $node->$roleid == 3) + { + $role = "Leader"; + $otherrole = "Helper"; + $otherrole_id = 2; + } + //otherwise the matching person is the leader + else + { + $role = "Helper"; + $otherrole = "Leader"; + $otherrole_id = 1; + } + + //find the other person + $otherperson_query = db_query("SELECT m.*, p.booking_firstname, p.booking_lastname FROM {booking_studygroup_mapping} m " . + " INNER JOIN {booking_person} p on m.booking_node_id = p.nid " . + " WHERE booking_eventid = :eid " . + " AND booking_studygroup_id = :group AND booking_studygroup_role = :role AND booking_session_id = :session", + array(':eid' => $event->eid, ':group' => $i, ':role' => $otherrole_id, ':session' => $node->$sessionid, + )); + $otherperson = $otherperson_query->fetchAll(); + + watchdog('booking', "
Other person for studygroup !group and role !role result:\n@info
", + array('!group' => $i, '!role' => $otherrole_id, '@info' => print_r( $otherperson, true))); + + foreach ($otherperson as $other) + { + $otherperson_name = $other->booking_firstname . ' ' . $other->booking_lastname; + } + + + $rows[] = t('!role for !descrip (section !id). Your !otherrole is !other.', + array('!role' => $role, '!id' => $studygroups[$i]->sid, '!descrip' => $studygroups[$i]->booking_studygroup_descrip, + '!otherrole' => $otherrole, '!other' => $otherperson_name, + )); + + } + } + } + + foreach ($rows as $key => $value) + $rows[$key] = wordwrap($value); + + return implode("\n", $rows); +} + /** * Helper function to format summary of room allocation to be used as a token */ diff --git a/booking.install b/booking.install index c39e4f0..a4a4ef0 100644 --- a/booking.install +++ b/booking.install @@ -354,10 +354,12 @@ function booking_update_7215() { function booking_update_7216() { $booking_room_mapping = array( 'fields' => array( + 'mid' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, 'disp-width' => '10'), 'booking_roomid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE, 'disp-width' => '10', 'default' => 0), 'booking_eventid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE, 'disp-width' => '10', 'default' => 0), 'booking_nodeid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE, 'disp-width' => '10', 'default' => 0), - ), + ), + 'primary key' => array('mid'), ); db_create_table('booking_room_mapping', $booking_room_mapping); @@ -383,6 +385,14 @@ function booking_update_7218() { db_add_field('booking_room_mapping', 'booking_room_bedtype', $spec); } +/** +* Add index to room mapping table +*/ +function booking_update_7219() { + //$spec = array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, 'disp-width' => '10'); + //db_add_field('booking_room_mapping', 'rid', $spec); + //db_add_index('booking_room_mapping', 'rid', array('booking_roomid', 'booking_eventid', 'booking_nodeid')); +} /** * Implementation of hook_install(). diff --git a/booking.rooms.inc b/booking.rooms.inc index 442f59c..50efbb0 100644 --- a/booking.rooms.inc +++ b/booking.rooms.inc @@ -440,8 +440,9 @@ function booking_room_edit_form_submit($form, &$form_state) { 'booking_roomid' => $details->rid, 'booking_room_bedtype' => $values['booking_room_bedtype'], )) - ->condition('booking_eventid', $event->eid) - ->condition('booking_nodeid', $values['personid']) + ->condition('mid', $check->mid) + //->condition('booking_eventid', $event->eid) + //->condition('booking_nodeid', $values['personid']) ->execute(); } diff --git a/booking.studygroups.inc b/booking.studygroups.inc index deb7e78..d75b935 100644 --- a/booking.studygroups.inc +++ b/booking.studygroups.inc @@ -1484,10 +1484,11 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { ); //attach the custom css + /* $form['#attached']['css'] = array( drupal_get_path('module', 'booking') . '/booking.css', ); - + */ //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 view group membership.", 'error', FALSE); @@ -1515,8 +1516,14 @@ 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'), - 'booking_status' => array('data' => t('Booking Status'), 'field' => 'p.booking_status'), + 'booking_gender' => array('data' => t('Gender'), 'field' => 'p.booking_gender'), + 'booking_age' => array('data' => t('Age'), 'field' => 'p.booking_dob'), + 'booking_baptised' => array('data' => t('Baptised?'), 'field' => 'p.booking_baptised'), + 'booking_married' => array('data' => t('Married?'), 'field' => 'p.booking_married'), + 'booking_phone' => array('data' => t('Phone Number'), 'field' => 'p.booking_mobile'), + //'booking_status' => array('data' => t('Booking Status'), 'field' => 'p.booking_status'), 'booking_studygroup_role' => array('data' => t('Studygroup Role'), 'field' => 'p.booking_studygroup_role'), + 'booking_committee' => array('data' => t('Committee Member?'), 'field' => 'p.booking_committee_member'), //'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'), @@ -1581,37 +1588,66 @@ function booking_studygroups_view_form($node, &$form_state, $group_id) { } $session = $is_reading_group == TRUE ? _booking_readinggroup_colour_lookup($data->booking_session_id) : $data->booking_session_id; - + /* $options[$data->nid] = array ( 'booking_session_id' => $session, 'booking_name' => l(t('!first !last', array('!first' => $data->booking_firstname, '!last' => $data->booking_lastname)), t('admin/booking/!id/edit-studygroup', array('!id' => $data->nid))), 'booking_status' => _booking_status_generate($data->booking_status), 'booking_studygroup_role' => _booking_studygroup_role_lookup($data->booking_studygroup_role), + 'booking_committee' => $data->booking_committee_member == 'Y' ? 'Yes' : 'No', //'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)) ); + */ + + $rows[] = array ( + 'data' => array( + $session, + l(t('!first !last', array('!first' => $data->booking_firstname, '!last' => $data->booking_lastname)), + t('admin/booking/!id/edit-studygroup', array('!id' => $data->nid))), + //_booking_status_generate($data->booking_status), + $data->booking_gender == 'M' ? 'Male' : 'Female', + _booking_get_age_years($data->booking_dob), + $data->booking_baptised == 'Y' ? 'Yes' : 'No', + $data->booking_married == 'Y' ? 'Yes' : 'No', + $data->booking_mobile, + _booking_studygroup_role_lookup($data->booking_studygroup_role), + $data->booking_committee_member == 'Y' ? 'Yes' : 'No', + ), + 'id' => array($class), + ); $last_session = $data->booking_session_id; } $prefix = t("

Study Group !descrip

", array('!descrip' => $group->booking_studygroup_descrip)); - + /* $form['table'] = array ( '#type' => 'tableselect', '#header' => $header, '#options' => $options, //'#attributes' => array('id' => 'sort-table'), ); - +*/ return array ( + '#attached' => array ( + 'css' => array(drupal_get_path('module', 'booking') . '/booking.css') + ), 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), - 'form' => $form, + 'table' => array ( + '#theme' => 'table', + '#header' => $header, + '#rows' => $rows, + '#attributes' => array('id' => 'sort-table'), + //'#sticky' => FALSE, + ) + //'form' => $form, ); } diff --git a/booking.tokens.inc b/booking.tokens.inc index d20697b..d87fc3c 100644 --- a/booking.tokens.inc +++ b/booking.tokens.inc @@ -580,6 +580,10 @@ function booking_token_info() { 'name' => t('Registration Study Group Summary'), 'description' => t('Summary of allocated study groups.') ); + $info['tokens']['booking']['leaderhelper-pair'] = array( + 'name' => t('Registration Study Group Leader-Helper Pair'), + 'description' => t('List out the leader and helper pairs, with intro text.') + ); $info['tokens']['booking']['room-allocation'] = array( 'name' => t('Room Allocation'), 'description' => t('Details of room allocated to attendee.') @@ -709,6 +713,7 @@ function booking_define_personspecific_tokens($node) $tokens['regn-summary'] = _booking_details_email_summary($node); $tokens['travel-summary'] = _booking_travelform_email_summary($node); $tokens['studygroup-summary'] = _booking_studygroup_email_summary($node); + $tokens['leaderhelper-pair'] = _booking_leader_helper_email_summary($node); $tokens['room-allocation'] = _booking_room_email_summary($node); $tokens['bed-type'] = _booking_room_bedtype_lookup($node->booking_room_bedtype);