modifs.mineures sans commentaires
This commit is contained in:
parent
9b134ae7c6
commit
a70bccbeb8
|
@ -37,7 +37,7 @@ class Capacitor {
|
||||||
return $this->storage->_get($this->channel, $filter);
|
return $this->storage->_get($this->channel, $filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
function each($filter, callable $func, ?array $args=null): void {
|
function each($filter, ?callable $func=null, ?array $args=null): void {
|
||||||
$this->storage->_each($this->channel, $filter, $func, $args);
|
$this->storage->_each($this->channel, $filter, $func, $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,4 +59,39 @@ class CapacitorChannel {
|
||||||
function getKeyValues($item): ?array {
|
function getKeyValues($item): ?array {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* méthode appelée lors du chargement d'un élément avec
|
||||||
|
* {@link Capacitor::charge()}
|
||||||
|
*
|
||||||
|
* @param mixed $item l'élément à charger
|
||||||
|
* @param array $values les valeurs calculées par {@link getKeyValues()}
|
||||||
|
* @param ?array $row la ligne à mettre à jour. vaut null s'il faut insérer
|
||||||
|
* une nouvelle ligne
|
||||||
|
* @return ?array le cas échéant, un tableau non null à marger dans $values et
|
||||||
|
* utiliser pour provisionner la ligne nouvelle créée, ou mettre à jour la
|
||||||
|
* ligne existante
|
||||||
|
*
|
||||||
|
* Si $item est modifié dans cette méthode, il est possible de le retourner
|
||||||
|
* avec la clé "_item" pour mettre à jour la ligne correspondante
|
||||||
|
*/
|
||||||
|
function onCharge($item, array $values, ?array $row): ?array {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* méthode appelée lors du parcours des éléments avec
|
||||||
|
* {@link Capacitor::each()}
|
||||||
|
*
|
||||||
|
* @param mixed $item l'élément courant
|
||||||
|
* @param ?array $row la ligne à mettre à jour
|
||||||
|
* @return ?array le cas échéant, un tableau non null utilisé pour mettre à
|
||||||
|
* jour la ligne courante
|
||||||
|
*
|
||||||
|
* Si $item est modifié dans cette méthode, il est possible de le retourner
|
||||||
|
* avec la clé "_item" pour mettre à jour la ligne correspondante
|
||||||
|
*/
|
||||||
|
function onEach($item, array $row): ?array {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ abstract class CapacitorStorage {
|
||||||
*
|
*
|
||||||
* Si $func!==null, après avoir calculé les valeurs des clés supplémentaires
|
* Si $func!==null, après avoir calculé les valeurs des clés supplémentaires
|
||||||
* avec {@link CapacitorChannel::getKeyValues()}, la fonction est appelée avec
|
* avec {@link CapacitorChannel::getKeyValues()}, la fonction est appelée avec
|
||||||
* les arguments ($item, $keyValues, $row, ...$args)
|
* la signature ($item, $keyValues, $row, ...$args)
|
||||||
* Si la fonction retourne un tableau, il est utilisé pour modifié les valeurs
|
* Si la fonction retourne un tableau, il est utilisé pour modifier les valeurs
|
||||||
* insérées/mises à jour
|
* insérées/mises à jour
|
||||||
*
|
*
|
||||||
* @return true si l'objet a été chargé ou mis à jour, false s'il existait
|
* @return true si l'objet a été chargé ou mis à jour, false s'il existait
|
||||||
|
@ -58,17 +58,17 @@ abstract class CapacitorStorage {
|
||||||
return $this->_get($this->getChannel($channel), $filter);
|
return $this->_get($this->getChannel($channel), $filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract function _each(CapacitorChannel $channel, $filter, callable $func, ?array $args): void;
|
abstract function _each(CapacitorChannel $channel, $filter, ?callable $func, ?array $args): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* appeler une fonction pour chaque élément du canal spécifié.
|
* appeler une fonction pour chaque élément du canal spécifié.
|
||||||
*
|
*
|
||||||
* $filter permet de filtrer parmi les élements chargés
|
* $filter permet de filtrer parmi les élements chargés
|
||||||
*
|
*
|
||||||
* si $func retourne un tableau, il est utilisé pour mettre à jour
|
* $func est appelé avec la signature ($item, $row, ...$args). si la fonction
|
||||||
* l'enregistrement.
|
* retourne un tableau, il est utilisé pour mettre à jour la ligne
|
||||||
*/
|
*/
|
||||||
function each(?string $channel, $filter, callable $func, ?array $args=null): void {
|
function each(?string $channel, $filter, ?callable $func=null, ?array $args=null): void {
|
||||||
$this->_each($this->getChannel($channel), $filter, $func, $args);
|
$this->_each($this->getChannel($channel), $filter, $func, $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,10 +110,11 @@ class SqliteCapacitor extends CapacitorStorage {
|
||||||
]);
|
]);
|
||||||
$insert = false;
|
$insert = false;
|
||||||
}
|
}
|
||||||
if ($func !== null) {
|
|
||||||
$context = func::_prepare($func);
|
if ($func === null) $func = [$channel, "onCharge"];
|
||||||
|
$onCharge = func::_prepare($func);
|
||||||
$args ??= [];
|
$args ??= [];
|
||||||
$updates = func::_call($context, [$item, $values, $row, ...$args]);
|
$updates = func::_call($onCharge, [$item, $values, $row, ...$args]);
|
||||||
if (is_array($updates)) {
|
if (is_array($updates)) {
|
||||||
if (array_key_exists("_item", $updates)) {
|
if (array_key_exists("_item", $updates)) {
|
||||||
$_item = serialize($updates["_item"]);
|
$_item = serialize($updates["_item"]);
|
||||||
|
@ -125,7 +126,7 @@ class SqliteCapacitor extends CapacitorStorage {
|
||||||
}
|
}
|
||||||
$values = cl::merge($values, $updates);
|
$values = cl::merge($values, $updates);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ($insert === null) {
|
if ($insert === null) {
|
||||||
# aucune modification
|
# aucune modification
|
||||||
return false;
|
return false;
|
||||||
|
@ -173,9 +174,10 @@ class SqliteCapacitor extends CapacitorStorage {
|
||||||
else return unserialize($row["_item"]);
|
else return unserialize($row["_item"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _each(CapacitorChannel $channel, $filter, callable $func, ?array $args): void {
|
function _each(CapacitorChannel $channel, $filter, ?callable $func, ?array $args): void {
|
||||||
|
if ($func === null) $func = [$channel, "onEach"];
|
||||||
|
$onEach = func::_prepare($func);
|
||||||
if ($filter !== null && !is_array($filter)) $filter = ["_id" => $filter];
|
if ($filter !== null && !is_array($filter)) $filter = ["_id" => $filter];
|
||||||
$context = func::_prepare($func);
|
|
||||||
$sqlite = $this->sqlite;
|
$sqlite = $this->sqlite;
|
||||||
$tableName = $channel->getTableName();
|
$tableName = $channel->getTableName();
|
||||||
$commited = false;
|
$commited = false;
|
||||||
|
@ -189,7 +191,7 @@ class SqliteCapacitor extends CapacitorStorage {
|
||||||
$args ??= [];
|
$args ??= [];
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$item = unserialize($row['_item']);
|
$item = unserialize($row['_item']);
|
||||||
$updates = func::_call($context, [$item, $row, ...$args]);
|
$updates = func::_call($onEach, [$item, $row, ...$args]);
|
||||||
if (is_array($updates)) {
|
if (is_array($updates)) {
|
||||||
if (array_key_exists("_item", $updates)) {
|
if (array_key_exists("_item", $updates)) {
|
||||||
$updates["_item"] = serialize($updates["_item"]);
|
$updates["_item"] = serialize($updates["_item"]);
|
||||||
|
|
Loading…
Reference in New Issue