modifs.mineures sans commentaires
This commit is contained in:
parent
111a87bc3b
commit
057f3316ac
|
@ -50,8 +50,8 @@ class Capacitor {
|
||||||
$this->storage->_reset($this->channel, $recreate);
|
$this->storage->_reset($this->channel, $recreate);
|
||||||
}
|
}
|
||||||
|
|
||||||
function charge($item, $func=null, ?array $args=null): int {
|
function charge($item, $func=null, ?array $args=null, ?array &$values=null): int {
|
||||||
return $this->storage->_charge($this->channel, $item, $func, $args);
|
return $this->storage->_charge($this->channel, $item, $func, $args, $values);
|
||||||
}
|
}
|
||||||
|
|
||||||
function discharge(bool $reset=true): iterable {
|
function discharge(bool $reset=true): iterable {
|
||||||
|
|
|
@ -248,7 +248,7 @@ class CapacitorChannel {
|
||||||
* Si $item est modifié dans cette méthode, il est possible de le retourner
|
* Si $item est modifié dans cette méthode, il est possible de le retourner
|
||||||
* avec la clé "item" pour mettre à jour la ligne correspondante.
|
* avec la clé "item" pour mettre à jour la ligne correspondante.
|
||||||
*/
|
*/
|
||||||
function onCreate($item, array $rowValues): ?array {
|
function onCreate($item, array $rowValues, ?array $alwaysNull): ?array {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ EOT;
|
||||||
$this->_reset($this->getChannel($channel), $recreate);
|
$this->_reset($this->getChannel($channel), $recreate);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _charge(CapacitorChannel $channel, $item, $func, ?array $args): int {
|
function _charge(CapacitorChannel $channel, $item, $func, ?array $args, ?array &$values=null): int {
|
||||||
$this->_create($channel);
|
$this->_create($channel);
|
||||||
$tableName = $channel->getTableName();
|
$tableName = $channel->getTableName();
|
||||||
$now = date("Y-m-d H:i:s");
|
$now = date("Y-m-d H:i:s");
|
||||||
|
@ -204,10 +204,11 @@ EOT;
|
||||||
"modified_" => $now,
|
"modified_" => $now,
|
||||||
]);
|
]);
|
||||||
$insert = true;
|
$insert = true;
|
||||||
if ($func === null) $func = "->onCreate";
|
$initFunc = [$channel, "onCreate"];
|
||||||
func::ensure_func($func, $channel, $args);
|
$initArgs = $args;
|
||||||
|
func::ensure_func($initFunc, null, $initArgs);
|
||||||
$values = $this->unserialize($channel, $row);
|
$values = $this->unserialize($channel, $row);
|
||||||
$args = [$item, $values, ...$args];
|
$pvalues = null;
|
||||||
} else {
|
} else {
|
||||||
# modification
|
# modification
|
||||||
if ($channel->_wasSumModified("item", $row, $prow)) {
|
if ($channel->_wasSumModified("item", $row, $prow)) {
|
||||||
|
@ -216,22 +217,36 @@ EOT;
|
||||||
"modified_" => $now,
|
"modified_" => $now,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
if ($func === null) $func = "->onUpdate";
|
$initFunc = [$channel, "onUpdate"];
|
||||||
func::ensure_func($func, $channel, $args);
|
$initArgs = $args;
|
||||||
|
func::ensure_func($initFunc, null, $initArgs);
|
||||||
$values = $this->unserialize($channel, $row);
|
$values = $this->unserialize($channel, $row);
|
||||||
$pvalues = $this->unserialize($channel, $prow);
|
$pvalues = $this->unserialize($channel, $prow);
|
||||||
$args = [$item, $values, $pvalues, ...$args];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$updates = func::call($func, ...$args);
|
$updates = func::call($initFunc, $item, $values, $pvalues, ...$initArgs);
|
||||||
if (is_array($updates) && $updates) {
|
if (is_array($updates) && $updates) {
|
||||||
if ($insert === null) $insert = false;
|
if ($insert === null) $insert = false;
|
||||||
if (!array_key_exists("modified_", $updates)) {
|
if (!array_key_exists("modified_", $updates)) {
|
||||||
$updates["modified_"] = $now;
|
$updates["modified_"] = $now;
|
||||||
}
|
}
|
||||||
|
$values = cl::merge($values, $updates);
|
||||||
$row = cl::merge($row, $this->serialize($channel, $updates));
|
$row = cl::merge($row, $this->serialize($channel, $updates));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($func !== null) {
|
||||||
|
func::ensure_func($func, $channel, $args);
|
||||||
|
$updates = func::call($func, $item, $values, $pvalues, ...$args);
|
||||||
|
if (is_array($updates) && $updates) {
|
||||||
|
if ($insert === null) $insert = false;
|
||||||
|
if (!array_key_exists("modified_", $updates)) {
|
||||||
|
$updates["modified_"] = $now;
|
||||||
|
}
|
||||||
|
$values = cl::merge($values, $updates);
|
||||||
|
$row = cl::merge($row, $this->serialize($channel, $updates));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($insert === null) {
|
if ($insert === null) {
|
||||||
# aucune modification
|
# aucune modification
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -255,20 +270,24 @@ EOT;
|
||||||
/**
|
/**
|
||||||
* charger une valeur dans le canal
|
* charger une valeur dans le canal
|
||||||
*
|
*
|
||||||
* Si $func!==null, après avoir calculé les valeurs des clés supplémentaires
|
* Après avoir calculé les valeurs des clés supplémentaires
|
||||||
* avec {@link CapacitorChannel::getItemValues()}, la fonction est appelée
|
* avec {@link CapacitorChannel::getItemValues()}, l'une des deux fonctions
|
||||||
* avec la signature de {@link CapacitorChannel::onCreate()} ou
|
* {@link CapacitorChannel::onCreate()} ou {@link CapacitorChannel::onUpdate()}
|
||||||
* {@link CapacitorChannel::onUpdate()} en fonction du type d'opération:
|
* est appelée en fonction du type d'opération: création ou mise à jour
|
||||||
* création ou mise à jour
|
|
||||||
*
|
*
|
||||||
* Si la fonction retourne un tableau, il est utilisé pour modifier les valeurs
|
* Ensuite, si $func !== null, la fonction est appelée avec la signature de
|
||||||
* insérées/mises à jour
|
* {@link CapacitorChannel::onCreate()} ou {@link CapacitorChannel::onUpdate()}
|
||||||
|
* en fonction du type d'opération: création ou mise à jour
|
||||||
|
*
|
||||||
|
* Dans les deux cas, si la fonction retourne un tableau, il est utilisé pour
|
||||||
|
* modifier les valeurs insérées/mises à jour. De plus, $values obtient la
|
||||||
|
* valeur finale des données insérées/mises à jour
|
||||||
*
|
*
|
||||||
* @return int 1 si l'objet a été chargé ou mis à jour, 0 s'il existait
|
* @return int 1 si l'objet a été chargé ou mis à jour, 0 s'il existait
|
||||||
* déjà à l'identique dans le canal
|
* déjà à l'identique dans le canal
|
||||||
*/
|
*/
|
||||||
function charge(?string $channel, $item, $func=null, ?array $args=null): int {
|
function charge(?string $channel, $item, $func=null, ?array $args=null, ?array &$values=null): int {
|
||||||
return $this->_charge($this->getChannel($channel), $item, $func, $args);
|
return $this->_charge($this->getChannel($channel), $item, $func, $args, $values);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _discharge(CapacitorChannel $channel, bool $reset=true): iterable {
|
function _discharge(CapacitorChannel $channel, bool $reset=true): iterable {
|
||||||
|
|
Loading…
Reference in New Issue