<?php /******************************************************************************* * Copyright (C) 2007 Easter-eggs * http://ldapsaisie.labs.libre-entreprise.org * * Author: See AUTHORS file in top-level directory. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ******************************************************************************/ // Messages d'erreur // Support LSerror :: defineError('LS_EXPORTSEARCHRESULTASCSV_SUPPORT_01', _("ExportSearchResultAsCSV Support : function fputcsv is not available.") ); LSerror :: defineError('LS_EXPORTSEARCHRESULTASCSV_SUPPORT_02', _("ExportSearchResultAsCSV Support : The constant %{const} is not defined..") ); // Autres erreurs LSerror :: defineError('LS_EXPORTSEARCHRESULTASCSV_00', _("ExportSearchResultAsCSV Error : An error occured generating CSV outfile memory space.") ); LSerror :: defineError('LS_EXPORTSEARCHRESULTASCSV_01', _("ExportSearchResultAsCSV Error : An error occured executing the search.") ); LSerror :: defineError('LS_EXPORTSEARCHRESULTASCSV_02', _("ExportSearchResultAsCSV Error : An error occured writing CSV header.") ); LSerror :: defineError('LS_EXPORTSEARCHRESULTASCSV_03', _("ExportSearchResultAsCSV Error : An error occured writing a CSV row.") ); /** * Check support of exportSearchResultAsCSV * * @author Benjamin Renard <brenard@easter-eggs.com> * * @retval boolean true if exportSearchResultAsCSV is fully supported, false in other case */ function LSaddon_exportSearchResultAsCSV_support() { $retval=true; // Check fputcsv function if (!function_exists('fputcsv')) { LSerror :: addErrorCode('LS_EXPORTSEARCHRESULTASCSV_SUPPORT_01'); } $MUST_DEFINE_CONST= array( 'LS_EXPORTSEARCHRESULTASCSV_DELIMITER', 'LS_EXPORTSEARCHRESULTASCSV_ENCLOSURE', 'LS_EXPORTSEARCHRESULTASCSV_ESCAPE_CHAR', ); foreach($MUST_DEFINE_CONST as $const) { if ( (!defined($const)) || (constant($const) == "")) { LSerror :: addErrorCode('LS_EXPORTSEARCHRESULTASCSV_SUPPORT_02',$const); $retval=false; } } return $retval; } /** * Write LSsearch result as CSV and force download of it. * * @param[in] $LSsearch The LSsearch object * * @author Benjamin Renard <brenard@easter-eggs.com> * * @retval boolean Void if CSV file is successfully generated and upload, false in other case */ function exportSearchResultAsCSV($LSsearch) { $csv = fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+'); if ($csv === false) { LSerror :: addErrorCode('LS_EXPORTSEARCHRESULTASCSV_00'); return false; } if (!$LSsearch -> run()) { LSerror :: addErrorCode('LS_EXPORTSEARCHRESULTASCSV_01'); return false; } $headers=array($LSsearch->label_objectName, 'DN'); if ($LSsearch->displaySubDn) $headers[]='Sub DN'; if ($LSsearch->visibleExtraDisplayedColumns) { foreach ($LSsearch->visibleExtraDisplayedColumns as $cid => $conf) { $headers[] = __($conf['label']); } } if (!writeRowInCSV($csv, $headers)) { LSerror :: addErrorCode('LS_EXPORTSEARCHRESULTASCSV_02'); return false; } foreach ($LSsearch -> getSearchEntries() as $e) { $row = array( $e -> displayName, $e -> dn ); if ($LSsearch->displaySubDn) $row[] = $e -> subDn; if ($LSsearch->visibleExtraDisplayedColumns) foreach ($LSsearch->visibleExtraDisplayedColumns as $cid => $conf) $row[] = $e -> $cid; if (!writeRowInCSV($csv, $row)) { LSerror :: addErrorCode('LS_EXPORTSEARCHRESULTASCSV_03'); return false; } } header("Content-disposition: attachment; filename=export.csv"); header("Content-type: text/csv"); rewind($csv); print stream_get_contents($csv); @fclose($csv); exit(); } /** * Write CSV row in file * * @param[in] $csv The CSV file description reference * @param[in] $row An array of a CSV row fields to write * * @author Benjamin Renard <brenard@easter-eggs.com> * * @retval boolean True if CSV row is successfully writed, false in other case */ function writeRowInCSV(&$csv, &$row) { if (!defined('PHP_VERSION_ID') or PHP_VERSION_ID < 50504) { return (fputcsv($csv, $row, LS_EXPORTSEARCHRESULTASCSV_DELIMITER, LS_EXPORTSEARCHRESULTASCSV_ENCLOSURE) !== false); } return (fputcsv($csv, $row, LS_EXPORTSEARCHRESULTASCSV_DELIMITER, LS_EXPORTSEARCHRESULTASCSV_ENCLOSURE, LS_EXPORTSEARCHRESULTASCSV_ESCAPE_CHAR) !== false); }