From f6f7a0504167dea6698d0ae1056fb6879f35efae Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Tue, 17 May 2016 20:07:06 +1000 Subject: [PATCH] initial code for exporting study groups as CSV --- .DS_Store | Bin 0 -> 6148 bytes booking.module | 10 ++++ booking.studygroups_report.inc | 97 +++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 .DS_Store create mode 100644 booking.studygroups_report.inc diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..556a339970fde6dbbc6c04acaf294a5a7c8ecf43 GIT binary patch literal 6148 zcmeHKJ5Iw;5Znb9k!VsWOwtcssRL&=iTgi>= z-u(fZ~t`mOphN>x0V+TRP72ufp}-C6#39f>9SA-G0PQ#44c9(P0E;Dnb>a|+3`~Ox465dcp+QH! zWL=#&1O{C+hY!s=YfdQYcgOj~%SG!zMk+uB#tK}K zG;6$4_SVVES+6bd2l$Vn*2@vR6$8B$V_~iM`mC#>1%5+; EZ$%m?WdHyG literal 0 HcmV?d00001 diff --git a/booking.module b/booking.module index df0255b..6f610ff 100644 --- a/booking.module +++ b/booking.module @@ -56,6 +56,7 @@ module_load_include('inc', 'booking', 'booking.variety'); module_load_include('inc', 'booking', 'booking.studygroups'); // Load the include for study group definitions module_load_include('inc', 'booking', 'booking.studygroups_admin'); +module_load_include('inc', 'booking', 'booking.studygroups_report'); module_load_include('inc', 'booking', 'booking.studygroup_leaders'); // Load the include for the travel form module_load_include('inc', 'booking', 'booking.travel'); @@ -480,6 +481,15 @@ function booking_menu() { //'type' => MENU_NORMAL_ITEM, ); + $items['admin/booking/studygroups/%/view/csv'] = array( + 'title' => 'Export Study Group', + 'description' => 'Export Study Group memberships as CSV', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_studygroups_csv_report', 3), + 'access arguments' => array('view study groups'), + //'type' => MENU_NORMAL_ITEM, + ); + $items['admin/booking/studygroups/%/selectleaders'] = array( 'title' => 'Select Study Group Leaders', 'description' => 'Define attendees to lead or help study groups', diff --git a/booking.studygroups_report.inc b/booking.studygroups_report.inc new file mode 100644 index 0000000..4109064 --- /dev/null +++ b/booking.studygroups_report.inc @@ -0,0 +1,97 @@ + $event->eid, ':sid' => $group_id)); + $studygroups = $studygroups_query->fetchAllAssoc('sid'); + + //get the list of study group session memberships + $session_members_query = db_query("SELECT * FROM {booking_studygroup_mapping} WHERE booking_studygroup_id = :sid", + array(':sid' => $group_id)); + $session_members = $session_members_query->fetchAll(); + + //set up the column headings + foreach ($studygroups as $studygroup) { + $header_array[] = $studygroup->sid; + } + $header = implode( $delimiter, $header_array ); + $csv .= $header . "\n"; + + //calculate the row data + foreach ($session_members as $member) { + if (! isset($data_array[$member->booking_session_id])) { + $data_array[$member->booking_session_id] = new stdClass(); + } + // @todo + // lookup the actual name and put this instead of just the node id + + $data_array[$member->booking_session_id][] = $member->booking_node_id; + } + + $out = fopen('php://output', 'w'); + fputcsv2 ($out, $data_array); + fclose($out); +} + +/** + * Function taken from http://php.net/manual/en/function.fputcsv.php#87120 + */ +function fputcsv2 ($fh, array $fields, $delimiter = ',', $enclosure = '"', $mysql_null = false) { + $delimiter_esc = preg_quote($delimiter, '/'); + $enclosure_esc = preg_quote($enclosure, '/'); + + $output = array(); + foreach ($fields as $field) { + if ($field === null && $mysql_null) { + $output[] = 'NULL'; + continue; + } + + $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field) ? ( + $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure + ) : $field; + } + + fwrite($fh, join($delimiter, $output) . "\n"); +} \ No newline at end of file