diff --git a/booking.studygroups_report.inc b/booking.studygroups_report.inc index f6b2d42..0684811 100644 --- a/booking.studygroups_report.inc +++ b/booking.studygroups_report.inc @@ -5,6 +5,7 @@ */ function booking_studygroups_csv_report($group_id) { global $event; + $data = array(); //verify that $group_id is a number if (! preg_match('/^[0-9]+$/', $group_id)) { @@ -14,7 +15,6 @@ function booking_studygroups_csv_report($group_id) { } //set options for the CSV file - /* $name = 'bookings-studygroup-' . $group_id . '-' . format_date(time(), 'custom', 'Y-m-d-His'); $filename = file_directory_temp() . '/' . $name; $csv = ''; @@ -24,11 +24,7 @@ function booking_studygroups_csv_report($group_id) { $nullToMysqlNull = true; $delimiter_esc = preg_quote($delimiter, '/'); $enclosure_esc = preg_quote($enclosure, '/'); - */ - - $header_array = array(); - $data_array = array(); - + //is this study group a readings group? // @todo do we even care? /* @@ -39,60 +35,59 @@ function booking_studygroups_csv_report($group_id) { $is_reading_group = FALSE; } */ - - // @todo - // get a listing of all the registrations so we can lookup people's names based on their node id - - //get the list of study group sessions IDs - /* - $studygroup_sessions_query = db_query("SELECT distinct booking_session_id FROM {booking_studygroup_mapping} " . - "WHERE booking_eventid = :eid AND booking_studygroup_id = :sid " . - "ORDER BY booking_session_id", - array(':eid' => $event->eid, ':sid' => $group_id)); - $studygroup_sessions = $studygroup_sessions_query->fetchAll(); - */ - - /* - $studygroups_query = db_query("SELECT * FROM {booking_studygroup_list} WHERE booking_eventid = :eid and sid = :sid", - array(':eid' => $event->eid, ':sid' => $group_id)); - $studygroups = $studygroups_query->fetchAllAssoc('sid'); - */ - - /* - //set up the column headings - foreach ($studygroups as $studygroup) { - $header_array[] = $studygroup->sid; - } - $header = implode( $delimiter, $header_array ); - $csv .= $header . "\n"; - */ - + //get the list of study group session memberships - $session_members_query = db_query("SELECT * FROM {booking_studygroup_mapping} WHERE booking_studygroup_id = :sid", + $session_members_query = db_query("SELECT * FROM {booking_studygroup_mapping} WHERE booking_studygroup_id = :sid ORDER BY booking_session_id", array(':sid' => $group_id)); $session_members = $session_members_query->fetchAll(); - //calculate the row data + //generate the row data foreach ($session_members as $member) { - if (! isset($data_array[$member->booking_session_id])) { - $data_array[$member->booking_session_id] = array(); + if (! isset($data[$member->booking_session_id])) { + $data[$member->booking_session_id] = array(); } // @todo // lookup the actual name and put this instead of just the node id - $data_array[$member->booking_session_id][] = $member->booking_node_id; + $data[$member->booking_session_id][] = $member->booking_node_id; } watchdog('booking_debug', "
Study Group CSV Report\n@info", array('@info' => print_r( $data_array, true))); - $out = fopen('php://output', 'w'); - //create the CSV header using just the array keys - fputcsv2($out, array_keys($data_array)); - //output each subsequent of the multi-dimensional array - foreach ($data_array as $fields) { - fputcsv2($out, $fields); + //calculate the CSV layout + $header_array = array_keys($data); + $maximums = array(); + foreach ($header_array as $column) { + $maximums[] = count($data[$column]); } - //close the output - fclose($out); + + //add the column headings to the CSV + $header = implode( $delimiter, $header_array ); + $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); } /**