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
|
//see http://www.jaypan.com/blog/themeing-drupal-7-forms-tables-checkboxes-or-radios
|
||||||
$form = array ();
|
$form = array ();
|
||||||
$options = 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>");
|
$group_options = array();
|
||||||
$session_count = array();
|
$session_options = array();
|
||||||
$session_count['0'] = 0;
|
$prefix = t("<p>Allocate a leader/helper session for attendees. Note that at this stage there is no way to remove this data.</p>");
|
||||||
$session_count['1'] = 1;
|
$suffix = t("<p>Make sure you have selected a study group to apply these changes to!</p>");
|
||||||
$session_count['2'] = 2;
|
|
||||||
$session_count['3'] = 3;
|
|
||||||
$session_count['4'] = 4;
|
|
||||||
$session_count['5'] = 5;
|
|
||||||
|
|
||||||
$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',
|
'#type' => 'select',
|
||||||
'#title' => t('Set Number of Sessions'),
|
'#title' => t('Select which Study Group to process'),
|
||||||
'#required' => TRUE,
|
'#required' => TRUE,
|
||||||
'#default_value' => '0',
|
'#default_value' => '0',
|
||||||
'#options' => $session_count,
|
'#options' => $group_options,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
$header = array (
|
$header = array (
|
||||||
'booking_nid' => array('data' => t('Booking ID')),
|
'booking_nid' => array('data' => t('Booking ID'), 'field' => 'nid'),
|
||||||
'booking_name' => array('data' => t('Name')),
|
'booking_name' => array('data' => t('Name'), 'field' => 'booking_lastname'),
|
||||||
'booking_gender' => array('data' => t('Gender')),
|
//'booking_gender' => array('data' => t('Gender')),
|
||||||
'booking_baptised' => array('data' => t('Baptised?')),
|
'booking_baptised' => array('data' => t('Baptised?'), 'field' => 'booking_baptised'),
|
||||||
'booking_age' => array('data' => t('Age at start of event')),
|
'booking_age' => array('data' => t('Age at week'), 'field' => 'booking_dob', 'sort' => 'asc'),
|
||||||
'booking_lead_sessions' => array('data' => t('Total number of groups to lead')),
|
'booking_state' => array('data' => t('State'), 'field' => 'booking_state'),
|
||||||
'booking_available_lead' => array('data' => t('Remaining slots')),
|
//'booking_assign_leader_group' => array('data' => t('Assign leader group')),
|
||||||
'booking_help_sessions' => array('data' => t('Total number of groups to help')),
|
'booking_assign_leader_session' => array('data' => t('Leader Session')),
|
||||||
'booking_available_help' => array('data' => t('Remaining slots')),
|
//'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",
|
$db_and = db_and();
|
||||||
array(':eid' => $event->eid));
|
$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)
|
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 (
|
$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' => $data->booking_firstname . " " . $data->booking_lastname,
|
'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_baptised' => $data->booking_baptised == 'Y' ? 'Yes' : 'No',
|
||||||
'booking_age' => _booking_avg_age($data->booking_dob, 1, $event->booking_event_start),
|
'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_state' => $data->booking_state,
|
||||||
'booking_available_lead' => $data->booking_available_lead === NULL ? '0' : $data->booking_available_lead,
|
//'booking_lead_sessions' => $data->booking_total_lead === NULL ? '0' : $data->booking_total_lead,
|
||||||
'booking_help_sessions' => $data->booking_total_help === NULL ? '0' : $data->booking_total_help,
|
//'booking_available_lead' => $data->booking_available_lead === NULL ? '0' : $data->booking_available_lead,
|
||||||
'booking_available_help' => $data->booking_available_help === NULL ? '0' : $data->booking_available_help,
|
//'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,
|
'#header' => $header,
|
||||||
'#options' => $options,
|
'#options' => $options,
|
||||||
'#empty' => t('No attendees found.'),
|
'#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 (
|
$form['submit-leader'] = array (
|
||||||
'#type' => 'submit',
|
'#type' => 'submit',
|
||||||
'#value' => t('Set Leader'),
|
'#value' => t('Set Leader'),
|
||||||
@@ -78,16 +173,35 @@ function booking_available_leadhelp_select_form() {
|
|||||||
'#type' => 'submit',
|
'#type' => 'submit',
|
||||||
'#value' => t('Set Helper'),
|
'#value' => t('Set Helper'),
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
return array (
|
return array (
|
||||||
'first_para' => array (
|
'first_para' => array (
|
||||||
'#type' => 'markup',
|
'#type' => 'markup',
|
||||||
'#markup' => $prefix,
|
'#markup' => $prefix,
|
||||||
),
|
),
|
||||||
'form' => $form,
|
'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
|
* 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;
|
global $event;
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
$checkboxes = $form_state['values']['table'];
|
$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'];
|
$session_count = $form_state['values']['booking-leadhelp-count'];
|
||||||
|
|
||||||
foreach($checkboxes as $key => $value)
|
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);
|
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();
|
$result = $table_sort->execute();
|
||||||
|
|
||||||
//watchdog('booking', 'Study groups raw data: @info', array ('@info' => var_export($result, TRUE)));
|
//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)
|
foreach($result as $data)
|
||||||
{
|
{
|
||||||
$class = "";
|
$class = "";
|
||||||
|
|
||||||
//apply theme as required
|
//apply theme as required
|
||||||
if ($data->booking_is_leader == 1)
|
if ($data->booking_is_leader == 'Y')
|
||||||
$class = "leader-row";
|
$class = "leader-row";
|
||||||
elseif ($data->booking_is_helper == 1)
|
elseif ($data->booking_is_helper == 'Y')
|
||||||
$class = "helper-row";
|
$class = "helper-row";
|
||||||
else
|
else
|
||||||
$class = "normal-row";
|
$class = "normal-row";
|
||||||
|
|
||||||
//Add a different id for first entry of new session, with a border-top to distinguish it
|
//only add the lines separating groups if we're sorting by the session id
|
||||||
if ($last_session <> $data->booking_session_id && $last_session <> "")
|
if ($sort['sql'] == "m.booking_session_id")
|
||||||
{
|
{
|
||||||
if ($class === "leader-row")
|
//Add a different id for first entry of new session, with a border-top to distinguish it
|
||||||
$class = "leader-new-group-row";
|
if ($last_session <> $data->booking_session_id && $last_session <> "")
|
||||||
elseif ($class === "helper-row")
|
{
|
||||||
$class = "helper-new-group-row";
|
if ($class === "leader-row")
|
||||||
else
|
$class = "leader-new-group-row";
|
||||||
$class = "new-group-row";
|
elseif ($class === "helper-row")
|
||||||
|
$class = "helper-new-group-row";
|
||||||
|
else
|
||||||
|
$class = "new-group-row";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$options[$data->nid] = array (
|
$options[$data->nid] = array (
|
||||||
'booking_session_id' => $data->booking_session_id,
|
'booking_session_id' => $data->booking_session_id,
|
||||||
'booking_name' => $data->booking_firstname . " " . $data->booking_lastname,
|
'booking_name' => $data->booking_firstname . " " . $data->booking_lastname,
|
||||||
'booking_is_leader' => $data->booking_is_leader == 1 ? 'Yes' : 'No',
|
'booking_is_leader' => $data->booking_is_leader == 'Y' ? 'Yes' : 'No',
|
||||||
'booking_is_helper' => $data->booking_is_helper == 1 ? 'Yes' : 'No',
|
'booking_is_helper' => $data->booking_is_helper == 'Y' ? 'Yes' : 'No',
|
||||||
'#attributes' => array('id' => array($class))
|
'#attributes' => array('id' => array($class))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user