diff --git a/htdocs/document.php b/htdocs/document.php index cb4ed2e299a..58871685e85 100644 --- a/htdocs/document.php +++ b/htdocs/document.php @@ -76,6 +76,7 @@ $attachment = true; if (eregi('\.sql$',$original_file)) { $attachment = true; } if (eregi('\.html$',$original_file)) { $attachment = false; } if (eregi('\.csv$',$original_file)) { $attachment = true; } +if (eregi('\.tsv$',$original_file)) { $attachment = true; } if (eregi('\.pdf$',$original_file)) { $attachment = true; } if (eregi('\.xls$',$original_file)) { $attachment = true; } if (eregi('\.jpg$',$original_file)) { $attachment = true; } diff --git a/htdocs/includes/modules/export/export_csv.modules.php b/htdocs/includes/modules/export/export_csv.modules.php index f94ce40e683..d301991f6e1 100644 --- a/htdocs/includes/modules/export/export_csv.modules.php +++ b/htdocs/includes/modules/export/export_csv.modules.php @@ -57,7 +57,7 @@ class ExportCsv extends ModeleExports $this->db = $db; $this->id='csv'; // Same value then xxx in file name export_xxx.modules.php - $this->label='Csv'; // Label of driver + $this->label='Csv (Comma Separated Value)'; // Label of driver $this->extension='csv'; // Extension for generated file by this driver $ver=split(' ','$Revision$'); $this->version=$ver[2]; // Driver version diff --git a/htdocs/includes/modules/export/export_tsv.modules.php b/htdocs/includes/modules/export/export_tsv.modules.php new file mode 100644 index 00000000000..07b49dcf6f8 --- /dev/null +++ b/htdocs/includes/modules/export/export_tsv.modules.php @@ -0,0 +1,224 @@ + +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* 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. +* or see http://www.gnu.org/ +*/ + +/** + * \file htdocs/includes/modules/export/export_csv.modules.php + * \ingroup export + * \brief Fichier de la classe permettant de générer les export au format CSV + * \author Laurent Destailleur + * \version $Id$ +*/ + +require_once(DOL_DOCUMENT_ROOT ."/includes/modules/export/modules_export.php"); + + +/** + * \class ExportCsv + * \brief Classe permettant de générer les factures au modèle Crabe + */ +class ExportTsv extends ModeleExports +{ + var $id; + var $label; + var $extension; + var $version; + + var $label_lib; + var $version_lib; + + var $separator="\t"; + + var $handle; // Handle fichier + + + /** + \brief Constructeur + \param db Handler accès base de donnée + */ + function ExportTsv($db) + { + global $conf,$langs; + $this->db = $db; + + $this->id='tsv'; // Same value then xxx in file name export_xxx.modules.php + $this->label='Tsv (Tab Separated Value)'; // Label of driver + $this->extension='tsv'; // Extension for generated file by this driver + $ver=split(' ','$Revision$'); + $this->version=$ver[2]; // Driver version + + // If driver use an external library, put its name here + $this->label_lib='Dolibarr'; + $this->version_lib=DOL_VERSION; + } + + function getDriverId() + { + return $this->id; + } + + function getDriverLabel() + { + return $this->label; + } + + function getDriverExtension() + { + return $this->extension; + } + + function getDriverVersion() + { + return $this->version; + } + + function getLibLabel() + { + return $this->label_lib; + } + + function getLibVersion() + { + return $this->version_lib; + } + + + /** + * \brief Open output file + * \param file Path of filename + * \return int <0 if KO, >=0 if OK + */ + function open_file($file) + { + global $langs; + dolibarr_syslog("ExportTsv::open_file file=".$file); + + $ret=1; + + $langs->load("exports"); + $this->handle = fopen($file, "wt"); + if (! $this->handle) + { + $langs->load("errors"); + $this->error=$langs->trans("ErrorFailToCreateFile",$file); + $ret=-1; + } + + return $ret; + } + + /** + * \brief Output header into file + * \param langs Output language + */ + function write_header($langs) + { + return 0; + } + + + /** + * \brief Output title line into file + * \param langs Output language + */ + function write_title($array_export_fields_label,$array_selected_sorted,$langs) + { + foreach($array_selected_sorted as $code => $value) + { + $newvalue=$langs->transnoentities($array_export_fields_label[$code]); + $newvalue=$this->tsv_clean($newvalue); + + fwrite($this->handle,$newvalue.$this->separator); + } + fwrite($this->handle,"\n"); + return 0; + } + + + /** + * \brief Output record line into file + */ + function write_record($array_alias,$array_selected_sorted,$objp) + { + global $langs; + + $this->col=0; + foreach($array_selected_sorted as $code => $value) + { + $alias=$array_alias[$code]; + $newvalue=$objp->$alias; + + // Translation newvalue + if (eregi('^\((.*)\)$',$newvalue,$reg)) + { + $newvalue=$langs->transnoentities($reg[1]); + } + + $newvalue=$this->tsv_clean($newvalue); + + fwrite($this->handle,$newvalue.$this->separator); + $this->col++; + } + fwrite($this->handle,"\n"); + return 0; + } + + /** + * \brief Output footer into file + * \param langs Output language + */ + function write_footer($langs) + { + return 0; + } + + /** + * \brief Close file handle + */ + function close_file() + { + fclose($this->handle); + return 0; + } + + /** + * Clean a cell to respect rules of TSV file cells + * @param newvalue String to clean + * @return string Value cleaned + */ + function tsv_clean($newvalue) + { + // Rule Dolibarr: No HTML + $newvalue=clean_html($newvalue); + + // Rule 1 TSV: No CR, LF in cells + $newvalue=ereg_replace("\r",'',$newvalue); + $newvalue=ereg_replace("\n",'\n',$newvalue); + + // Rule 2 TSV: If value contains tab, we must replace by space + if (ereg($this->separator,$newvalue)) + { + $newvalue=ereg_replace("\t"," ",$newvalue); + } + + return $newvalue; + } + +} + +?> diff --git a/htdocs/lib/files.lib.php b/htdocs/lib/files.lib.php index b82552c4b55..599630175b7 100644 --- a/htdocs/lib/files.lib.php +++ b/htdocs/lib/files.lib.php @@ -165,6 +165,7 @@ function dol_mimetype($file) if (eregi('\.sql$',$file)) $mime='text/plain'; if (eregi('\.(html|htm)$',$file)) $mime='text/html'; if (eregi('\.csv$',$file)) $mime='text/csv'; + if (eregi('\.tsv$',$file)) $mime='text/tab-separated-values'; if (eregi('\.pdf$',$file)) $mime='application/pdf'; if (eregi('\.xls$',$file)) $mime='application/x-msexcel'; if (eregi('\.jpg$',$file)) $mime='image/jpeg'; diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php index ac94cdf1d4e..e3101cf6da7 100644 --- a/htdocs/lib/functions.lib.php +++ b/htdocs/lib/functions.lib.php @@ -2479,10 +2479,10 @@ function clean_url($url,$http=1) /** - \brief Clean a string from all html tags - \param StringHtml String to clean - \param removelinefeed Replace also all lines feeds by a space - \return string String cleaned + * \brief Clean a string from all html tags + * \param StringHtml String to clean + * \param removelinefeed Replace also all lines feeds by a space + * \return string String cleaned */ function clean_html($StringHtml,$removelinefeed=1) { @@ -2494,9 +2494,9 @@ function clean_html($StringHtml,$removelinefeed=1) if ($removelinefeed) $temp=str_replace("\n"," ",$temp); // et les espaces doubles - while(STRPOS($temp," ")) + while(strpos($temp," ")) { - $temp = STR_REPLACE(" "," ",$temp); + $temp = str_replace(" "," ",$temp); } $CleanString = $temp; return $CleanString;