58 lines
1.6 KiB
PHP
58 lines
1.6 KiB
PHP
<?php
|
|
namespace nulib\file\tab;
|
|
|
|
use nulib\cl;
|
|
use nulib\exceptions;
|
|
use nulib\file\csv\CsvBuilder;
|
|
use nulib\file\web\Upload;
|
|
use nulib\os\path;
|
|
use nulib\ValueException;
|
|
|
|
trait TAbstractBuilder {
|
|
/** @param Upload|string|array $builder */
|
|
static function with($builder, ?array $params=null): IBuilder {
|
|
if ($builder instanceof self) return $builder;
|
|
$class = null;
|
|
if ($builder instanceof Upload) {
|
|
# faire un builder dans le même format que le fichier uploadé
|
|
if ($builder->isExt(".csv")) {
|
|
$class = CsvBuilder::class;
|
|
} else {
|
|
$class = static::class;
|
|
if ($builder->isExt(".ods")) {
|
|
$params["ss_type"] = "ods";
|
|
} else {
|
|
$params["ss_type"] = "xlsx";
|
|
}
|
|
}
|
|
return new $class($builder->name, $params);
|
|
}
|
|
|
|
if (is_string($builder)) {
|
|
$params["output"] = $builder;
|
|
} elseif (is_array($builder)) {
|
|
$params = cl::merge($builder, $params);
|
|
} elseif ($builder !== null) {
|
|
throw exceptions::invalid_type($builder, "builder", self::class);
|
|
}
|
|
|
|
$output = $params["output"] ?? null;
|
|
$ssType = null;
|
|
if (is_string($output)) {
|
|
$ext = path::ext($output);
|
|
if ($output === "-" || $ext === ".csv") {
|
|
$class = CsvBuilder::class;
|
|
} elseif ($ext === ".ods") {
|
|
$ssType = "ods";
|
|
} elseif ($ext === ".xlsx") {
|
|
$ssType = "xlsx";
|
|
} else {
|
|
$ssType = "xlsx";
|
|
}
|
|
}
|
|
$params["ss_type"] = $ssType;
|
|
if ($class === null) $class = static::class;
|
|
return new $class(null, $params);
|
|
}
|
|
}
|