From 907aba45900e672e4691403183356228ffedd0db Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 14 Jun 2024 05:35:42 +0400 Subject: [PATCH] modifs.mineures sans commentaires --- .gitignore | 13 ----- .idea/php.xml | 1 + .idea/phpspec.xml | 6 +++ composer.json | 5 ++ composer.lock | 83 ++++++++++++++++++++++++++++++- src/ext/spreadsheet/SsBuilder.php | 7 --- src/file/Stream.php | 2 +- src/file/csv/AbstractBuilder.php | 2 +- src/file/csv/CsvReader.php | 8 +++ src/file/csv/IBuilder.php | 14 ++++++ src/file/csv/TAbstractBuilder.php | 2 +- src/file/csv/TAbstractReader.php | 18 ++++--- 12 files changed, 130 insertions(+), 31 deletions(-) create mode 100644 src/file/csv/IBuilder.php diff --git a/.gitignore b/.gitignore index 12ade08..28b881a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,3 @@ -/.idea/**/workspace.xml -/.idea/**/tasks.xml -/.idea/**/usage.statistics.xml -/.idea/**/dictionaries -/.idea/**/shelf -/.idea/**/contentModel.xml -/.idea/**/dataSources/ -/.idea/**/dataSources.ids -/.idea/**/dataSources.local.xml -/.idea/**/sqlDataSources.xml -/.idea/**/dynamic.xml -/.idea/**/uiDesigner.xml -/.idea/**/dbnavigator.xml /.phpunit.result.cache .~lock*# diff --git a/.idea/php.xml b/.idea/php.xml index a6c4286..240fd9f 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -56,6 +56,7 @@ + diff --git a/.idea/phpspec.xml b/.idea/phpspec.xml index c7cfbc2..c5034e9 100644 --- a/.idea/phpspec.xml +++ b/.idea/phpspec.xml @@ -11,6 +11,12 @@ + + + + \ No newline at end of file diff --git a/composer.json b/composer.json index bfacaba..0f6421f 100644 --- a/composer.json +++ b/composer.json @@ -3,6 +3,10 @@ "type": "library", "description": "espace de maturation pour les librairies", "repositories": [ + { + "type": "path", + "url": "../lib-spout" + }, { "type": "composer", "url": "https://repos.univ-reunion.fr/composer" @@ -14,6 +18,7 @@ }, "require-dev": { "nulib/tests": "7.4", + "lib/spout": "dev-master", "phpoffice/phpspreadsheet": "^1.0", "ext-posix": "*", "ext-pcntl": "*", diff --git a/composer.lock b/composer.lock index c10af18..61fe5da 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c951b0cf9bd2f2bab34a46242331eb88", + "content-hash": "35dddc6d357654919ddf2728176ac22f", "packages": [ { "name": "symfony/deprecation-contracts", @@ -360,6 +360,83 @@ }, "time": "2023-11-17T15:01:25+00:00" }, + { + "name": "lib/spout", + "version": "dev-master", + "dist": { + "type": "path", + "url": "../lib-spout", + "reference": "0fd23b5cd9312c9236e435687f2dbdf2d63c8d83" + }, + "require": { + "ext-dom": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-xmlreader": "*", + "ext-zip": "*", + "php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0" + }, + "replace": { + "openspout/openspout": "v3.7.4" + }, + "require-dev": { + "ext-zlib": "*", + "friendsofphp/php-cs-fixer": "^3.4", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-intl\" is not already installed or is too limited)", + "ext-intl": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "autoload": { + "psr-4": { + "OpenSpout\\": "src/" + } + }, + "autoload-dev": { + "classmap": [ + "tests/" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jephte Clain", + "email": "Jephte.Clain@univ-reunion.fr" + }, + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://github.com/openspout/openspout", + "keywords": [ + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "ooxml", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "transport-options": { + "relative": true + } + }, { "name": "maennchen/zipstream-php", "version": "2.2.6", @@ -2710,7 +2787,9 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "lib/spout": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/src/ext/spreadsheet/SsBuilder.php b/src/ext/spreadsheet/SsBuilder.php index 91b318e..47cd7d7 100644 --- a/src/ext/spreadsheet/SsBuilder.php +++ b/src/ext/spreadsheet/SsBuilder.php @@ -10,7 +10,6 @@ use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\Writer\Ods; -use PhpOffice\PhpSpreadsheet\Writer\Xls; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /** @@ -92,9 +91,6 @@ class SsBuilder extends AbstractBuilder { case ".ods": $contentType = "application/vnd.oasis.opendocument.spreadsheet"; break; - case ".xls": - $contentType = "application/vnd.ms-excel"; - break; case ".xlsx": default: $contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; @@ -108,9 +104,6 @@ class SsBuilder extends AbstractBuilder { case ".ods": $writer = new Ods($this->ss); break; - case ".xls": - $writer = new Xls($this->ss); - break; case ".xlsx": default: $writer = new Xlsx($this->ss); diff --git a/src/file/Stream.php b/src/file/Stream.php index b86a4f5..f28ae0a 100644 --- a/src/file/Stream.php +++ b/src/file/Stream.php @@ -165,7 +165,7 @@ class Stream extends AbstractIterator implements IReader, IWriter { /** @var array paramètres pour la lecture et l'écriture de flux au format CSV */ protected $csvFlavour; - function setCsvFlavour(string $flavour): void { + function setCsvFlavour(?string $flavour): void { $this->csvFlavour = csv_flavours::verifix($flavour); } diff --git a/src/file/csv/AbstractBuilder.php b/src/file/csv/AbstractBuilder.php index c6fe911..3621d22 100644 --- a/src/file/csv/AbstractBuilder.php +++ b/src/file/csv/AbstractBuilder.php @@ -9,7 +9,7 @@ use nur\sery\php\func; use nur\sery\php\time\DateTime; use nur\sery\web\http; -abstract class AbstractBuilder extends TempStream { +abstract class AbstractBuilder extends TempStream implements IBuilder { /** @var ?array schéma des données à écrire */ const SCHEMA = null; diff --git a/src/file/csv/CsvReader.php b/src/file/csv/CsvReader.php index 7177a80..b824d20 100644 --- a/src/file/csv/CsvReader.php +++ b/src/file/csv/CsvReader.php @@ -6,8 +6,16 @@ use nur\sery\file\FileReader; class CsvReader extends AbstractReader { use TAbstractReader; + function __construct($input, ?array $params=null) { + parent::__construct($input, $params); + $this->csvFlavour = $params["csv_flavour"] ?? null; + } + + protected ?string $csvFlavour; + function getIterator() { $reader = new FileReader($this->input); + $reader->setCsvFlavour($this->csvFlavour); while (($row = $reader->fgetcsv()) !== null) { foreach ($row as &$col) { $this->verifixCol($col); diff --git a/src/file/csv/IBuilder.php b/src/file/csv/IBuilder.php new file mode 100644 index 0000000..393a724 --- /dev/null +++ b/src/file/csv/IBuilder.php @@ -0,0 +1,14 @@ +isExt(".csv")) $class = CsvReader::class; else $class = static::class; - return new $class($reader->tmpName); + return new $class($reader->tmpName, $params); } - if (is_string($reader)) $reader = ["input" => $reader]; - if (!is_array($reader)) { + + if (is_string($reader)) { + $params["input"] = $reader; + } elseif (is_array($reader)) { + $params = cl::merge($reader, $params); + } elseif ($reader !== null) { throw ValueException::invalid_type($reader, self::class); } - $input = $reader["input"] ?? null; + + $input = $params["input"] ?? null; if (is_string($input) && path::ext($input) === ".csv") { $class = CsvReader::class; } if ($class === null) $class = static::class; - return new $class(null, $reader); + return new $class(null, $params); } }