--- /tmp/dsg/dolibarr/htdocs/core/modules/export/github_19.0.3_export_csv.modules.php
+++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_export_csv.modules.php
@@ -0,0 +1,369 @@
+
+ *
+ * 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 3 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, see .
+ */
+
+/**
+ * \file htdocs/core/modules/export/export_csv.modules.php
+ * \ingroup export
+ * \brief File of class to build exports with CSV format
+ */
+
+require_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php';
+
+// avoid timeout for big export
+set_time_limit(0);
+
+/**
+ * Class to build export files with format CSV
+ */
+class ExportCsv extends ModeleExports
+{
+ /**
+ * @var string ID ex: csv, tsv, excel...
+ */
+ public $id;
+
+ /**
+ * @var string export files label
+ */
+ public $label;
+
+ public $extension;
+
+ /**
+ * Dolibarr version of the loaded document
+ * @var string
+ */
+ public $version = 'dolibarr';
+
+ public $label_lib;
+
+ public $version_lib;
+
+ public $separator;
+
+ public $handle; // Handle fichier
+
+
+ /**
+ * Constructor
+ *
+ * @param DoliDB $db Database handler
+ */
+ public function __construct($db)
+ {
+ global $conf, $langs;
+ $this->db = $db;
+
+ $this->separator = ',';
+ if (!empty($conf->global->EXPORT_CSV_SEPARATOR_TO_USE)) $this->separator = $conf->global->EXPORT_CSV_SEPARATOR_TO_USE;
+ $this->escape = '"';
+ $this->enclosure = '"';
+
+ $this->id = 'csv'; // Same value then xxx in file name export_xxx.modules.php
+ $this->label = 'CSV'; // Label of driver
+ $this->desc = $langs->trans("CSVFormatDesc", $this->separator, $this->enclosure, $this->escape);
+ $this->extension = 'csv'; // Extension for generated file by this driver
+ $this->picto = 'mime/other'; // Picto
+ $this->version = '1.32'; // Driver version
+
+ // If driver use an external library, put its name here
+ $this->label_lib = 'Dolibarr';
+ $this->version_lib = DOL_VERSION;
+ }
+
+ /**
+ * getDriverId
+ *
+ * @return string
+ */
+ public function getDriverId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * getDriverLabel
+ *
+ * @return string Return driver label
+ */
+ public function getDriverLabel()
+ {
+ return $this->label;
+ }
+
+ /**
+ * getDriverDesc
+ *
+ * @return string
+ */
+ public function getDriverDesc()
+ {
+ return $this->desc;
+ }
+
+ /**
+ * getDriverExtension
+ *
+ * @return string
+ */
+ public function getDriverExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * getDriverVersion
+ *
+ * @return string
+ */
+ public function getDriverVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * getLabelLabel
+ *
+ * @return string
+ */
+ public function getLibLabel()
+ {
+ return $this->label_lib;
+ }
+
+ /**
+ * getLibVersion
+ *
+ * @return string
+ */
+ public function getLibVersion()
+ {
+ return $this->version_lib;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Open output file
+ *
+ * @param string $file Path of filename to generate
+ * @param Translate $outputlangs Output language object
+ * @return int <0 if KO, >=0 if OK
+ */
+ public function open_file($file, $outputlangs)
+ {
+ // phpcs:enable
+ global $langs;
+
+ dol_syslog("ExportCsv::open_file file=".$file);
+
+ $ret = 1;
+
+ $outputlangs->load("exports");
+ $this->handle = fopen($file, "wt");
+ if (!$this->handle)
+ {
+ $langs->load("errors");
+ $this->error = $langs->trans("ErrorFailToCreateFile", $file);
+ $ret = -1;
+ }
+
+ return $ret;
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output header into file
+ *
+ * @param Translate $outputlangs Output language object
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_header($outputlangs)
+ {
+ // phpcs:enable
+ return 0;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output title line into file
+ *
+ * @param array $array_export_fields_label Array with list of label of fields
+ * @param array $array_selected_sorted Array with list of field to export
+ * @param Translate $outputlangs Object lang to translate values
+ * @param array $array_types Array with types of fields
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_title($array_export_fields_label, $array_selected_sorted, $outputlangs, $array_types)
+ {
+ // phpcs:enable
+ global $conf;
+
+ if (!empty($conf->global->EXPORT_CSV_FORCE_CHARSET))
+ {
+ $outputlangs->charset_output = $conf->global->EXPORT_CSV_FORCE_CHARSET;
+ }
+ else
+ {
+ $outputlangs->charset_output = 'ISO-8859-1';
+ }
+
+ foreach ($array_selected_sorted as $code => $value)
+ {
+ $newvalue = $outputlangs->transnoentities($array_export_fields_label[$code]); // newvalue is now $outputlangs->charset_output encoded
+ $newvalue = $this->csvClean($newvalue, $outputlangs->charset_output);
+
+ fwrite($this->handle, $newvalue.$this->separator);
+ }
+ fwrite($this->handle, "\n");
+ return 0;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output record line into file
+ *
+ * @param array $array_selected_sorted Array with list of field to export
+ * @param resource $objp A record from a fetch with all fields from select
+ * @param Translate $outputlangs Object lang to translate values
+ * @param array $array_types Array with types of fields
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_record($array_selected_sorted, $objp, $outputlangs, $array_types)
+ {
+ // phpcs:enable
+ global $conf;
+
+ if (!empty($conf->global->EXPORT_CSV_FORCE_CHARSET))
+ {
+ $outputlangs->charset_output = $conf->global->EXPORT_CSV_FORCE_CHARSET;
+ }
+ else
+ {
+ $outputlangs->charset_output = 'ISO-8859-1';
+ }
+
+ $this->col = 0;
+
+ $reg = array();
+
+ foreach ($array_selected_sorted as $code => $value)
+ {
+ if (strpos($code, ' as ') == 0) $alias = str_replace(array('.', '-', '(', ')'), '_', $code);
+ else $alias = substr($code, strpos($code, ' as ') + 4);
+ if (empty($alias)) dol_print_error('', 'Bad value for field with key='.$code.'. Try to redefine export.');
+
+ $newvalue = $outputlangs->convToOutputCharset($objp->$alias); // objp->$alias must be utf8 encoded as any var in memory // newvalue is now $outputlangs->charset_output encoded
+ $typefield = isset($array_types[$code]) ? $array_types[$code] : '';
+
+ // Translation newvalue
+ if (preg_match('/^\((.*)\)$/i', $newvalue, $reg)) $newvalue = $outputlangs->transnoentities($reg[1]);
+
+ $newvalue = $this->csvClean($newvalue, $outputlangs->charset_output);
+
+ if (preg_match('/^Select:/i', $typefield, $reg) && $typefield = substr($typefield, 7))
+ {
+ $array = unserialize($typefield);
+ $array = $array['options'];
+ $newvalue = $array[$newvalue];
+ }
+
+ fwrite($this->handle, $newvalue.$this->separator);
+ $this->col++;
+ }
+
+ fwrite($this->handle, "\n");
+ return 0;
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output footer into file
+ *
+ * @param Translate $outputlangs Output language object
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_footer($outputlangs)
+ {
+ // phpcs:enable
+ return 0;
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Close file handle
+ *
+ * @return int <0 if KO, >0 if OK
+ */
+ public function close_file()
+ {
+ // phpcs:enable
+ fclose($this->handle);
+ return 0;
+ }
+
+
+ /**
+ * Clean a cell to respect rules of CSV file cells
+ * Note: It uses $this->separator
+ * Note: We keep this function public to be able to test
+ *
+ * @param string $newvalue String to clean
+ * @param string $charset Input AND Output character set
+ * @return string Value cleaned
+ */
+ public function csvClean($newvalue, $charset)
+ {
+ global $conf;
+ $addquote = 0;
+
+
+ // Rule Dolibarr: No HTML
+ //print $charset.' '.$newvalue."\n";
+ //$newvalue=dol_string_nohtmltag($newvalue,0,$charset);
+ $newvalue = dol_htmlcleanlastbr($newvalue);
+ //print $charset.' '.$newvalue."\n";
+
+ // Rule 1 CSV: No CR, LF in cells (except if USE_STRICT_CSV_RULES is on, we can keep record as it is but we must add quotes)
+ $oldvalue = $newvalue;
+ $newvalue = str_replace("\r", '', $newvalue);
+ $newvalue = str_replace("\n", '\n', $newvalue);
+ if (!empty($conf->global->USE_STRICT_CSV_RULES) && $oldvalue != $newvalue)
+ {
+ // If strict use of CSV rules, we just add quote
+ $newvalue = $oldvalue;
+ $addquote = 1;
+ }
+
+ // Rule 2 CSV: If value contains ", we must escape with ", and add "
+ if (preg_match('/"/', $newvalue))
+ {
+ $addquote = 1;
+ $newvalue = str_replace('"', '""', $newvalue);
+ }
+
+ // Rule 3 CSV: If value contains separator, we must add "
+ if (preg_match('/'.$this->separator.'/', $newvalue))
+ {
+ $addquote = 1;
+ }
+
+ return ($addquote ? '"' : '').$newvalue.($addquote ? '"' : '');
+ }
+}
--- /tmp/dsg/dolibarr/htdocs/core/modules/export/github_19.0.3_export_excel2007.modules.php
+++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_export_excel2007.modules.php
@@ -2 +2 @@
-/* Copyright (C) 2006-2015 Laurent Destailleur
+/* Copyright (C) 2006-2011 Laurent Destailleur
@@ -16 +16 @@
- * along with this program. If not, see .
+ * along with this program. If not, see .
@@ -20 +20 @@
- * \file htdocs/core/modules/export/export_excel2007.modules.php
+ * \file htdocs/core/modules/export/export_excel.modules.php
@@ -22,0 +23 @@
+ * \author Laurent Destailleur
@@ -25,0 +27 @@
+require_once DOL_DOCUMENT_ROOT.'/core/modules/export/export_excel.modules.php';
@@ -28,3 +29,0 @@
-use PhpOffice\PhpSpreadsheet\Spreadsheet;
-use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
@@ -35 +34 @@
-class ExportExcel2007 extends ModeleExports
+class ExportExcel2007 extends ExportExcel
@@ -37,4 +36,4 @@
- /**
- * @var string ID
- */
- public $id;
+ var $id;
+ var $label;
+ var $extension;
+ var $version;
@@ -42,4 +41,2 @@
- /**
- * @var string Export Excel label
- */
- public $label;
+ var $label_lib;
+ var $version_lib;
@@ -47,25 +44,5 @@
- public $extension;
-
- /**
- * Dolibarr version of the loaded document
- * @var string
- */
- public $version = 'dolibarr';
-
- public $label_lib;
-
- public $version_lib;
-
- /** @var Spreadsheet */
- public $workbook; // Handle file
-
- public $worksheet; // Handle sheet
-
- public $styleArray;
-
- public $row;
-
- public $col;
-
- public $file; // To save filename
-
+ var $workbook; // Handle fichier
+ var $worksheet; // Handle onglet
+ var $row;
+ var $col;
+ var $file; // To save filename
@@ -78 +55 @@
- public function __construct($db)
+ function __construct($db)
@@ -80 +57 @@
- global $langs;
+ global $conf, $langs;
@@ -83,2 +60,2 @@
- $this->id = 'excel2007'; // Same value then xxx in file name export_xxx.modules.php
- $this->label = 'Excel 2007'; // Label of driver
+ $this->id='excel2007'; // Same value then xxx in file name export_xxx.modules.php
+ $this->label='Excel 2007'; // Label of driver
@@ -86,4 +63,3 @@
- $this->extension = 'xlsx'; // Extension for generated file by this driver
- $this->picto = 'mime/xls'; // Picto
- $this->version = '1.30'; // Driver version
- $this->phpmin = array(7, 0); // Minimum version of PHP required by module
+ $this->extension='xlsx'; // Extension for generated file by this driver
+ $this->picto='mime/xls'; // Picto
+ $this->version='1.30'; // Driver version
@@ -91 +67,18 @@
- $this->disabled = 0;
+ // If driver use an external library, put its name here
+ if (! empty($conf->global->MAIN_USE_PHP_WRITEEXCEL))
+ {
+ require_once PHP_WRITEEXCEL_PATH.'class.writeexcel_workbookbig.inc.php';
+ require_once PHP_WRITEEXCEL_PATH.'class.writeexcel_worksheet.inc.php';
+ require_once PHP_WRITEEXCEL_PATH.'functions.writeexcel_utility.inc.php';
+ $this->label_lib='PhpWriteExcel';
+ $this->version_lib='unknown';
+ }
+ else
+ {
+ require_once PHPEXCEL_PATH.'PHPExcel.php';
+ require_once PHPEXCEL_PATH.'PHPExcel/Style/Alignment.php';
+ $this->label_lib='PhpExcel';
+ $this->version_lib='1.8.0'; // No way to get info from library
+ }
+
+ $this->disabled = (in_array(constant('PHPEXCEL_PATH'),array('disabled','disabled/'))?1:0); // A condition to disable module (used for native debian packages)
@@ -93,356 +86 @@
- if (empty($this->disabled)) {
- require_once PHPEXCELNEW_PATH.'Spreadsheet.php';
- $this->label_lib = 'PhpSpreadSheet';
- $this->version_lib = '1.12.0'; // No way to get info from library
- }
-
- $this->row = 0;
- }
-
- /**
- * getDriverId
- *
- * @return string
- */
- public function getDriverId()
- {
- return $this->id;
- }
-
- /**
- * getDriverLabel
- *
- * @return string Return driver label
- */
- public function getDriverLabel()
- {
- return $this->label;
- }
-
- /**
- * getDriverLabel
- *
- * @return string Return driver label
- */
- public function getDriverLabelBis()
- {
- global $langs;
- $langs->load("errors");
- return $langs->trans("NumberOfLinesLimited");
- }
-
- /**
- * getDriverDesc
- *
- * @return string
- */
- public function getDriverDesc()
- {
- return $this->desc;
- }
-
- /**
- * getDriverExtension
- *
- * @return string
- */
- public function getDriverExtension()
- {
- return $this->extension;
- }
-
- /**
- * getDriverVersion
- *
- * @return string
- */
- public function getDriverVersion()
- {
- return $this->version;
- }
-
- /**
- * getLibLabel
- *
- * @return string
- */
- public function getLibLabel()
- {
- return $this->label_lib;
- }
-
- /**
- * getLibVersion
- *
- * @return string
- */
- public function getLibVersion()
- {
- return $this->version_lib;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Open output file
- *
- * @param string $file File name to generate
- * @param Translate $outputlangs Output language object
- * @return int Return integer <0 if KO, >=0 if OK
- */
- public function open_file($file, $outputlangs)
- {
- // phpcs:enable
- global $user, $conf, $langs;
-
- dol_syslog(get_class($this)."::open_file file=".$file);
- $this->file = $file;
-
- $ret = 1;
-
- $outputlangs->load("exports");
-
- require_once DOL_DOCUMENT_ROOT.'/includes/phpoffice/phpspreadsheet/src/autoloader.php';
- require_once DOL_DOCUMENT_ROOT.'/includes/Psr/autoloader.php';
- require_once PHPEXCELNEW_PATH.'Spreadsheet.php';
-
- if ($this->id == 'excel2007') {
- if (!class_exists('ZipArchive')) { // For Excel2007, PHPSpreadSheet may need ZipArchive
- $langs->load("errors");
- $this->error = $langs->trans('ErrorPHPNeedModule', 'zip');
- return -1;
- }
- }
-
- $this->workbook = new Spreadsheet();
- $this->workbook->getProperties()->setCreator($user->getFullName($outputlangs).' - '.DOL_APPLICATION_TITLE.' '.DOL_VERSION);
- //$this->workbook->getProperties()->setLastModifiedBy('Dolibarr '.DOL_VERSION);
- $this->workbook->getProperties()->setTitle(basename($file));
- $this->workbook->getProperties()->setSubject(basename($file));
- $this->workbook->getProperties()->setDescription(DOL_APPLICATION_TITLE.' '.DOL_VERSION);
-
- $this->workbook->setActiveSheetIndex(0);
- $this->workbook->getActiveSheet()->setTitle($outputlangs->trans("Sheet"));
- $this->workbook->getActiveSheet()->getDefaultRowDimension()->setRowHeight(16);
-
- return $ret;
- }
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Write header
- *
- * @param Translate $outputlangs Object lang to translate values
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_header($outputlangs)
- {
- // phpcs:enable
- //$outputlangs->charset_output='ISO-8859-1'; // Because Excel 5 format is ISO
-
- return 0;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Output title line into file
- *
- * @param array $array_export_fields_label Array with list of label of fields
- * @param array $array_selected_sorted Array with list of field to export
- * @param Translate $outputlangs Object lang to translate values
- * @param array $array_types Array with types of fields
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_title($array_export_fields_label, $array_selected_sorted, $outputlangs, $array_types)
- {
- // phpcs:enable
- global $conf;
-
- // Create a format for the column headings
- $this->workbook->getActiveSheet()->getStyle('1')->getFont()->setBold(true);
- $this->workbook->getActiveSheet()->getStyle('1')->getAlignment()->setHorizontal(PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
- $selectlabel = array();
-
- $this->col = 1;
-
- foreach ($array_selected_sorted as $code => $value) {
- $alias = $array_export_fields_label[$code];
- //print "dd".$alias;
- if (empty($alias)) {
- dol_print_error('', 'Bad value for field with code='.$code.'. Try to redefine export.');
- }
- $typefield = isset($array_types[$code]) ? $array_types[$code] : '';
-
- if (preg_match('/^Select:/i', $typefield) && $typefield = substr($typefield, 7)) {
- $selectlabel[$code."_label"] = $alias."_label";
- }
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, $outputlangs->transnoentities($alias));
- if (!empty($array_types[$code]) && in_array($array_types[$code], array('Date', 'Numeric', 'TextAuto'))) { // Set autowidth for some types
- $this->workbook->getActiveSheet()->getColumnDimension($this->column2Letter($this->col + 1))->setAutoSize(true);
- }
- $this->col++;
- }
- foreach ($selectlabel as $key => $value) {
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, $outputlangs->transnoentities($value));
- if (!empty($array_types[$code]) && in_array($array_types[$code], array('Date', 'Numeric', 'TextAuto'))) { // Set autowidth for some types
- $this->workbook->getActiveSheet()->getColumnDimension($this->column2Letter($this->col + 1))->setAutoSize(true);
- }
- $this->col++;
- }
- $this->row++;
- return 0;
- }
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Output record line into file
- *
- * @param array $array_selected_sorted Array with list of field to export
- * @param resource $objp A record from a fetch with all fields from select
- * @param Translate $outputlangs Object lang to translate values
- * @param array $array_types Array with types of fields
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_record($array_selected_sorted, $objp, $outputlangs, $array_types)
- {
- // phpcs:enable
- global $conf;
-
- // Define first row
- $this->col = 1;
-
- $reg = array();
- $selectlabelvalues = array();
- foreach ($array_selected_sorted as $code => $value) {
- if (strpos($code, ' as ') == 0) {
- $alias = str_replace(array('.', '-', '(', ')'), '_', $code);
- } else {
- $alias = substr($code, strpos($code, ' as ') + 4);
- }
- if (empty($alias)) {
- dol_print_error('', 'Bad value for field with code='.$code.'. Try to redefine export.');
- }
- $newvalue = $objp->$alias;
-
- $newvalue = $this->excel_clean($newvalue);
- $typefield = isset($array_types[$code]) ? $array_types[$code] : '';
-
- if (preg_match('/^Select:/i', $typefield) && $typefield = substr($typefield, 7)) {
- $array = jsonOrUnserialize($typefield);
- if (is_array($array) && !empty($newvalue)) {
- $array = $array['options'];
- $selectlabelvalues[$code."_label"] = $array[$newvalue];
- } else {
- $selectlabelvalues[$code."_label"] = "";
- }
- }
-
- // Traduction newvalue
- if (preg_match('/^\((.*)\)$/i', $newvalue, $reg)) {
- $newvalue = $outputlangs->transnoentities($reg[1]);
- } else {
- $newvalue = $outputlangs->convToOutputCharset($newvalue);
- }
-
- if (preg_match('/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/i', $newvalue)) {
- $newvalue = dol_stringtotime($newvalue);
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($newvalue));
- $coord = $this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row + 1)->getCoordinate();
- $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('yyyy-mm-dd');
- } elseif (preg_match('/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/i', $newvalue)) {
- $newvalue = dol_stringtotime($newvalue);
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($newvalue));
- $coord = $this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row + 1)->getCoordinate();
- $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('yyyy-mm-dd h:mm:ss');
- } else {
- if ($typefield == 'Text' || $typefield == 'TextAuto') {
- // If $newvalue start with an equal sign we don't want it to be interpreted as a formula, so we add a '. Such transformation should be
- // done by SetCellValueByColumnAndRow but it is not, so we do it ourself.
- $newvalue = (dol_substr($newvalue, 0, 1) === '=' ? '\'' : '') . $newvalue;
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, $newvalue);
- $coord = $this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row + 1)->getCoordinate();
- $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('@');
- $this->workbook->getActiveSheet()->getStyle($coord)->getAlignment()->setHorizontal(PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
- } else {
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, $newvalue);
- }
- }
- $this->col++;
- }
- foreach ($selectlabelvalues as $key => $newvalue) {
- if (preg_match('/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/i', $newvalue)) {
- $newvalue = dol_stringtotime($newvalue);
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($newvalue));
- $coord = $this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row + 1)->getCoordinate();
- $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('yyyy-mm-dd');
- } elseif (preg_match('/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/i', $newvalue)) {
- $newvalue = dol_stringtotime($newvalue);
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($newvalue));
- $coord = $this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row + 1)->getCoordinate();
- $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('yyyy-mm-dd h:mm:ss');
- } else {
- if ($typefield == 'Text' || $typefield == 'TextAuto') {
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, (string) $newvalue);
- $coord = $this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row + 1)->getCoordinate();
- $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('@');
- $this->workbook->getActiveSheet()->getStyle($coord)->getAlignment()->setHorizontal(PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
- } else {
- $this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row + 1, $newvalue);
- }
- }
- $this->col++;
- }
- $this->row++;
- return 0;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Write footer
- *
- * @param Translate $outputlangs Output language object
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_footer($outputlangs)
- {
- // phpcs:enable
- return 0;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Close Excel file
- *
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function close_file()
- {
- // phpcs:enable
- global $conf;
-
- $objWriter = new Xlsx($this->workbook);
- $objWriter->save($this->file);
- $this->workbook->disconnectWorksheets();
- unset($this->workbook);
-
- return 1;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Clean a cell to respect rules of Excel file cells
- *
- * @param string $newvalue String to clean
- * @return string Value cleaned
- */
- public function excel_clean($newvalue)
- {
- // phpcs:enable
- // Rule Dolibarr: No HTML
- $newvalue = dol_string_nohtmltag($newvalue);
-
- return $newvalue;
+ $this->row=0;
@@ -453,6 +91,5 @@
- * Convert a column to letter (1->A, 0->B, 27->AA, ...)
- *
- * @param int $c Column position
- * @return string Letter
- */
- public function column2Letter($c)
+ * Close Excel file
+ *
+ * @return int <0 if KO, >0 if OK
+ */
+ function close_file()
@@ -460,4 +97 @@
- $c = intval($c);
- if ($c <= 0) {
- return '';
- }
+ global $conf;
@@ -465,36 +99,12 @@
- $letter = '';
- while ($c != 0) {
- $p = ($c - 1) % 26;
- $c = intval(($c - $p) / 26);
- $letter = chr(65 + $p).$letter;
- }
-
- return $letter;
- }
-
- /**
- * Set cell value and automatically merge if we give an endcell
- *
- * @param string $val cell value
- * @param string $startCell starting cell
- * @param string $endCell ending cell
- * @return int 1 if success -1 if failed
- */
- public function setCellValue($val, $startCell, $endCell = '')
- {
- try {
- $this->workbook->getActiveSheet()->setCellValue($startCell, $val);
-
- if (!empty($endCell)) {
- $cellRange = $startCell.':'.$endCell;
- $this->workbook->getActiveSheet()->mergeCells($startCell.':'.$endCell);
- } else {
- $cellRange = $startCell;
- }
- if (!empty($this->styleArray)) {
- $this->workbook->getActiveSheet()->getStyle($cellRange)->applyFromArray($this->styleArray);
- }
- } catch (Exception $e) {
- $this->error = $e->getMessage();
- return -1;
- }
+ if (! empty($conf->global->MAIN_USE_PHP_WRITEEXCEL))
+ {
+ $this->workbook->close();
+ }
+ else
+ {
+ require_once PHPEXCEL_PATH.'PHPExcel/Writer/Excel5.php';
+ $objWriter = new PHPExcel_Writer_Excel2007($this->workbook);
+ $objWriter->save($this->file);
+ $this->workbook->disconnectWorksheets();
+ unset($this->workbook);
+ }
@@ -504,17 +114 @@
- /**
- * Set border style
- *
- * @param string $thickness style \PhpOffice\PhpSpreadsheet\Style\Border
- * @param string $color color \PhpOffice\PhpSpreadsheet\Style\Color
- * @return int 1 if ok
- */
- public function setBorderStyle($thickness, $color)
- {
- $this->styleArray['borders'] = array(
- 'outline' => array(
- 'borderStyle' => $thickness,
- 'color' => array('argb' => $color)
- )
- );
- return 1;
- }
+}
@@ -522,162 +115,0 @@
- /**
- * Set font style
- *
- * @param bool $bold true if bold
- * @param string $color color \PhpOffice\PhpSpreadsheet\Style\Color
- * @return int 1
- */
- public function setFontStyle($bold, $color)
- {
- $this->styleArray['font'] = array(
- 'color' => array('argb' => $color),
- 'bold' => $bold
- );
- return 1;
- }
-
- /**
- * Set alignment style (horizontal, left, right, ...)
- *
- * @param string $horizontal PhpOffice\PhpSpreadsheet\Style\Alignment
- * @return int 1
- */
- public function setAlignmentStyle($horizontal)
- {
- $this->styleArray['alignment'] = array('horizontal' => $horizontal);
- return 1;
- }
-
- /**
- * Reset Style
- * @return int 1
- */
- public function resetStyle()
- {
- $this->styleArray = array();
- return 1;
- }
-
- /**
- * Make a NxN Block in sheet
- *
- * @param string $startCell starting cell
- * @param array $TDatas array(ColumnName=>array(Row value 1, row value 2, etc ...))
- * @param bool $boldTitle true if bold headers
- * @return int 1 if OK, -1 if KO
- */
- public function setBlock($startCell, $TDatas = array(), $boldTitle = false)
- {
- try {
- if (!empty($TDatas)) {
- $startCell = $this->workbook->getActiveSheet()->getCell($startCell);
- $startColumn = Coordinate::columnIndexFromString($startCell->getColumn());
- $startRow = $startCell->getRow();
- foreach ($TDatas as $column => $TRows) {
- if ($boldTitle) {
- $this->setFontStyle(true, $this->styleArray['font']['color']['argb']);
- }
- $cell = $this->workbook->getActiveSheet()->getCellByColumnAndRow($startColumn, $startRow);
- $this->setCellValue($column, $cell->getCoordinate());
- $rowPos = $startRow;
- if ($boldTitle) {
- $this->setFontStyle(false, $this->styleArray['font']['color']['argb']);
- }
- foreach ($TRows as $row) {
- $rowPos++;
- $cell = $this->workbook->getActiveSheet()->getCellByColumnAndRow($startColumn, $rowPos);
- $this->setCellValue($row, $cell->getCoordinate());
- }
- $startColumn++;
- }
- }
- } catch (Exception $e) {
- $this->error = $e->getMessage();
- return -1;
- }
- return 1;
- }
-
- /**
- * Make a 2xN Tab in Sheet
- *
- * @param string $startCell A1
- * @param array $TDatas array(Title=>val)
- * @param bool $boldTitle true if bold titles
- * @return int 1 if OK, -1 if KO
- */
- public function setBlock2Columns($startCell, $TDatas = array(), $boldTitle = false)
- {
- try {
- if (!empty($TDatas)) {
- $startCell = $this->workbook->getActiveSheet()->getCell($startCell);
- $startColumn = Coordinate::columnIndexFromString($startCell->getColumn());
- $startRow = $startCell->getRow();
- foreach ($TDatas as $title => $val) {
- $cell = $this->workbook->getActiveSheet()->getCellByColumnAndRow($startColumn, $startRow);
- if ($boldTitle) {
- $this->setFontStyle(true, $this->styleArray['font']['color']['argb']);
- }
- $this->setCellValue($title, $cell->getCoordinate());
- if ($boldTitle) {
- $this->setFontStyle(false, $this->styleArray['font']['color']['argb']);
- }
- $cell2 = $this->workbook->getActiveSheet()->getCellByColumnAndRow($startColumn + 1, $startRow);
- $this->setCellValue($val, $cell2->getCoordinate());
- $startRow++;
- }
- }
- } catch (Exception $e) {
- $this->error = $e->getMessage();
- return -1;
- }
- return 1;
- }
-
- /**
- * Enable auto sizing for column range
- *
- * @param string $firstColumn first column to autosize
- * @param string $lastColumn to last column to autosize
- * @return int 1
- */
- public function enableAutosize($firstColumn, $lastColumn)
- {
- foreach (range($firstColumn, $lastColumn) as $columnID) {
- $this->workbook->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
- }
- return 1;
- }
-
- /**
- * Set a value cell and merging it by giving a starting cell and a length
- *
- * @param string $val Cell value
- * @param string $startCell Starting cell
- * @param int $length Length
- * @param int $offset Starting offset
- * @return string Coordinate or -1 if KO
- */
- public function setMergeCellValueByLength($val, $startCell, $length, $offset = 0)
- {
- try {
- $startCell = $this->workbook->getActiveSheet()->getCell($startCell);
- $startColumn = Coordinate::columnIndexFromString($startCell->getColumn());
- if (!empty($offset)) {
- $startColumn += $offset;
- }
-
- $startRow = $startCell->getRow();
- $startCell = $this->workbook->getActiveSheet()->getCellByColumnAndRow($startColumn, $startRow);
- $startCoordinate = $startCell->getCoordinate();
- $this->setCellValue($val, $startCell->getCoordinate());
-
- $endCell = $this->workbook->getActiveSheet()->getCellByColumnAndRow($startColumn + ($length - 1), $startRow);
- $endCoordinate = $endCell->getCoordinate();
- $this->workbook->getActiveSheet()->mergeCells($startCoordinate.':'.$endCoordinate);
- } catch (Exception $e) {
- $this->error = $e->getMessage();
- return -1;
- }
- return $endCoordinate;
- }
-}
--- /tmp/dsg/dolibarr/htdocs/core/modules/export/github_19.0.3_export_tsv.modules.php
+++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_export_tsv.modules.php
@@ -33 +33 @@
- /**
+ /**
@@ -38,11 +38,11 @@
- /**
- * @var string label
- */
- public $label;
-
- public $extension;
-
- /**
- * Dolibarr version of the loaded document
- * @var string
- */
+ /**
+ * @var string label
+ */
+ public $label;
+
+ public $extension;
+
+ /**
+ * Dolibarr version of the loaded document
+ * @var string
+ */
@@ -51,30 +51,30 @@
- public $label_lib;
-
- public $version_lib;
-
- public $separator = "\t";
-
- public $handle; // Handle fichier
-
-
- /**
- * Constructor
- *
- * @param DoliDB $db Database handler
- */
- public function __construct($db)
- {
- global $conf, $langs;
- $this->db = $db;
-
- $this->id = 'tsv'; // Same value then xxx in file name export_xxx.modules.php
- $this->label = 'TSV'; // Label of driver
- $this->desc = $langs->trans('TsvFormatDesc');
- $this->extension = 'tsv'; // Extension for generated file by this driver
- $this->picto = 'mime/other'; // Picto
- $this->version = '1.15'; // Driver version
-
- // If driver use an external library, put its name here
- $this->label_lib = 'Dolibarr';
- $this->version_lib = DOL_VERSION;
- }
+ public $label_lib;
+
+ public $version_lib;
+
+ public $separator = "\t";
+
+ public $handle; // Handle fichier
+
+
+ /**
+ * Constructor
+ *
+ * @param DoliDB $db Database handler
+ */
+ public function __construct($db)
+ {
+ global $conf, $langs;
+ $this->db = $db;
+
+ $this->id = 'tsv'; // Same value then xxx in file name export_xxx.modules.php
+ $this->label = 'TSV'; // Label of driver
+ $this->desc = $langs->trans('TsvFormatDesc');
+ $this->extension = 'tsv'; // Extension for generated file by this driver
+ $this->picto = 'mime/other'; // Picto
+ $this->version = '1.15'; // Driver version
+
+ // If driver use an external library, put its name here
+ $this->label_lib = 'Dolibarr';
+ $this->version_lib = DOL_VERSION;
+ }
@@ -87,4 +87,4 @@
- public function getDriverId()
- {
- return $this->id;
- }
+ public function getDriverId()
+ {
+ return $this->id;
+ }
@@ -97,4 +97,4 @@
- public function getDriverLabel()
- {
- return $this->label;
- }
+ public function getDriverLabel()
+ {
+ return $this->label;
+ }
@@ -107,4 +107,4 @@
- public function getDriverDesc()
- {
- return $this->desc;
- }
+ public function getDriverDesc()
+ {
+ return $this->desc;
+ }
@@ -117,4 +117,4 @@
- public function getDriverExtension()
- {
- return $this->extension;
- }
+ public function getDriverExtension()
+ {
+ return $this->extension;
+ }
@@ -127,4 +127,4 @@
- public function getDriverVersion()
- {
- return $this->version;
- }
+ public function getDriverVersion()
+ {
+ return $this->version;
+ }
@@ -137,4 +137,4 @@
- public function getLibLabel()
- {
- return $this->label_lib;
- }
+ public function getLibLabel()
+ {
+ return $this->label_lib;
+ }
@@ -147,24 +147,24 @@
- public function getLibVersion()
- {
- return $this->version_lib;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Open output file
- *
- * @param string $file Path of filename to generate
- * @param Translate $outputlangs Output language object
- * @return int Return integer <0 if KO, >=0 if OK
- */
- public function open_file($file, $outputlangs)
- {
- // phpcs:enable
- global $langs;
-
- dol_syslog("ExportTsv::open_file file=".$file);
-
- $ret = 1;
-
- $outputlangs->load("exports");
+ public function getLibVersion()
+ {
+ return $this->version_lib;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Open output file
+ *
+ * @param string $file Path of filename to generate
+ * @param Translate $outputlangs Output language object
+ * @return int <0 if KO, >=0 if OK
+ */
+ public function open_file($file, $outputlangs)
+ {
+ // phpcs:enable
+ global $langs;
+
+ dol_syslog("ExportTsv::open_file file=".$file);
+
+ $ret = 1;
+
+ $outputlangs->load("exports");
@@ -172 +172,2 @@
- if (!$this->handle) {
+ if (!$this->handle)
+ {
@@ -179,3 +180,3 @@
- }
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
@@ -186,5 +187,88 @@
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_header($outputlangs)
- {
- // phpcs:enable
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_header($outputlangs)
+ {
+ // phpcs:enable
+ return 0;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output title line into file
+ *
+ * @param array $array_export_fields_label Array with list of label of fields
+ * @param array $array_selected_sorted Array with list of field to export
+ * @param Translate $outputlangs Object lang to translate values
+ * @param array $array_types Array with types of fields
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_title($array_export_fields_label, $array_selected_sorted, $outputlangs, $array_types)
+ {
+ // phpcs:enable
+ foreach ($array_selected_sorted as $code => $value)
+ {
+ $newvalue = $outputlangs->transnoentities($array_export_fields_label[$code]); // newvalue is now $outputlangs->charset_output encoded
+ $newvalue = $this->tsv_clean($newvalue, $outputlangs->charset_output);
+
+ fwrite($this->handle, $newvalue.$this->separator);
+ }
+ fwrite($this->handle, "\n");
+ return 0;
+ }
+
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output record line into file
+ *
+ * @param array $array_selected_sorted Array with list of field to export
+ * @param resource $objp A record from a fetch with all fields from select
+ * @param Translate $outputlangs Object lang to translate values
+ * @param array $array_types Array with types of fields
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_record($array_selected_sorted, $objp, $outputlangs, $array_types)
+ {
+ // phpcs:enable
+ global $conf;
+
+ $this->col = 0;
+ foreach ($array_selected_sorted as $code => $value)
+ {
+ if (strpos($code, ' as ') == 0) $alias = str_replace(array('.', '-', '(', ')'), '_', $code);
+ else $alias = substr($code, strpos($code, ' as ') + 4);
+ if (empty($alias)) dol_print_error('', 'Bad value for field with code='.$code.'. Try to redefine export.');
+
+ $newvalue = $outputlangs->convToOutputCharset($objp->$alias); // objp->$alias must be utf8 encoded as any var in memory // newvalue is now $outputlangs->charset_output encoded
+ $typefield = isset($array_types[$code]) ? $array_types[$code] : '';
+
+ // Translation newvalue
+ if (preg_match('/^\((.*)\)$/i', $newvalue, $reg)) $newvalue = $outputlangs->transnoentities($reg[1]);
+
+ $newvalue = $this->tsv_clean($newvalue, $outputlangs->charset_output);
+
+ if (preg_match('/^Select:/i', $typefield, $reg) && $typefield = substr($typefield, 7))
+ {
+ $array = unserialize($typefield);
+ $array = $array['options'];
+ $newvalue = $array[$newvalue];
+ }
+
+ fwrite($this->handle, $newvalue.$this->separator);
+ $this->col++;
+ }
+ fwrite($this->handle, "\n");
+ return 0;
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Output footer into file
+ *
+ * @param Translate $outputlangs Output language object
+ * @return int <0 if KO, >0 if OK
+ */
+ public function write_footer($outputlangs)
+ {
+ // phpcs:enable
@@ -192,108 +276,3 @@
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Output title line into file
- *
- * @param array $array_export_fields_label Array with list of label of fields
- * @param array $array_selected_sorted Array with list of field to export
- * @param Translate $outputlangs Object lang to translate values
- * @param array $array_types Array with types of fields
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_title($array_export_fields_label, $array_selected_sorted, $outputlangs, $array_types)
- {
- // phpcs:enable
- $selectlabel = array();
- foreach ($array_selected_sorted as $code => $value) {
- $newvalue = $outputlangs->transnoentities($array_export_fields_label[$code]); // newvalue is now $outputlangs->charset_output encoded
- $newvalue = $this->tsv_clean($newvalue, $outputlangs->charset_output);
-
- fwrite($this->handle, $newvalue.$this->separator);
- $typefield = isset($array_types[$code]) ? $array_types[$code] : '';
-
- if (preg_match('/^Select:/i', $typefield) && $typefield = substr($typefield, 7)) {
- $selectlabel[$code."_label"] = $newvalue."_label";
- }
- }
- foreach ($selectlabel as $key => $value) {
- fwrite($this->handle, $value.$this->separator);
- }
- fwrite($this->handle, "\n");
- return 0;
- }
-
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Output record line into file
- *
- * @param array $array_selected_sorted Array with list of field to export
- * @param Resource $objp A record from a fetch with all fields from select
- * @param Translate $outputlangs Object lang to translate values
- * @param array $array_types Array with types of fields
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_record($array_selected_sorted, $objp, $outputlangs, $array_types)
- {
- // phpcs:enable
- global $conf;
-
- $this->col = 0;
- $selectlabelvalues = array();
- foreach ($array_selected_sorted as $code => $value) {
- if (strpos($code, ' as ') == 0) {
- $alias = str_replace(array('.', '-', '(', ')'), '_', $code);
- } else {
- $alias = substr($code, strpos($code, ' as ') + 4);
- }
- if (empty($alias)) {
- dol_print_error('', 'Bad value for field with code='.$code.'. Try to redefine export.');
- }
-
- $newvalue = $outputlangs->convToOutputCharset($objp->$alias); // objp->$alias must be utf8 encoded as any var in memory // newvalue is now $outputlangs->charset_output encoded
- $typefield = isset($array_types[$code]) ? $array_types[$code] : '';
-
- // Translation newvalue
- if (preg_match('/^\((.*)\)$/i', $newvalue, $reg)) {
- $newvalue = $outputlangs->transnoentities($reg[1]);
- }
-
- $newvalue = $this->tsv_clean($newvalue, $outputlangs->charset_output);
-
- if (preg_match('/^Select:/i', $typefield) && $typefield = substr($typefield, 7)) {
- $array = jsonOrUnserialize($typefield);
- if (is_array($array) && !empty($newvalue)) {
- $array = $array['options'];
- $selectlabelvalues[$code."_label"] = $array[$newvalue];
- } else {
- $selectlabelvalues[$code."_label"] = "";
- }
- }
-
- fwrite($this->handle, $newvalue.$this->separator);
- $this->col++;
- }
- foreach ($selectlabelvalues as $key => $value) {
- fwrite($this->handle, $value.$this->separator);
- $this->col++;
- }
- fwrite($this->handle, "\n");
- return 0;
- }
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Output footer into file
- *
- * @param Translate $outputlangs Output language object
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function write_footer($outputlangs)
- {
- // phpcs:enable
- return 0;
- }
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
@@ -303,34 +282,34 @@
- * @return int Return integer <0 if KO, >0 if OK
- */
- public function close_file()
- {
- // phpcs:enable
- fclose($this->handle);
- return 0;
- }
-
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
- /**
- * Clean a cell to respect rules of TSV file cells
- *
- * @param string $newvalue String to clean
- * @param string $charset Input AND Output character set
- * @return string Value cleaned
- */
- public function tsv_clean($newvalue, $charset)
- {
- // phpcs:enable
- // Rule Dolibarr: No HTML
- $newvalue = dol_string_nohtmltag($newvalue, 1, $charset);
-
- // Rule 1 TSV: No CR, LF in cells
- $newvalue = str_replace("\r", '', $newvalue);
- $newvalue = str_replace("\n", '\n', $newvalue);
-
- // Rule 2 TSV: If value contains tab, we must replace by space
- if (preg_match('/'.$this->separator.'/', $newvalue)) {
- $newvalue = str_replace("\t", " ", $newvalue);
- }
-
- return $newvalue;
- }
+ * @return int <0 if KO, >0 if OK
+ */
+ public function close_file()
+ {
+ // phpcs:enable
+ fclose($this->handle);
+ return 0;
+ }
+
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
+ /**
+ * Clean a cell to respect rules of TSV file cells
+ *
+ * @param string $newvalue String to clean
+ * @param string $charset Input AND Output character set
+ * @return string Value cleaned
+ */
+ public function tsv_clean($newvalue, $charset)
+ {
+ // phpcs:enable
+ // Rule Dolibarr: No HTML
+ $newvalue = dol_string_nohtmltag($newvalue, 1, $charset);
+
+ // Rule 1 TSV: No CR, LF in cells
+ $newvalue = str_replace("\r", '', $newvalue);
+ $newvalue = str_replace("\n", '\n', $newvalue);
+
+ // Rule 2 TSV: If value contains tab, we must replace by space
+ if (preg_match('/'.$this->separator.'/', $newvalue)) {
+ $newvalue = str_replace("\t", " ", $newvalue);
+ }
+
+ return $newvalue;
+ }
--- /tmp/dsg/dolibarr/htdocs/core/modules/export/github_19.0.3_modules_export.php
+++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_modules_export.php
@@ -31 +31 @@
-class ModeleExports extends CommonDocGenerator // This class can't be abstract as there is instance propreties loaded by listOfAvailableExportFormat
+class ModeleExports extends CommonDocGenerator // This class can't be abstract as there is instance propreties loaded by liste_modeles
@@ -40,2 +39,0 @@
- public $driverdesc = array();
-
@@ -48,4 +45,0 @@
- /**
- * @var string picto
- */
- public $picto;
@@ -53,25 +47 @@
- /**
- * @var string description
- */
- public $desc;
-
- /**
- * @var string escape
- */
- public $escape;
-
- /**
- * @var string enclosure
- */
- public $enclosure;
-
- /**
- * @var int col
- */
- public $col;
-
- /**
- * @var int disabled
- */
- public $disabled;
-
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
@@ -81,3 +51,3 @@
- * @param DoliDB $db Database handler
- * @param integer $maxfilenamelength Max length of value to show
- * @return array List of templates (same content than array this->driverlabel)
+ * @param DoliDB $db Database handler
+ * @param integer $maxfilenamelength Max length of value to show
+ * @return array List of templates (same content than array this->driverlabel)
@@ -85 +55 @@
- public function listOfAvailableExportFormat($db, $maxfilenamelength = 0)
+ public function liste_modeles($db, $maxfilenamelength = 0)
@@ -87,3 +57,2 @@
- global $langs;
-
- dol_syslog(get_class($this)."::listOfAvailableExportFormat");
+ // phpcs:enable
+ dol_syslog(get_class($this)."::liste_modeles");
@@ -96,8 +65,7 @@
- if (is_resource($handle)) {
- while (($file = readdir($handle)) !== false) {
- $reg = array();
- if (preg_match("/^export_(.*)\.modules\.php$/i", $file, $reg)) {
- $moduleid = $reg[1];
- if ($moduleid == 'csv') {
- continue; // This may happen if on old file export_csv.modules.php was not correctly deleted
- }
+ if (is_resource($handle))
+ {
+ while (($file = readdir($handle)) !== false)
+ {
+ if (preg_match("/^export_(.*)\.modules\.php$/i", $file, $reg))
+ {
+ $moduleid = $reg[1];
@@ -105,3 +73,3 @@
- // Loading Class
- $file = $dir."export_".$moduleid.".modules.php";
- $classname = "Export".ucfirst($moduleid);
+ // Loading Class
+ $file = $dir."export_".$moduleid.".modules.php";
+ $classname = "Export".ucfirst($moduleid);
@@ -109,4 +77,4 @@
- require_once $file;
- if (class_exists($classname)) {
- $module = new $classname($db);
- // var_dump($classname);
+ require_once $file;
+ if (class_exists($classname))
+ {
+ $module = new $classname($db);
@@ -114,20 +82,15 @@
- // Picto
- $this->picto[$module->id] = $module->picto;
- // Driver properties
- $this->driverlabel[$module->id] = $module->getDriverLabel().(empty($module->disabled) ? '' : ' __(Disabled)__'); // '__(Disabled)__' is a key
- if (method_exists($module, 'getDriverLabelBis')) {
- if ($module->getDriverLabelBis()) {
- $this->driverlabel[$module->id] .= ' ('.$module->getDriverLabelBis().')';
- }
- }
- $this->driverdesc[$module->id] = $module->getDriverDesc();
- $this->driverversion[$module->id] = $module->getDriverVersion();
- // If use an external lib
- $this->liblabel[$module->id] = $module->getLibLabel();
- $this->libversion[$module->id] = $module->getLibVersion();
- }
- $i++;
- }
- }
- closedir($handle);
- }
+ // Picto
+ $this->picto[$module->id] = $module->picto;
+ // Driver properties
+ $this->driverlabel[$module->id] = $module->getDriverLabel().(empty($module->disabled) ? '' : ' __(Disabled)__'); // '__(Disabled)__' is a key
+ $this->driverdesc[$module->id] = $module->getDriverDesc();
+ $this->driverversion[$module->id] = $module->getDriverVersion();
+ // If use an external lib
+ $this->liblabel[$module->id] = $module->getLibLabel();
+ $this->libversion[$module->id] = $module->getLibVersion();
+ }
+ $i++;
+ }
+ }
+ closedir($handle);
+ }
@@ -135 +98 @@
- asort($this->driverlabel);
+ asort($this->driverlabel);
@@ -153 +116 @@
- * Return label of driver export
+ * Renvoi libelle d'un driver export
@@ -186 +149 @@
- * Renvoi label of driver lib
+ * Renvoi libelle de librairie externe du driver
@@ -197 +160 @@
- * Return version of driver lib
+ * Renvoi version de librairie externe du driver