Bugfixes for updating studygroups

This commit is contained in:
Nathan Coad
2014-05-26 23:33:42 +10:00
parent 7e464bca59
commit ad666a34ee
3 changed files with 117 additions and 92 deletions

View File

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

View File

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

View File

@@ -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("<p>Allocate a leader/helper session for attendees. Note that at this stage there is no way to remove this data.</p>");
$suffix = t("<p>Make sure you have selected a study group to apply these changes to!</p>");
//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("<h2>Study Group &dash; !descrip</h2><p>Allocate a leader/helper session for attendees.</p>",
array('!descrip' => $studygroup->booking_studygroup_descrip));
$suffix = t("<p>Make sure you have selected a study group to apply these changes to!</p>");
//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;
@@ -40,16 +54,13 @@ function booking_available_leadhelp_select_form() {
//***form starts here***
$form['booking_studygroup'] = array (
'#type' => 'select',
'#title' => t('Select which Study Group to process'),
'#required' => TRUE,
'#options' => $group_options,
'#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)
foreach ($group_mapping as $group)
{
if ($person->booking_node_id == $data->nid)
$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', "<pre>Study Groups Edit submission:\n@info</pre>", array('@info' => print_r( $form_state, true)));
//watchdog('booking', "<pre>Study Groups Edit submission:\n@info</pre>", 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', "<pre>Study Groups person mapping:\n@info</pre>", 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', "<pre>Study Group key:\n@key\nValue\n@value</pre>", 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', "<pre>Study Group key:\n@key\nValue\n@value</pre>", 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<pre>@info</pre>", 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<pre>@info</pre>",
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")