From d9ecd2347a3508c6afb6936b96c43e9990a1cb0b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@users.sourceforge.net> Date: Sat, 3 Oct 2009 12:08:48 +0000 Subject: [PATCH] Work on import module --- htdocs/exports/export.class.php | 55 +++++++++------ htdocs/exports/export.php | 70 +++++++++++++++---- htdocs/imports/import.php | 2 +- .../modules/export/export_csv.modules.php | 2 +- .../modules/export/export_excel.modules.php | 23 +++--- .../modules/export/export_tsv.modules.php | 2 +- .../modules/import/import_csv.modules.php | 2 +- htdocs/langs/en_US/exports.lang | 3 +- htdocs/langs/fr_FR/exports.lang | 3 +- 9 files changed, 112 insertions(+), 50 deletions(-) diff --git a/htdocs/exports/export.class.php b/htdocs/exports/export.class.php index 7623bd2eceb..7388c2d3a6c 100644 --- a/htdocs/exports/export.class.php +++ b/htdocs/exports/export.class.php @@ -171,31 +171,16 @@ class Export } } + /** - * \brief Lance la generation du fichier - * \param user User qui exporte - * \param model Modele d'export - * \param datatoexport Lot de donnee a exporter - * \param array_selected Tableau des champs a exporter + * \brief Build the sql export request + * \param indice Indice of export + * \param array_selected Filter on array of fields to export * \remarks Les tableaux array_export_xxx sont deja chargees pour le bon datatoexport * aussi le parametre datatoexport est inutilise */ - function build_file($user, $model, $datatoexport, $array_selected) + function build_sql($indice,$array_selected) { - global $conf,$langs; - - $indice=0; - asort($array_selected); - - dol_syslog("Export::build_file $model, $datatoexport, $array_selected"); - - // Creation de la classe d'export du model ExportXXX - $dir = DOL_DOCUMENT_ROOT . "/includes/modules/export/"; - $file = "export_".$model.".modules.php"; - $classname = "Export".$model; - require_once($dir.$file); - $objmodel = new $classname($db); - // Build the sql request $sql=$this->array_export_sql_start[$indice]; $i=0; @@ -212,6 +197,36 @@ class Export } $sql.=$this->array_export_sql_end[$indice]; + return $sql; + } + + /** + * \brief Build export file + * \param user User that export + * \param model Export format + * \param datatoexport Name of dataset to export + * \param array_selected Filter on array of fields to export + * \remarks Les tableaux array_export_xxx sont deja chargees pour le bon datatoexport + * aussi le parametre datatoexport est inutilise + */ + function build_file($user, $model, $datatoexport, $array_selected) + { + global $conf,$langs; + + $indice=0; + asort($array_selected); + + dol_syslog("Export::build_file $model, $datatoexport, $array_selected"); + + // Creation de la classe d'export du model ExportXXX + $dir = DOL_DOCUMENT_ROOT . "/includes/modules/export/"; + $file = "export_".$model.".modules.php"; + $classname = "Export".$model; + require_once($dir.$file); + $objmodel = new $classname($db); + + $sql=$this->build_sql($indice,$array_selected); + // Run the sql $this->sqlusedforexport=$sql; dol_syslog("Export::build_file sql=".$sql); diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index 9812d4640a8..bd3281d1f8d 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -379,7 +379,7 @@ if ($step == 2 && $datatoexport) print '<tr class="liste_titre">'; print '<td>'.$langs->trans("Entities").'</td>'; print '<td>'.$langs->trans("ExportableFields").'</td>'; - print '<td width="12" align="middle">'; + print '<td width="100" align="center">'; print '<a title='.$langs->trans("All").' alt='.$langs->trans("All").' href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=selectfield&field=all">'.$langs->trans("All")."</a>"; print '/'; print '<a title='.$langs->trans("None").' alt='.$langs->trans("None").' href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=unselectfield&field=all">'.$langs->trans("None")."</a>"; @@ -389,6 +389,8 @@ if ($step == 2 && $datatoexport) // Champs exportables $fieldsarray=$objexport->array_export_fields[0]; + // Select request if all fields are selected + $sqlmaxforexport=$objexport->build_sql(0,array()); # $this->array_export_module[0]=$module; # $this->array_export_code[0]=$module->export_code[$r]; @@ -418,13 +420,27 @@ if ($step == 2 && $datatoexport) // Selected fields print '<td> </td>'; print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=unselectfield&field='.$code.'">'.img_left().'</a></td>'; - print '<td>'.$langs->trans($label).' ('.$code.')</td>'; + print '<td>'; + $text=$langs->trans($label); + $tablename=getablenamefromfield($code,$sqlmaxforexport); + $htmltext =$langs->trans("Table").": <b>".$tablename."</b><br>"; + $htmltext.=$langs->trans("Field").': <b>'.$code."</b><br>"; + print $html->textwithpicto($text,$htmltext); + //print ' ('.$code.')'; + print '</td>'; $bit=1; } else { // Fields not selected - print '<td>'.$langs->trans($label).' ('.$code.')</td>'; + print '<td>'; + $text=$langs->trans($label); + $tablename=getablenamefromfield($code,$sqlmaxforexport); + $htmltext =$langs->trans("Table").": <b>".$tablename."</b><br>"; + $htmltext.=$langs->trans("Field").': <b>'.$code."</b><br>"; + print $html->textwithpicto($text,$htmltext); + //print ' ('.$code.')'; + print '</td>'; print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=selectfield&field='.$code.'">'.img_right().'</a></td>'; print '<td> </td>'; $bit=0; @@ -452,7 +468,7 @@ if ($step == 2 && $datatoexport) } else { - print '<a class="butActionRefused" href="#">'.$langs->trans("NextStep").'</a>'; + print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("SelectAtLeastOneField")).'">'.$langs->trans("NextStep").'</a>'; } print '</div>'; @@ -506,7 +522,7 @@ if ($step == 3 && $datatoexport) $list=''; foreach($array_selected as $code=>$value) { - $list.=($list?',':''); + $list.=($list?', ':''); $list.=$langs->trans($objexport->array_export_fields[0][$code]); } print '<td>'.$list.'</td></tr>'; @@ -514,6 +530,9 @@ if ($step == 3 && $datatoexport) print '</table>'; print '<br>'; + // Select request if all fields are selected + $sqlmaxforexport=$objexport->build_sql(0,array()); + print $langs->trans("ChooseFieldsOrdersAndTitle").'<br>'; print '<table class="noborder" width="100%">'; @@ -521,8 +540,8 @@ if ($step == 3 && $datatoexport) print '<td>'.$langs->trans("Entities").'</td>'; print '<td>'.$langs->trans("ExportedFields").'</td>'; print '<td align="right" colspan="2">'.$langs->trans("Position").'</td>'; - print '<td> </td>'; - print '<td>'.$langs->trans("FieldsTitle").'</td>'; + //print '<td> </td>'; + //print '<td>'.$langs->trans("FieldsTitle").'</td>'; print '</tr>'; $var=true; @@ -537,7 +556,14 @@ if ($step == 3 && $datatoexport) print '<td>'.img_object('',$entityicon).' '.$langs->trans($entitylang).'</td>'; - print '<td>'.$langs->trans($objexport->array_export_fields[0][$code]).' ('.$code.')</td>'; + print '<td>'; + $text=$langs->trans($objexport->array_export_fields[0][$code]); + $tablename=getablenamefromfield($code,$sqlmaxforexport); + $htmltext =$langs->trans("Table").": <b>".$tablename."</b><br>"; + $htmltext.=$langs->trans("Field").': <b>'.$code."</b><br>"; + print $html->textwithpicto($text,$htmltext); + //print ' ('.$code.')'; + print '</td>'; print '<td align="right" width="100">'; print $value.' '; @@ -546,9 +572,8 @@ if ($step == 3 && $datatoexport) if ($value > 1) print '<a href="'.$_SERVER["PHP_SELF"].'?step=3&datatoexport='.$datatoexport.'&action=upfield&field='.$code.'">'.img_up().'</a>'; print '</td>'; - print '<td> </td>'; - - print '<td>'.$langs->trans($objexport->array_export_fields[0][$code]).'</td>'; + //print '<td> </td>'; + //print '<td>'.$langs->trans($objexport->array_export_fields[0][$code]).'</td>'; print '</tr>'; } @@ -684,7 +709,7 @@ if ($step == 4 && $datatoexport) $list=''; foreach($array_selected as $code=>$label) { - $list.=($list?',':''); + $list.=($list?', ':''); $list.=$langs->trans($objexport->array_export_fields[0][$code]); } print '<td>'.$list.'</td></tr>'; @@ -763,4 +788,25 @@ print '<br>'; $db->close(); llxFooter('$Date$ - $Revision$'); + + +/** + * \brief Return table name of an alias. For this, we look for the "tablename as alias" in sql string. + * \param code Alias.Fieldname + * \param sqlmaxforexport SQL request to parse + */ +function getablenamefromfield($code,$sqlmaxforexport) +{ + $newsql=$sqlmaxforexport; + $newsql=eregi_replace('^.* FROM ','',$newsql); + $newsql=eregi_replace(' WHERE .*$','',$newsql); + $alias=eregi_replace('\..*$','',$code); + //print $newsql.' '.$alias; + if (eregi('([a-zA-Z_]+) as '.$alias.'[, \)]',$newsql,$reg)) + { + return $reg[1]; + } + else return ''; +} + ?> diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 3fd2ce94edb..74a2357ea9b 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -1232,7 +1232,7 @@ function show_elem($fieldssource,$i,$pos,$key,$var) print '</td>'; print '<td style="font-weight: normal">'; print $langs->trans("Field").' '.$pos; - if (isset($fieldssource[$pos]['example1'])) print ' (<i>'.$fieldssource[$pos]['example1'].'</i>)'; + if (! empty($fieldssource[$pos]['example1'])) print ' (<i>'.$fieldssource[$pos]['example1'].'</i>)'; print '</td>'; } print '</tr>'; diff --git a/htdocs/includes/modules/export/export_csv.modules.php b/htdocs/includes/modules/export/export_csv.modules.php index cd12da1be73..b4966fbfa28 100644 --- a/htdocs/includes/modules/export/export_csv.modules.php +++ b/htdocs/includes/modules/export/export_csv.modules.php @@ -63,7 +63,7 @@ class ExportCsv extends ModeleExports $this->id='csv'; // Same value then xxx in file name export_xxx.modules.php $this->label='Csv'; // Label of driver - $this->desc='<b>Comma Separated Value</b> file format (.csv). This is a text file format.<br>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->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.' ].'; $this->extension='csv'; // Extension for generated file by this driver $this->picto='mime/other'; // Picto $ver=split(' ','$Revision$'); diff --git a/htdocs/includes/modules/export/export_excel.modules.php b/htdocs/includes/modules/export/export_excel.modules.php index e0b3f9ebda1..ebf0e83baf7 100644 --- a/htdocs/includes/modules/export/export_excel.modules.php +++ b/htdocs/includes/modules/export/export_excel.modules.php @@ -1,5 +1,5 @@ <?php -/* Copyright (C) 2006-2008 Laurent Destailleur <eldy@users.sourceforge.net> +/* 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 @@ -18,11 +18,11 @@ */ /** - \file htdocs/includes/modules/export/export_excel.modules.php - \ingroup export - \brief Fichier de la classe permettant de g�n�rer les export au format Excel - \author Laurent Destailleur - \version $Id$ + * \file htdocs/includes/modules/export/export_excel.modules.php + * \ingroup export + * \brief Fichier de la classe permettant de g�n�rer les export au format Excel + * \author Laurent Destailleur + * \version $Id$ */ require_once(DOL_DOCUMENT_ROOT."/includes/modules/export/modules_export.php"); @@ -32,10 +32,9 @@ require_once(PHP_WRITEEXCEL_PATH."/functions.writeexcel_utility.inc.php"); /** - \class ExportExcel - \brief Classe permettant de g�n�rer les export au format Excel + * \class ExportExcel + * \brief Class to build export files with Excel format */ - class ExportExcel extends ModeleExports { var $id; @@ -53,8 +52,8 @@ class ExportExcel extends ModeleExports /** - \brief Constructeur - \param db Handler acc�s base de donn�e + * \brief Constructor + * \param db databse handler */ function ExportExcel($db) { @@ -63,7 +62,7 @@ class ExportExcel extends ModeleExports $this->id='excel'; // Same value then xxx in file name export_xxx.modules.php $this->label='Excel'; // Label of driver - $this->desc='Native <b>Excel 95</b> file format (.xls)'; + $this->desc='<b>Excel</b> file format (.xls)<br>This is native Excel 95 format.'; $this->extension='xls'; // Extension for generated file by this driver $this->picto='mime/xls'; // Picto $ver=split(' ','$Revision$'); diff --git a/htdocs/includes/modules/export/export_tsv.modules.php b/htdocs/includes/modules/export/export_tsv.modules.php index 2fdb32c39a4..56d1238985e 100644 --- a/htdocs/includes/modules/export/export_tsv.modules.php +++ b/htdocs/includes/modules/export/export_tsv.modules.php @@ -58,7 +58,7 @@ class ExportTsv extends ModeleExports $this->id='tsv'; // Same value then xxx in file name export_xxx.modules.php $this->label='Tsv'; // Label of driver - $this->desc='<b>Tab Separated Value</b> file format (.tsv)'; + $this->desc='<b>Tab Separated Value</b> file format (.tsv)<br>This is a text file format where fields are separated by separator [tab].'; $this->extension='tsv'; // Extension for generated file by this driver $this->picto='mime/other'; // Picto $ver=split(' ','$Revision$'); diff --git a/htdocs/includes/modules/import/import_csv.modules.php b/htdocs/includes/modules/import/import_csv.modules.php index ac361ba24bf..be7a3677058 100644 --- a/htdocs/includes/modules/import/import_csv.modules.php +++ b/htdocs/includes/modules/import/import_csv.modules.php @@ -63,7 +63,7 @@ class ImportCsv extends ModeleImports $this->id='csv'; // Same value then xxx in file name export_xxx.modules.php $this->label='Csv'; // Label of driver - $this->desc='<b>Comma Separated Value</b> file format (.csv). This is a text file format.<br>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->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.' ].'; $this->extension='csv'; // Extension for generated file by this driver $this->picto='mime/other'; // Picto $ver=split(' ','$Revision$'); diff --git a/htdocs/langs/en_US/exports.lang b/htdocs/langs/en_US/exports.lang index 6a9f987c7dc..02b77f3d188 100644 --- a/htdocs/langs/en_US/exports.lang +++ b/htdocs/langs/en_US/exports.lang @@ -29,7 +29,7 @@ ChooseFieldsOrdersAndTitle=Choose fields order... FieldsOrder=Fields order FieldsTitle=Fields title ChooseExportFormat=Choose export format -NowClickToGenerateToBuildExportFile=Now, click on "Generate" to build export file... +NowClickToGenerateToBuildExportFile=Now, select file format in combo box and click on "Generate" to build export file... AvailableFormats=Available formats LibraryShort=Library LibraryUsed=Library used @@ -81,3 +81,4 @@ FieldNeedSource=This fiels in database require a data from source file SomeMandatoryFieldHaveNoSource=Some mandatory fields have no source from data file InformationOnSourceFile=Informations on source file InformationOnTargetTables=Informations on target fields +SelectAtLeastOneField=Switch at least one source field in the column of fields to export \ No newline at end of file diff --git a/htdocs/langs/fr_FR/exports.lang b/htdocs/langs/fr_FR/exports.lang index 742b0e4ae82..8e94647a617 100644 --- a/htdocs/langs/fr_FR/exports.lang +++ b/htdocs/langs/fr_FR/exports.lang @@ -29,7 +29,7 @@ ChooseFieldsOrdersAndTitle=Choisissez l'ordre des champs... FieldsOrder=Ordre des champs FieldsTitle=Titre champs ChooseExportFormat=Choisissez le format d'export -NowClickToGenerateToBuildExportFile=Maintenant, cliquez sur "Générer" pour générer le fichier export... +NowClickToGenerateToBuildExportFile=Maintenant, sélectionner le format d'export dans la liste déroulante et cliquez sur "Générer" pour fabriquer le fichier export... AvailableFormats=Formats dispo. LibraryShort=Librairie LibraryUsed=Librairie utilisée @@ -81,3 +81,4 @@ FieldNeedSource=Ce champ en base requiert obligatoirement une donnée source SomeMandatoryFieldHaveNoSource=Certains champs obligatoires n'ont pas de champ source issus du fichier InformationOnSourceFile=Informations sur le fichier source InformationOnTargetTables=Informations sur les champs cibles +SelectAtLeastOneField=Basculer au moins un champ source dans la colonne des champs à exporter \ No newline at end of file -- GitLab