3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.5 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
27 class CRM_Core_Report_Excel
{
30 * Code copied from phpMyAdmin (v2.6.1-pl3)
31 * File: PHPMYADMIN/libraries/export/csv.php
32 * Function: PMA_exportData
34 * Outputs a result set with a given header
35 * in the string buffer result
37 * @param string $header (reference ) column headers
38 * @param string $rows (reference ) result set rows
39 * @param boolean $print should the output be printed
41 * @return mixed empty if output is printed, else output
46 static function makeCSVTable(&$header, &$rows, $titleHeader = NULL, $print = TRUE, $outputHeader = TRUE) {
53 $config = CRM_Core_Config
::singleton();
54 $seperator = $config->fieldSeparator
;
57 $add_character = "\015\012";
60 foreach ($header as $field) {
61 if ($enclosed == '') {
62 $schema_insert .= stripslashes($field);
65 $schema_insert .= $enclosed . str_replace($enclosed, $escaped . $enclosed, stripslashes($field)) . $enclosed;
67 $schema_insert .= $seperator;
72 // need to add PMA_exportOutputHandler functionality out here, rather than
73 // doing it the moronic way of assembling a buffer
74 $out = trim(substr($schema_insert, 0, -1)) . $add_character;
83 $fields_cnt = count($header);
84 foreach ($rows as $row) {
88 foreach ($row as $j => $value) {
89 if (!isset($value) ||
is_null($value)) {
92 elseif ($value == '0' ||
$value != '') {
93 // loic1 : always enclose fields
94 //$value = ereg_replace("\015(\012)?", "\012", $value);
95 $value = preg_replace("/\015(\012)?/", "\012", $value);
96 if ($enclosed == '') {
97 $schema_insert .= $value;
100 if ((substr($value, 0, 1) == CRM_Core_DAO
::VALUE_SEPARATOR
) &&
101 (substr($value, -1, 1) == CRM_Core_DAO
::VALUE_SEPARATOR
)
104 $strArray = explode(CRM_Core_DAO
::VALUE_SEPARATOR
, $value);
106 foreach ($strArray as $key => $val) {
107 if (trim($val) == '') {
108 unset($strArray[$key]);
112 $str = implode($seperator, $strArray);
116 $schema_insert .= $enclosed . str_replace($enclosed, $escaped . $enclosed, $value) . $enclosed;
120 $schema_insert .= '';
123 if ($colNo < $fields_cnt - 1) {
124 $schema_insert .= $seperator;
130 $out = $schema_insert . $add_character;
147 function writeHTMLFile($fileName, &$header, &$rows, $titleHeader = NULL, $outputHeader = TRUE) {
149 CRM_Utils_System
::download(CRM_Utils_String
::munge($fileName),
150 'application/vnd.ms-excel',
151 CRM_Core_DAO
::$_nullObject,
157 echo "<table><thead><tr>";
158 foreach ($header as $field) {
159 echo "<th>$field</th>";
161 echo "</tr></thead><tbody>";
163 foreach ($rows as $row) {
167 foreach ($row as $j => $value) {
168 echo "<td>" . htmlentities($value, ENT_COMPAT
, 'UTF-8') . "</td>";
173 echo "</tbody></table>";
177 * Write a CSV file to the browser output
179 * @param string $fileName - the name of the file that will be downloaded (this is sent to the browser)
180 * @param array $header - an array of the headers
181 * @param array $rows - an array of arrays of the table contents
182 * @param string $titleHeader - if set this will be the title in the CSV
183 * @param boolean $outputHeader - should we output the header row
184 * @param boolean $saveFile -
190 static function writeCSVFile($fileName, &$header, &$rows, $titleHeader = NULL, $outputHeader = TRUE, $saveFile = NULL) {
191 if ($outputHeader && !$saveFile) {
192 CRM_Utils_System
::download(CRM_Utils_String
::munge($fileName),
194 CRM_Core_DAO
::$_nullObject,
205 return self
::makeCSVTable( $header, $rows, $titleHeader, $print, $outputHeader );