83 lines
2.4 KiB
PHP
83 lines
2.4 KiB
PHP
|
<?php
|
||
|
namespace nur\mapper\csv;
|
||
|
|
||
|
use nur\b\params\Tparametrable;
|
||
|
use nur\b\ValueException;
|
||
|
use nur\mapper\base\Mapper;
|
||
|
|
||
|
abstract class AbstractCsvMapper extends Mapper {
|
||
|
use Tparametrable;
|
||
|
|
||
|
const SEPARATOR = csv_defaults::OO_SEPARATOR;
|
||
|
const ENCLOSURE = csv_defaults::OO_ENCLOSURE;
|
||
|
const ESCAPE = csv_defaults::OO_ESCAPE;
|
||
|
|
||
|
function __construct(?iterable $source=null) {
|
||
|
parent::__construct($source);
|
||
|
$this->separator = static::SEPARATOR;
|
||
|
$this->enclosure = static::ENCLOSURE;
|
||
|
$this->escape = static::ESCAPE;
|
||
|
}
|
||
|
|
||
|
const PARAMETRABLE_PARAMS_SCHEMA = [
|
||
|
"csv_flavour" => [null, null, "type de fichier CSV: excel ou ooffice"],
|
||
|
"multi_schema" => ["bool", false, "les flux multi-schémas sont-ils supportés?"],
|
||
|
];
|
||
|
|
||
|
protected $separator;
|
||
|
protected $enclosure;
|
||
|
protected $escape;
|
||
|
|
||
|
function getCsvFlavour(): array {
|
||
|
return [$this->separator, $this->enclosure, $this->escape];
|
||
|
}
|
||
|
|
||
|
/** @param $csvFlavour string|array */
|
||
|
function pp_setCsvFlavour($csvFlavour): void {
|
||
|
if ($csvFlavour === null) {
|
||
|
$csvFlavour = [static::SEPARATOR, static::ENCLOSURE, static::ESCAPE];
|
||
|
}
|
||
|
if (is_string($csvFlavour)) {
|
||
|
$csvFlavour = csv_defaults::verifix_name($csvFlavour);
|
||
|
switch ($csvFlavour) {
|
||
|
case csv_defaults::OO_NAME:
|
||
|
$csvFlavour = csv_defaults::OO_FLAVOUR;
|
||
|
break;
|
||
|
case csv_defaults::XL_NAME:
|
||
|
$csvFlavour = csv_defaults::XL_FLAVOUR;
|
||
|
break;
|
||
|
default:
|
||
|
if (strlen($csvFlavour) <= 3) {
|
||
|
$separator = substr($csvFlavour, 0, 1);
|
||
|
if (!$separator) $separator = static::SEPARATOR;
|
||
|
$enclosure = substr($csvFlavour, 1, 1);
|
||
|
if (!$enclosure) $enclosure = static::ENCLOSURE;
|
||
|
$escape = substr($csvFlavour, 2, 1);
|
||
|
if (!$escape) $escape = static::ESCAPE;
|
||
|
$csvFlavour = [$separator, $enclosure, $escape];
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (is_array($csvFlavour)) {
|
||
|
[$this->separator, $this->enclosure, $this->escape] = $csvFlavour;
|
||
|
} else {
|
||
|
throw ValueException::invalid_value($csvFlavour, "csv flavour");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/** @param $csvFlavour string|array */
|
||
|
function setCsvFlavour($csvFlavour): self {
|
||
|
$this->pp_setCsvFlavour($csvFlavour);
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/** @var bool les fichiers avec plusieurs schémas sont-ils supportés? */
|
||
|
protected $ppMultiSchema;
|
||
|
|
||
|
function setMultiSchema(bool $multiSchema=true): self {
|
||
|
$this->ppMultiSchema = $multiSchema;
|
||
|
return $this;
|
||
|
}
|
||
|
}
|