Refactor the way leaders/helpers are selected
This commit is contained in:
@@ -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("<p>Specify the number of leader or helper sessions for each attendee. Note that this will overwrite the previous value.</p>");
|
||||
$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("<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>");
|
||||
|
||||
$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))
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user