Added reserve leader

This commit is contained in:
2014-02-11 15:17:26 +11:00
parent fa2fb84f0e
commit 7c252d4ff6
5 changed files with 105 additions and 40 deletions

View File

@@ -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().
*/

View File

@@ -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',

View File

@@ -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)

View File

@@ -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');

View File

@@ -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))
);