tidy up and variety validation work

This commit is contained in:
Nathan Coad
2018-05-03 08:09:29 +10:00
parent 145e914f5e
commit 8b133cf160
7 changed files with 1008 additions and 845 deletions

View File

@@ -28,7 +28,7 @@ function booking_variety_admin()
'variety_session_add' => t('Add Session'),
);
$result = db_query("SELECT * from {booking_variety_times}");
$result = db_query("SELECT * from {booking_variety_timeslots}");
foreach($result as $data)
{
@@ -83,7 +83,7 @@ function booking_variety_timeslot_form($node, &$form_state, $create, $editid = 0
return "";
}
$data = db_select ('booking_variety_times', 'v')
$data = db_select ('booking_variety_timeslots', 'v')
->condition('v.tid', $editid, '=')
->fields('v')
->execute()
@@ -165,7 +165,7 @@ function booking_variety_timeslot_form_submit($form, &$form_state) {
if ($form_state['values']['op'] == 'Create')
{
db_insert('booking_variety_times')
db_insert('booking_variety_timeslots')
->fields(array(
'booking_eventid' => $event->eid,
'booking_variety_status' => $values['booking_variety_status'] == 1 ? 1 : 0,
@@ -183,7 +183,7 @@ function booking_variety_timeslot_form_submit($form, &$form_state) {
return "";
}
$num_deleted = db_delete('booking_variety_times')
$num_deleted = db_delete('booking_variety_timeslots')
->condition('tid', $values['tid'])
->execute();
@@ -200,7 +200,7 @@ function booking_variety_timeslot_form_submit($form, &$form_state) {
}
//update the event
db_update('booking_variety_times')
db_update('booking_variety_timeslots')
->fields(array (
'booking_eventid' => $event->eid,
'booking_variety_time_descrip' => $values['booking_variety_time_descrip'],
@@ -230,7 +230,7 @@ function booking_variety_create_session_form($node, &$form_state, $timeslot_id =
}
/*
$data = db_select ('booking_variety_times', 'v')
$data = db_select ('booking_variety_timeslots', 'v')
->condition('v.tid', $editid, '=')
->fields('v')
->execute()
@@ -286,7 +286,7 @@ function booking_variety_create_session_form_submit($form, &$form_state) {
global $event;
$values = $form_state['input'];
db_insert('booking_variety_options')
db_insert('booking_variety_sessions')
->fields(array(
'booking_eventid' => $event->eid,
'booking_variety_timeslot_id' => $values['tid'],
@@ -317,8 +317,8 @@ function booking_variety_list_session_form($node, &$form_state, $timeslot_id = 0
$prefix = t("<p>!link</p>",
array ('!link' => l('Add New Variety Session', "admin/config/booking/variety/$timeslot_id/session/create")));
$query = db_select ('booking_variety_options', 'v');
$query->join('booking_variety_times', 't', 'v.booking_variety_timeslot_id = t.tid');
$query = db_select ('booking_variety_sessions', 'v');
$query->join('booking_variety_timeslots', 't', 'v.booking_variety_timeslot_id = t.tid');
$query->condition('v.booking_variety_timeslot_id', $timeslot_id, '=')
->fields('v')
->fields('t', array('booking_variety_time_descrip'));
@@ -368,3 +368,121 @@ function booking_variety_edit_session_form()
{
}
/**
* Function to generate a CSV file listing the session membership for the specified variety session timeslot
*/
function booking_varietysessions_csv_report($timeslot_id) {
global $event;
$data = array();
//verify that $group_id is a number
if (! preg_match('/^[0-9]+$/', $timeslot_id)) {
drupal_set_message("Error: Invalid variety session timeslot ID '" . $group_id . "' supplied.", 'error', FALSE);
drupal_goto('admin/booking/studygroups');
return "";
}
// TODO - UPDATE FROM HERE ON!
//retrieve the name of the study group for the specified ID
$group = db_query("SELECT * FROM {booking_studygroup_list} WHERE booking_eventid = :eid and sid = :sid",
array(':eid' => $event->eid, ':sid' => $group_id))
->fetchObject();
if (! $group)
{
drupal_set_message("Error: Could not find matching study group ID. Unable to view group membership.", 'error', FALSE);
drupal_goto('admin/booking/studygroups');
return "";
}
//set options for the CSV file
$name = 'bookings-studygroup-' . $group->booking_studygroup_descrip . '-' . format_date(time(), 'custom', 'Y-m-d-His');
$filename = file_directory_temp() . '/' . $name;
$csv = '';
$delimiter = ',';
$enclosure = '"';
$encloseAll = true;
$nullToMysqlNull = true;
$delimiter_esc = preg_quote($delimiter, '/');
$enclosure_esc = preg_quote($enclosure, '/');
//get the list of study group session memberships
$session_members_query = db_query("SELECT m.*, p.* FROM {booking_studygroup_mapping} m
inner join {booking_person} p on p.nid = m.booking_node_id
WHERE m.booking_studygroup_id = :sid ORDER BY m.booking_session_id, m.booking_studygroup_role DESC, p.booking_lastname",
array(':sid' => $group_id));
$session_members = $session_members_query->fetchAll();
//generate the row data
foreach ($session_members as $member) {
if (! isset($data[$member->booking_session_id])) {
$data[$member->booking_session_id] = array();
}
// lookup the name and role for this entry in the study group session and optionally include age
if (variable_get('booking_studygroup_csv_ages', 0) == 1) {
$text = array($member->booking_firstname, $member->booking_lastname, '[' . _booking_get_age_years($member->booking_dob) .']');
}
else {
$text = array($member->booking_firstname, $member->booking_lastname);
}
//add their role if they're leading/helping etc
if ($member->booking_studygroup_role > 0) {
array_push($text, '(' . _booking_studygroup_role_lookup($member->booking_studygroup_role) . ')');
}
//also tag committee members
if ($member->booking_committee_member == 'Y') {
array_push($text, '(committee)');
}
//add the spaces and put this element in the right array
$data[$member->booking_session_id][] = implode(' ', $text);
}
//watchdog('booking_debug', "<pre>Study Group CSV Report\n@info</pre>", array('@info' => print_r( $data_array, true)));
//calculate the CSV layout
$header_array = array_keys($data);
$maximums = array();
$column_headings = array();
foreach ($header_array as $column) {
$maximums[] = count($data[$column]);
//make the column headings a bit more user friendly
if ($group->booking_is_readinggroup == 'Y') {
$column_headings[] = _booking_readinggroup_colour_lookup($column);
}
else {
$column_headings[] = "Session " . $column;
}
}
//add the column headings to the CSV
$header = implode( $delimiter, $column_headings );
$csv .= $header . "\n";
//generate each row for the CSV
for ($i = 0; $i < max($maximums); $i++) {
$output = array();
foreach ($header_array as $column) {
$field = isset($data[$column][$i]) ? $data[$column][$i] : '';
//enclose $field if necessary
if ( $encloseAll || preg_match( "/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field ) ) {
$output[] = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure;
}
else {
$output[] = $field;
}
} //loop through columns
$row = implode($delimiter, $output) . "\n";
$csv .= $row;
}
//output the CSV to the browser
drupal_add_http_header("Content-type", "application/octet-stream; charset=utf-8");
drupal_add_http_header("Content-Disposition", "attachment; filename=" . $name . ".csv");
print $csv;
exit(0);
}