--- /tmp/dsg/dolibarr/htdocs/core/modules/export/github_export_csv.modules.php +++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_export_csv.modules.php @@ -37,16 +37,16 @@ public $id; /** - * @var string export files label - */ - public $label; + * @var string export files label + */ + public $label; public $extension; /** - * Dolibarr version of the loaded document - * @var string - */ + * Dolibarr version of the loaded document + * @var string + */ public $version = 'dolibarr'; public $label_lib; @@ -156,7 +156,7 @@ } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Open output file * @@ -166,7 +166,7 @@ */ public function open_file($file, $outputlangs) { - // phpcs:enable + // phpcs:enable global $langs; dol_syslog("ExportCsv::open_file file=".$file); @@ -185,7 +185,7 @@ return $ret; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Output header into file * @@ -194,30 +194,32 @@ */ public function write_header($outputlangs) { - // phpcs:enable - return 0; - } - - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // 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 + * @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 + // phpcs:enable global $conf; if (!empty($conf->global->EXPORT_CSV_FORCE_CHARSET)) { $outputlangs->charset_output = $conf->global->EXPORT_CSV_FORCE_CHARSET; - } else { + } + else + { $outputlangs->charset_output = 'ISO-8859-1'; } @@ -233,25 +235,27 @@ } - // 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 + // 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 + // phpcs:enable global $conf; if (!empty($conf->global->EXPORT_CSV_FORCE_CHARSET)) { $outputlangs->charset_output = $conf->global->EXPORT_CSV_FORCE_CHARSET; - } else { + } + else + { $outputlangs->charset_output = 'ISO-8859-1'; } @@ -288,7 +292,7 @@ return 0; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Output footer into file * @@ -297,11 +301,11 @@ */ public function write_footer($outputlangs) { - // phpcs:enable - return 0; - } - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:enable + return 0; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Close file handle * @@ -309,7 +313,7 @@ */ public function close_file() { - // phpcs:enable + // phpcs:enable fclose($this->handle); return 0; } @@ -328,6 +332,7 @@ { global $conf; $addquote = 0; + // Rule Dolibarr: No HTML //print $charset.' '.$newvalue."\n"; --- /tmp/dsg/dolibarr/htdocs/core/modules/export/github_export_excel2007.modules.php +++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_export_excel2007.modules.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2006-2011 Laurent Destailleur * Copyright (C) 2012 Marcos GarcĂ­a * * This program is free software; you can redistribute it and/or modify @@ -13,623 +13,103 @@ * 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 . + * along with this program. If not, see . */ /** - * \file htdocs/core/modules/export/export_excel2007.modules.php + * \file htdocs/core/modules/export/export_excel.modules.php * \ingroup export * \brief File of class to generate export file with Excel format + * \author Laurent Destailleur */ require_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php'; +require_once DOL_DOCUMENT_ROOT.'/core/modules/export/export_excel.modules.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; -use PhpOffice\PhpSpreadsheet\Spreadsheet; -use PhpOffice\PhpSpreadsheet\Writer\Xlsx; -use PhpOffice\PhpSpreadsheet\Cell\Coordinate; /** * Class to build export files with Excel format */ -class ExportExcel2007 extends ModeleExports +class ExportExcel2007 extends ExportExcel { - /** - * @var string ID - */ - public $id; + var $id; + var $label; + var $extension; + var $version; - /** - * @var string Export Excel label - */ - public $label; + var $label_lib; + var $version_lib; - public $extension; - - /** - * Dolibarr version of the loaded document - * @var string - */ - public $version = 'dolibarr'; - - public $label_lib; - - public $version_lib; - - 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 /** * Constructor * * @param DoliDB $db Database handler */ - public function __construct($db) + function __construct($db) { global $conf, $langs; $this->db = $db; - $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 $this->desc = $langs->trans('Excel2007FormatDesc'); - $this->extension = 'xlsx'; // Extension for generated file by this driver - $this->picto = 'mime/xls'; // Picto - $this->version = '1.30'; // Driver version - $this->phpmin = array(5, 6); // 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 - $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) - if (empty($this->disabled)) - { - require_once PHPEXCELNEW_PATH.'Spreadsheet.php'; - $this->label_lib = 'PhpSpreadSheet'; - $this->version_lib = '1.6.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; - } - - /** - * 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 <0 if KO, >=0 if OK - */ - public function open_file($file, $outputlangs) - { - // phpcs:enable - global $user, $conf, $langs; - - if (!empty($conf->global->MAIN_USE_PHP_WRITEEXCEL)) - { - $outputlangs->charset_output = 'ISO-8859-1'; // Because Excel 5 format is ISO - } - - dol_syslog(get_class($this)."::open_file file=".$file); - $this->file = $file; - - $ret = 1; - - $outputlangs->load("exports"); - - require_once DOL_DOCUMENT_ROOT.'/includes/phpoffice/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 <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 <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); - - $this->col = 1; - if (!empty($conf->global->MAIN_USE_PHP_WRITEEXCEL)) { - $this->col = 0; - } - 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.'); - if (!empty($conf->global->MAIN_USE_PHP_WRITEEXCEL)) - { - $this->worksheet->write($this->row, $this->col, $outputlangs->transnoentities($alias), $formatheader); - } else { - $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++; - } - $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 <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; - if (!empty($conf->global->MAIN_USE_PHP_WRITEEXCEL)) { - $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 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, $reg) && $typefield = substr($typefield, 7)) - { - $array = unserialize($typefield); - $array = $array['options']; - $newvalue = $array[$newvalue]; - } - - // 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') - { - $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 <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 <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; } /** - * 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() { + global $conf; - $c = intval($c); - if ($c <= 0) return ''; - - 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); + } return 1; } - /** - * 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; - } +} - /** - * 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_export_tsv.modules.php +++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_export_tsv.modules.php @@ -30,146 +30,146 @@ */ class ExportTsv extends ModeleExports { - /** + /** * @var string ID */ public $id; - /** - * @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 + */ public $version = 'dolibarr'; - 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; + } /** * getDriverId * * @return string */ - public function getDriverId() - { - return $this->id; - } + public function getDriverId() + { + return $this->id; + } /** * getDriverLabel * * @return string Return driver label */ - public function getDriverLabel() - { - return $this->label; - } + public function getDriverLabel() + { + return $this->label; + } /** * getDriverDesc * * @return string */ - public function getDriverDesc() - { - return $this->desc; - } + public function getDriverDesc() + { + return $this->desc; + } /** * getDriverExtension * * @return string */ - public function getDriverExtension() - { - return $this->extension; - } + public function getDriverExtension() + { + return $this->extension; + } /** * getDriverVersion * * @return string */ - public function getDriverVersion() - { - return $this->version; - } + public function getDriverVersion() + { + return $this->version; + } /** * getLibLabel * * @return string */ - public function getLibLabel() - { - return $this->label_lib; - } + 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("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"); $this->handle = fopen($file, "wt"); - if (!$this->handle) + if (!$this->handle) { $langs->load("errors"); $this->error = $langs->trans("ErrorFailToCreateFile", $file); @@ -177,73 +177,73 @@ } return $ret; - } - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + } + + // 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 + 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 + */ + 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 + } + 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 + * @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; + 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 (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); @@ -256,61 +256,61 @@ } fwrite($this->handle, $newvalue.$this->separator); - $this->col++; + $this->col++; } - fwrite($this->handle, "\n"); - return 0; - } - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + 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 + public function write_footer($outputlangs) + { + // phpcs:enable return 0; - } - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + } + + // 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; - } - - // 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; - } + 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_modules_export.php +++ /tmp/dsg/dolibarr/htdocs/core/modules/export/client_modules_export.php @@ -44,17 +44,17 @@ public $libversion = array(); - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Load into memory list of available export format * - * @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) */ public function liste_modeles($db, $maxfilenamelength = 0) { - // phpcs:enable + // phpcs:enable dol_syslog(get_class($this)."::liste_modeles"); $dir = DOL_DOCUMENT_ROOT."/core/modules/export/"; @@ -62,40 +62,40 @@ // Recherche des fichiers drivers exports disponibles $i = 0; - if (is_resource($handle)) - { - while (($file = readdir($handle)) !== false) - { - if (preg_match("/^export_(.*)\.modules\.php$/i", $file, $reg)) - { - $moduleid = $reg[1]; + if (is_resource($handle)) + { + while (($file = readdir($handle)) !== false) + { + if (preg_match("/^export_(.*)\.modules\.php$/i", $file, $reg)) + { + $moduleid = $reg[1]; - // Loading Class - $file = $dir."export_".$moduleid.".modules.php"; - $classname = "Export".ucfirst($moduleid); + // Loading Class + $file = $dir."export_".$moduleid.".modules.php"; + $classname = "Export".ucfirst($moduleid); - require_once $file; - if (class_exists($classname)) - { - $module = new $classname($db); + require_once $file; + if (class_exists($classname)) + { + $module = new $classname($db); - // 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); - } + // 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); + } - asort($this->driverlabel); + asort($this->driverlabel); return $this->driverlabel; }