diff --git a/nur_src/v/bs3/Bs3IconManager.php b/nur_src/v/bs3/Bs3IconManager.php
index 0465df0..a81cbbd 100644
--- a/nur_src/v/bs3/Bs3IconManager.php
+++ b/nur_src/v/bs3/Bs3IconManager.php
@@ -15,6 +15,7 @@ class Bs3IconManager implements IIconManager {
"config" => "cog",
"save" => "floppy-disk",
"download" => "download-alt",
+ "upload" => "cloud-upload",
"new_window",
"mail" => "enveloppe",
"search",
@@ -84,6 +85,7 @@ EOT;
'config' => 'cog',
'save' => 'floppy-disk',
'download' => 'download-alt',
+ 'upload' => 'cloud-upload',
'new_window' => 'new-window',
'mail' => 'enveloppe',
'search' => 'search',
@@ -138,6 +140,7 @@ EOT;
const CONFIG = /*autogen*/[''];
const SAVE = /*autogen*/[''];
const DOWNLOAD = /*autogen*/[''];
+ const UPLOAD = /*autogen*/[''];
const NEW_WINDOW = /*autogen*/[''];
const MAIL = /*autogen*/[''];
const SEARCH = /*autogen*/[''];
diff --git a/src/A.php b/src/A.php
index 225f668..a610fa5 100644
--- a/src/A.php
+++ b/src/A.php
@@ -64,7 +64,7 @@ class A {
$dest = cl::mpselect($dest, $merge, $pkeys);
}
- static final function append_nn(?array &$dest, $value, $key=null) {
+ static final function set_nn(?array &$dest, $key, $value) {
if ($value !== null) {
if ($key === null) $dest[] = $value;
else $dest[$key] = $value;
@@ -72,7 +72,11 @@ class A {
return $value;
}
- static final function append_nz(?array &$dest, $value, $key=null) {
+ static final function append_nn(?array &$dest, $value, $key=null) {
+ return self::set_nn($dest, $key, $value);
+ }
+
+ static final function set_nz(?array &$dest, $key, $value) {
if ($value !== null && $value !== false) {
if ($key === null) $dest[] = $value;
else $dest[$key] = $value;
@@ -80,6 +84,10 @@ class A {
return $value;
}
+ static final function append_nz(?array &$dest, $value, $key=null) {
+ return self::set_nz($dest, $key, $value);
+ }
+
static final function prepend_nn(?array &$dest, $value) {
if ($value !== null) {
if ($dest === null) $dest = [];
@@ -95,4 +103,43 @@ class A {
}
return $value;
}
+
+ static final function replace_nx(?array &$dest, $key, $value) {
+ if ($dest !== null && !array_key_exists($key, $dest)) {
+ return $dest[$key] = $value;
+ } else {
+ return $dest[$key] ?? null;
+ }
+ }
+
+ static final function replace_n(?array &$dest, $key, $value) {
+ $pvalue = $dest[$key] ?? null;
+ if ($pvalue === null) $dest[$key] = $value;
+ return $pvalue;
+ }
+
+ static final function replace_z(?array &$dest, $key, $value) {
+ $pvalue = $dest[$key] ?? null;
+ if ($pvalue === null || $pvalue === false) $dest[$key] = $value;
+ return $pvalue;
+ }
+
+ static final function pop(?array $dest, $key, $default=null) {
+ if ($dest === null) return $default;
+ if ($key === null) return array_pop($dest);
+ $value = $dest[$key] ?? $default;
+ unset($dest[$key]);
+ return $value;
+ }
+
+ static final function popx(?array $dest, ?array $keys): array {
+ $values = [];
+ if ($dest === null) return $values;
+ if ($keys === null) return $values;
+ foreach ($keys as $key) {
+ $values[$key] = self::pop($dest, $key);
+ }
+ return $values;
+ }
+
}
diff --git a/src/file/csv/AbstractReader.php b/src/file/csv/AbstractReader.php
index 82bd29d..7ef5237 100644
--- a/src/file/csv/AbstractReader.php
+++ b/src/file/csv/AbstractReader.php
@@ -18,6 +18,7 @@ abstract class AbstractReader implements IReader {
$this->schema = $params["schema"] ?? static::SCHEMA;
$this->headers = $params["headers"] ?? static::HEADERS;
$this->input = $params["input"] ?? static::INPUT;
+ $this->parseEmptyAsNull = boolval($params["empty_as_null"] ?? true);
}
protected ?array $schema;
@@ -26,6 +27,8 @@ abstract class AbstractReader implements IReader {
protected $input;
+ protected bool $parseEmptyAsNull;
+
protected int $isrc = 0, $idest = 0;
protected function cook(array &$row): bool {
@@ -45,10 +48,14 @@ abstract class AbstractReader implements IReader {
}
protected function verifixCol(&$col): void {
- # conversion Date et DateTime
- if (DateTime::isa_datetime($col, true)) {
+ if ($col === "" && $this->parseEmptyAsNull) {
+ # valeur vide --> null
+ $col = null;
+ } elseif (DateTime::isa_datetime($col, true)) {
+ # datetime
$col = new DateTime($col);
} elseif (DateTime::isa_date($col, true)) {
+ # date
$col = new Date($col);
}
}