modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-06-19 11:32:30 +04:00
parent 976e3674b4
commit 55501af6ff
2 changed files with 21 additions and 2 deletions

View File

@ -165,6 +165,9 @@ class CapacitorChannel {
* Cette méthode est utilisée par {@link Capacitor::charge()}. Si la clé
* primaire est incluse (il s'agit généralement de "id_"), la ligne
* correspondate est mise à jour si elle existe.
*
* Retourner la clé primaire par cette méthode est l'unique moyen de
* déclencher une mise à jour plutôt qu'une nouvelle création.
*/
function getItemValues($item): ?array {
return null;
@ -247,6 +250,11 @@ class CapacitorChannel {
*
* Si $item est modifié dans cette méthode, il est possible de le retourner
* avec la clé "item" pour mettre à jour la ligne correspondante.
*
* la création ou la mise à jour est uniquement décidée en fonction des
* valeurs calculées par {@link self::getItemValues()}. Bien que cette méthode
* peut techniquement retourner de nouvelles valeurs pour la clé primaire, ça
* risque de créer des doublons
*/
function onCreate($item, array $rowValues, ?array $alwaysNull): ?array {
return null;

View File

@ -194,16 +194,26 @@ EOT;
* modifier les valeurs insérées/mises à jour. De plus, $values obtient la
* valeur finale des données insérées/mises à jour
*
* Si $args est renseigné, il est ajouté aux arguments utilisés pour appeler
* les méthodes {@link CapacitorChannel::getItemValues()},
* {@link CapacitorChannel::onCreate()} et/ou
* {@link CapacitorChannel::onUpdate()}
*
* @return int 1 si l'objet a été chargé ou mis à jour, 0 s'il existait
* déjà à l'identique dans le canal
*/
function _charge(CapacitorChannel $channel, $item, $func, ?array $args, ?array &$values=null): int {
$this->_create($channel);
$tableName = $channel->getTableName();
$now = date("Y-m-d H:i:s");
$initFunc = [$channel, "getItemValues"];
$initArgs = $args;
func::ensure_func($initFunc, null, $initArgs);
$itemValues = func::call($initFunc, $item, ...$initArgs);
$row = cl::merge(
$channel->getSum("item", $item),
$this->serialize($channel, $channel->getItemValues($item)));
$this->serialize($channel, $itemValues));
$prow = null;
$rowIds = $this->getRowIds($channel, $row, $primaryKeys);
if ($rowIds !== null) {
@ -215,6 +225,7 @@ EOT;
]);
}
$now = date("Y-m-d H:i:s");
$insert = null;
if ($prow === null) {
# création