/public_html/sites/all/modules/civicrm/CRM/Core/Report/Excel.php
https://github.com/timstephenson/NatureBridge · PHP · 194 lines · 126 code · 23 blank · 45 comment · 31 complexity · 14edbc001f12f1c94f660c70d2bf00b1 MD5 · raw file
- <?php
- /*
- +--------------------------------------------------------------------+
- | CiviCRM version 4.0 |
- +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2011 |
- +--------------------------------------------------------------------+
- | This file is a part of CiviCRM. |
- | |
- | CiviCRM is free software; you can copy, modify, and distribute it |
- | under the terms of the GNU Affero General Public License |
- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
- | |
- | CiviCRM is distributed in the hope that it will be useful, but |
- | WITHOUT ANY WARRANTY; without even the implied warranty of |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
- | See the GNU Affero General Public License for more details. |
- | |
- | You should have received a copy of the GNU Affero General Public |
- | License and the CiviCRM Licensing Exception along |
- | with this program; if not, contact CiviCRM LLC |
- | at info[AT]civicrm[DOT]org. If you have questions about the |
- | GNU Affero General Public License or the licensing of CiviCRM, |
- | see the CiviCRM license FAQ at http://civicrm.org/licensing |
- +--------------------------------------------------------------------+
- */
- require_once 'CRM/Utils/String.php';
- class CRM_Core_Report_Excel {
- /**
- * Code copied from phpMyAdmin (v2.6.1-pl3)
- * File: PHPMYADMIN/libraries/export/csv.php
- * Function: PMA_exportData
- *
- * Outputs a result set with a given header
- * in the string buffer result
- *
- * @param string $header (reference ) column headers
- * @param string $rows (reference ) result set rows
- * @param boolean $print should the output be printed
- *
- * @return mixed empty if output is printed, else output
- *
- * @access public
- */
- function makeCSVTable( &$header, &$rows, $titleHeader = null, $print = true, $outputHeader = true )
- {
- if ( $titleHeader ) {
- echo $titleHeader;
- }
-
- $result = '';
- $config = CRM_Core_Config::singleton( );
- $seperator = $config->fieldSeparator;
- $enclosed = '"';
- $escaped = $enclosed;
- $add_character = "\015\012";
- $schema_insert = '';
- foreach ( $header as $field ) {
- if ($enclosed == '') {
- $schema_insert .= stripslashes($field);
- } else {
- $schema_insert .=
- $enclosed
- . str_replace($enclosed, $escaped . $enclosed, stripslashes($field))
- . $enclosed;
- }
- $schema_insert .= $seperator;
- } // end while
- if ( $outputHeader ) {
- // need to add PMA_exportOutputHandler functionality out here, rather than
- // doing it the moronic way of assembling a buffer
- $out = trim(substr($schema_insert, 0, -1)) . $add_character;
- if ( $print ) {
- echo $out;
- } else {
- $result .= $out;
- }
- }
- $i = 0;
- $fields_cnt = count($header);
- foreach ( $rows as $row ) {
- $schema_insert = '';
- $colNo = 0;
-
- foreach ( $row as $j => $value ) {
- if (!isset($value) || is_null($value)) {
- $schema_insert .= '';
- } else if ($value == '0' || $value != '') {
- // loic1 : always enclose fields
- //$value = ereg_replace("\015(\012)?", "\012", $value);
- $value = preg_replace("/\015(\012)?/", "\012", $value);
- if ($enclosed == '') {
- $schema_insert .= $value;
- } else {
- if ( ( substr( $value, 0, 1 ) == CRM_Core_DAO::VALUE_SEPARATOR )&&
- ( substr( $value, -1, 1 ) == CRM_Core_DAO::VALUE_SEPARATOR ) ) {
-
- $strArray = explode( CRM_Core_DAO::VALUE_SEPARATOR, $value );
-
- foreach( $strArray as $key => $val ) {
- if ( trim( $val ) == '' ) {
- unset( $strArray[$key] );
- }
- }
-
- $str = implode( $seperator, $strArray );
- $value = &$str;
- }
-
- $schema_insert .=
- $enclosed
- . str_replace($enclosed, $escaped . $enclosed, $value)
- . $enclosed;
- }
- } else {
- $schema_insert .= '';
- }
-
- if ($colNo < $fields_cnt-1) {
- $schema_insert .= $seperator;
- }
- $colNo++;
- } // end for
- $out = $schema_insert . $add_character;
- if ( $print ) {
- echo $out;
- } else {
- $result .= $out;
- }
- ++$i;
- } // end for
- if ( $print ) {
- return;
- } else {
- return $result;
- }
- } // end of the 'getTableCsv()' function
- function writeHTMLFile ( $fileName, &$header, &$rows, $titleHeader = null, $outputHeader = true ) {
- if ( $outputHeader ) {
- require_once 'CRM/Utils/System.php';
- CRM_Utils_System::download( CRM_Utils_String::munge( $fileName ),
- 'application/vnd.ms-excel',
- CRM_Core_DAO::$_nullObject,
- 'xls',
- false );
- }
- echo "<table><thead><tr>";
- foreach ( $header as $field ) {
- echo "<th>$field</th>";
- } // end while
- echo "</tr></thead><tbody>";
- $i = 0;
- $fields_cnt = count($header);
- foreach ( $rows as $row ) {
- $schema_insert = '';
- $colNo = 0;
- echo "<tr>";
- foreach ( $row as $j => $value ) {
- echo "<td>".htmlentities ($value,ENT_COMPAT,'UTF-8')."</td>";
- } // end for
- echo "</tr>";
- } // end for
- echo "</tbody></table>";
- }
- function writeCSVFile( $fileName, &$header, &$rows, $titleHeader = null, $outputHeader = true ) {
- if ( $outputHeader ) {
- require_once 'CRM/Utils/System.php';
- CRM_Utils_System::download( CRM_Utils_String::munge( $fileName ),
- 'text/x-csv',
- CRM_Core_DAO::$_nullObject,
- 'csv',
- false );
- }
- if ( ! empty( $rows ) ) {
- self::makeCSVTable( $header, $rows, $titleHeader, true, $outputHeader );
- }
- }
- }