V1.17.18 Modifications consignes correction bugs

This commit is contained in:
2026-09-08 15:28:26 +00:00
parent 9d537a9b36
commit 67614908c3
7 changed files with 249 additions and 57 deletions
+32 -2
View File
@@ -106,6 +106,23 @@
* d'un code postal déduit par l'IA) verrait la valeur D'AVANT cet appel IA,
* puisque les Tests s'exécutent avant l'étape 3 — aucune consigne actuelle
* n'est dans ce cas.
*
* Test à un champ avec accès base (8 septembre 2026) : première consigne de
* cette nature (unicité du mail/portable, voir consigne_mail_unique() et
* consigne_portable_unique() dans consignes_fonctions.php). Le contrat de
* base d'un Test à un champ reste (string $valeur): bool (voir en-tête de
* consignes_fonctions.php), mais le moteur appelle désormais TOUJOURS ces
* fonctions avec deux arguments supplémentaires, $pdo et $idExclusion — sans
* effet sur les fonctions existantes qui ne déclarent qu'un seul paramètre
* (PHP ignore silencieusement les arguments en trop), et exploitable par une
* nouvelle fonction qui déclare ces deux paramètres en plus. $idExclusion est
* l'identifiant (ex. CNT_Incr) de la fiche en cours de modification — null en
* Création (rien à exclure), ou en Modification si l'appelant ne le fournit
* pas — pour qu'une consigne d'unicité ne se bloque jamais elle-même en
* retrouvant la propre valeur déjà enregistrée de la fiche qu'on modifie.
* Fourni par l'appelant (voir $idExclusion du paramètre d'appliquerConsignes()
* ci-dessous) : ce fichier n'a connaissance d'aucun identifiant métier propre
* à un contexte précis, volontairement générique.
*/
/**
@@ -280,12 +297,21 @@ function executerTraitements(array $consignesTraitement, array &$data, array &$j
* l'appelant (ex. un toast par message),
* indépendamment de $journalisations qui
* couvre l'historique, pas l'écran.
* @param int|null $idExclusion Identifiant de la fiche en cours de
* modification (ex. CNT_Incr), à exclure
* d'une éventuelle vérification
* d'unicité — null en Création, ou si
* aucune consigne du contexte n'en a
* besoin (8 septembre 2026, voir
* commentaire d'en-tête). Simplement
* retransmis tel quel aux fonctions de
* Test à un champ qui le demandent.
* @return string|null Message d'erreur du premier test en
* échec (déjà le texte à renvoyer tel
* quel au front-end), ou null si tout est
* passé.
*/
function appliquerConsignes(PDO $pdo, string $contexte, string $portee, array &$data, ?string &$agentEchec = null, ?array &$journalisations = null, ?array &$avertissements = null): ?string
function appliquerConsignes(PDO $pdo, string $contexte, string $portee, array &$data, ?string &$agentEchec = null, ?array &$journalisations = null, ?array &$avertissements = null, ?int $idExclusion = null): ?string
{
// Type nullable en entrée (comme $agentEchec ci-dessus) : un appelant qui
// passe une variable non initialisée par référence la fait exister à
@@ -317,7 +343,11 @@ function appliquerConsignes(PDO $pdo, string $contexte, string $portee, array &$
$champs = array_map('trim', explode(',', $c['CNS_Champ']));
if (count($champs) === 1) {
$valeur = (string)($data[$champs[0]] ?? '');
$ok = call_user_func($c['FON_NomPHP'], $valeur);
// $pdo et $idExclusion toujours passés (voir commentaire
// d'en-tête, 8 septembre 2026) : sans effet pour une fonction qui
// ne déclare que (string $valeur), exploités par une fonction qui
// a besoin d'interroger la base (ex. unicité mail/portable).
$ok = call_user_func($c['FON_NomPHP'], $valeur, $pdo, $idExclusion);
} else {
$valeurs = [];
foreach ($champs as $champ) {