2009-03-25 22:26:15 +01:00
< ? php
/* Copyright ( C ) 2006 - 2009 Laurent Destailleur < eldy @ users . sourceforge . net >
*
* 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 /
*/
/**
2009-10-04 00:32:10 +02:00
* \file htdocs / includes / modules / import / import_csv . modules . php
* \ingroup import
* \brief File to load import files with CSV format
2009-03-25 22:26:15 +01:00
* \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 ;
2009-05-19 02:14:27 +02:00
2009-03-25 22:26:15 +01:00
var $handle ; // Handle fichier
2009-05-19 02:14:27 +02:00
2009-03-25 22:26:15 +01:00
/**
* \brief Constructeur
* \param db Handler acces base de donnee
*/
function ImportCsv ( $db )
{
global $conf ;
$this -> db = $db ;
2009-09-27 23:28:52 +02:00
$this -> separator = ',' ;
if ( ! empty ( $conf -> global -> EXPORT_CSV_SEPARATOR_TO_USE )) $this -> separator = $conf -> global -> EXPORT_CSV_SEPARATOR_TO_USE ;
2009-10-03 01:07:31 +02:00
$this -> enclosure = '"' ;
2009-09-28 22:06:15 +02:00
$this -> escape = '"' ;
2009-09-27 23:28:52 +02:00
2009-03-25 22:26:15 +01:00
$this -> id = 'csv' ; // Same value then xxx in file name export_xxx.modules.php
2009-09-28 22:06:15 +02:00
$this -> label = 'Csv' ; // Label of driver
2009-10-03 14:08:48 +02:00
$this -> desc = '<b>Comma Separated Value</b> file format (.csv).<br>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 . ' ].' ;
2009-03-25 22:26:15 +01:00
$this -> extension = 'csv' ; // Extension for generated file by this driver
2009-05-19 02:14:27 +02:00
$this -> picto = 'mime/other' ; // Picto
2009-03-25 22:26:15 +01:00
$ver = split ( ' ' , '$Revision$' );
$this -> version = $ver [ 2 ]; // Driver version
// If driver use an external library, put its name here
2009-05-19 02:14:27 +02:00
$this -> label_lib = 'Dolibarr' ;
2009-03-25 22:26:15 +01:00
$this -> version_lib = DOL_VERSION ;
}
function getDriverId ()
{
return $this -> id ;
}
function getDriverLabel ()
{
return $this -> label ;
}
2009-09-28 22:06:15 +02:00
function getDriverDesc ()
{
return $this -> desc ;
}
2009-03-25 22:26:15 +01:00
function getDriverExtension ()
{
return $this -> extension ;
}
function getDriverVersion ()
{
return $this -> version ;
}
function getLibLabel ()
{
return $this -> label_lib ;
}
function getLibVersion ()
{
return $this -> version_lib ;
}
2009-09-08 01:49:16 +02:00
/**
* \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 '' ;
}
2009-03-25 22:26:15 +01:00
/**
2009-10-02 00:17:18 +02:00
* \brief Open input file
2009-03-25 22:26:15 +01:00
* \param file Path of filename
* \return int < 0 if KO , >= 0 if OK
*/
2009-10-02 00:17:18 +02:00
function import_open_file ( $file )
2009-03-25 22:26:15 +01:00
{
global $langs ;
2009-10-04 20:01:30 +02:00
$ret = 1 ;
2009-05-19 02:14:27 +02:00
2009-03-25 22:26:15 +01:00
dol_syslog ( " ImportCsv::open_file file= " . $file );
2009-10-04 20:01:30 +02:00
$newfile = utf8_check ( $file ) ? utf8_decode ( $file ) : $file ; // fopen need ISO file name
$this -> handle = fopen ( $newfile , " r " );
2009-03-25 22:26:15 +01:00
if ( ! $this -> handle )
{
$langs -> load ( " errors " );
$this -> error = $langs -> trans ( " ErrorFailToOpenFile " , $file );
$ret =- 1 ;
}
2009-10-03 01:07:31 +02:00
else
{
$this -> file = $file ;
}
2009-05-19 02:14:27 +02:00
2009-03-25 22:26:15 +01:00
return $ret ;
}
/**
2009-10-02 00:17:18 +02:00
* \brief Input header line from file
2009-03-25 22:26:15 +01:00
*/
2009-10-02 00:17:18 +02:00
function import_read_header ()
2009-03-25 22:26:15 +01:00
{
return 0 ;
}
/**
2009-10-04 00:32:10 +02:00
* \brief Return array of next record in input file .
* \return Array Array of field values . Data are UTF8 encoded .
2009-03-25 22:26:15 +01:00
*/
2009-10-03 01:07:31 +02:00
function import_read_record ()
2009-03-25 22:26:15 +01:00
{
global $conf ;
2009-10-03 01:07:31 +02:00
$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 );
}
2009-10-04 00:32:10 +02:00
//var_dump($this->handle);
2009-10-03 01:07:31 +02:00
//var_dump($arrayres);exit;
2009-10-04 00:32:10 +02:00
$newarrayres = array ();
2009-10-03 01:07:31 +02:00
if ( $arrayres && is_array ( $arrayres ))
2009-03-25 22:26:15 +01:00
{
2009-10-04 00:32:10 +02:00
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 );
2009-10-03 01:07:31 +02:00
}
2009-05-19 02:14:27 +02:00
2009-10-04 00:32:10 +02:00
return $newarrayres ;
2009-03-25 22:26:15 +01:00
}
/**
* \brief Close file handle
*/
2009-10-02 00:17:18 +02:00
function import_close_file ()
2009-03-25 22:26:15 +01:00
{
fclose ( $this -> handle );
return 0 ;
}
2009-10-02 00:17:18 +02:00
2009-03-25 22:26:15 +01:00
/**
2009-10-04 00:32:10 +02:00
* 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
2009-03-25 22:26:15 +01:00
*/
2009-10-04 00:32:10 +02:00
function import_insert ( $arrayrecord , $array_match_file_to_database , $objimport )
2009-03-25 22:26:15 +01:00
{
2009-10-04 00:32:10 +02:00
$error = 0 ;
2009-05-19 02:14:27 +02:00
2009-10-04 00:32:10 +02:00
// For each table to insert, me make a separate insert
foreach ( $objimport -> array_import_tables [ 0 ] as $alias => $tablename )
2009-03-25 22:26:15 +01:00
{
2009-10-04 00:32:10 +02:00
// 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 '<br>' . " \n " ;
// Run insert request
if ( $sql )
{
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
print '.' ;
}
else
{
print 'E' ;
$this -> error = $this -> db -> lasterror ();
$error ++ ;
}
}
2009-03-25 22:26:15 +01:00
}
2009-10-04 00:32:10 +02:00
return $error ? - $error : 1 ;
}
2009-05-19 02:14:27 +02:00
2009-03-25 22:26:15 +01:00
}
?>