* * 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/import/import_csv.modules.php * \ingroup import * \brief File to load import files with CSV format * \author Laurent Destailleur * \version $Id$ */ require_once(DOL_DOCUMENT_ROOT ."/includes/modules/import/modules_import.php"); /** * \class ImportCsv * \brief Classe permettant de lire les fichiers imports CSV */ class ImportCsv extends ModeleImports { var $id; var $label; var $extension; var $version; var $label_lib; var $version_lib; var $separator; var $handle; // Handle fichier /** * \brief Constructeur * \param db Handler acces base de donnee */ function ImportCsv($db) { global $conf; $this->db = $db; $this->separator=','; if (! empty($conf->global->EXPORT_CSV_SEPARATOR_TO_USE)) $this->separator=$conf->global->EXPORT_CSV_SEPARATOR_TO_USE; $this->enclosure='"'; $this->escape='"'; $this->id='csv'; // Same value then xxx in file name export_xxx.modules.php $this->label='Csv'; // Label of driver $this->desc='Comma Separated Value file format (.csv).
This is a text file format where fields are separated by separator [ '.$this->separator.' ]. If separator is found inside a field content, field is rounded by round character [ '.$this->enclosure.' ]. Escape character to escape round character is [ '.$this->escape.' ].'; $this->extension='csv'; // Extension for generated file by this driver $this->picto='mime/other'; // Picto $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 getDriverDesc() { return $this->desc; } function getDriverExtension() { return $this->extension; } function getDriverVersion() { return $this->version; } function getLibLabel() { return $this->label_lib; } function getLibVersion() { return $this->version_lib; } /** * \brief Output header of an example file for this format * \param langs Output language */ function write_header_example($outputlangs) { return ''; } /** * \brief Output title line of an example file for this format * \param langs Output language */ function write_title_example($outputlangs,$headerlinefields) { $s=''; $s.=join($this->separator,$headerlinefields); return $s."\n"; } /** * \brief Output record of an example file for this format * \param langs Output language */ function write_record_example($outputlangs,$contentlinevalues) { $s=''; $s.=join($this->separator,$contentlinevalues); return $s."\n"; } /** * \brief Output footer of an example file for this format * \param langs Output language */ function write_footer_example($outputlangs) { return ''; } /** * \brief Open input file * \param file Path of filename * \return int <0 if KO, >=0 if OK */ function import_open_file($file) { global $langs; dol_syslog("ImportCsv::open_file file=".$file); $ret=1; $this->handle = fopen($file, "r"); if (! $this->handle) { $langs->load("errors"); $this->error=$langs->trans("ErrorFailToOpenFile",$file); $ret=-1; } else { $this->file=$file; } return $ret; } /** * \brief Input header line from file */ function import_read_header() { return 0; } /** * \brief Return array of next record in input file. * \return Array Array of field values. Data are UTF8 encoded. */ function import_read_record() { global $conf; $arrayres=array(); if (version_compare(phpversion(), '5.3') < 0) { $arrayres=fgetcsv($this->handle,100000,$this->separator,$this->enclosure); } else { $arrayres=fgetcsv($this->handle,100000,$this->separator,$this->enclosure,$this->escape); } //var_dump($this->handle); //var_dump($arrayres);exit; $newarrayres=array(); if ($arrayres && is_array($arrayres)) { foreach($arrayres as $key => $val) { if (! empty($conf->global->IMPORT_CSV_FORCE_CHARSET)) // Forced charset { if (strtolower($conf->global->IMPORT_CSV_FORCE_CHARSET) == 'utf8') $newarrayres[$key]=$val; else $newarrayres[$key]=utf8_encode($val); } else // Autodetect format (UTF8 or ISO) { if (utf8_check($val)) $newarrayres[$key]=$val; else $newarrayres[$key]=utf8_encode($val); } } $this->col=sizeof($newarrayres); } return $newarrayres; } /** * \brief Close file handle */ function import_close_file() { fclose($this->handle); return 0; } /** * Insert a record into database * @param arrayrecord Array of field values * @param array_match_file_to_database * @param objimport * @return int <0 if KO, >0 if OK */ function import_insert($arrayrecord,$array_match_file_to_database,$objimport) { $error=0; // For each table to insert, me make a separate insert foreach($objimport->array_import_tables[0] as $alias=>$tablename) { // Build sql request $sql=''; $listfields=''; $listvalues=''; foreach($array_match_file_to_database as $key => $val) { if ($listfields) { $listfields.=', '; $listvalues.=', '; } $listfields.=$val; $listvalues.='ee'; } if ($listfields) { $sql='INSERT INTO '.$tablename.'('.$listfields.') VALUES('.$listvalues.')'; } //print '> '.join(',',$arrayrecord); print 'sql='.$sql; print '
'."\n"; // Run insert request if ($sql) { $resql=$this->db->query($sql); if ($resql) { print '.'; } else { print 'E'; $this->error=$this->db->lasterror(); $error++; } } } return $error?-$error:1; } } ?>