--- /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