nulib-base/php/src/file/tab/TAbstractBuilder.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);
}
}