V1.15.17 Evolutions des consignes

This commit is contained in:
2026-09-08 01:29:41 +00:00
parent d287607e45
commit 0f7437fa77
18 changed files with 1361 additions and 121 deletions
+36 -8
View File
@@ -20,6 +20,27 @@
* `aspic.php`) — le champ REA_CodeUser du corps de la requête POST n'est
* plus utilisé et ne peut plus être falsifié par le client. Le "JMP" en dur
* précédent a été supprimé (n'avait de sens que faute de session).
*
* REA_NomAffiche (7 septembre 2026, nuit) : Jean-Marc voulait voir "Jean-Marc"
* plutôt que "JMP" dans l'historique d'un contact. Deux idées écartées en
* cours de route : renommer USR_Code lui-même (trop structurant, utilisé
* partout — session, REA_CodeUser, OPE_CodeUser...), et une jointure
* ASP_Users refaite à chaque affichage (Jean-Marc : "comment vas-tu faire
* pour les agents qui sont dans une autre base ?" — une jointure suppose que
* tout vit dans la même base, hypothèse fragile). Solution retenue, dans les
* mots de Jean-Marc : "si on stocke le prénom de l'utilisateur d'un côté et
* le prénom de l'agent en dur on est cool" — un INSTANTANÉ pris UNE SEULE
* FOIS à la création de la réalisation, jamais recalculé :
* - Utilisateur humain : REA_NomAffiche = $_SESSION['USR_Prenom'], lui-même
* posé une seule fois à la connexion (voir aspic.php) — aucune requête
* supplémentaire ici, juste une lecture de session.
* - Agent IA : REA_NomAffiche = le nom déjà en clair (CNS_Agent, voir
* moteur_consignes.php et journaliserRealisationsIA() dans contacts.php) —
* "en dur", aucune recherche à faire, la valeur existe déjà.
* Nullable : une ligne plus ancienne, créée avant l'ajout de cette colonne,
* n'en a pas — le front-end retombe alors sur REA_CodeUser tel quel (voir
* liste_contacts.html, même principe que ACT_Libelle/REA_Action juste à
* côté).
*/
session_start();
@@ -50,9 +71,12 @@ try {
echo json_encode(['error' => 'id (REA_IncrContact) manquant']);
exit;
}
// REA_NomAffiche lu directement (voir commentaire d'en-tête) :
// aucune jointure nécessaire, la colonne porte déjà la bonne
// valeur depuis la création de la réalisation.
$stmt = $pdo->prepare(
'SELECT r.REA_Incr, r.REA_Date, r.REA_CodeUser, r.REA_Action, r.REA_Comment,
a.ACT_Libelle
'SELECT r.REA_Incr, r.REA_Date, r.REA_CodeUser, r.REA_NomAffiche,
r.REA_Action, r.REA_Comment, a.ACT_Libelle
FROM ASP_Realisations r
LEFT JOIN ASP_Actions a ON a.ACT_Code = r.REA_Action
WHERE r.REA_IncrContact = ?
@@ -72,17 +96,21 @@ try {
exit;
}
// REA_CodeUser vient de la session (voir en-tête de ce fichier),
// plus du corps de la requête : impossible pour le client de se
// faire passer pour un autre utilisateur.
// REA_CodeUser ET REA_NomAffiche viennent tous les deux de la
// session (voir en-tête de ce fichier) — jamais du corps de la
// requête, impossible pour le client de se faire passer pour un
// autre utilisateur. REA_NomAffiche = USR_Prenom posé une seule
// fois à la connexion (aspic.php) : aucune requête supplémentaire
// ici.
$codeUser = $_SESSION['USR_Code'];
$nomAffiche = $_SESSION['USR_Prenom'] ?? null;
$commentaire = $data['REA_Comment'] ?? '';
$stmt = $pdo->prepare(
'INSERT INTO ASP_Realisations (REA_IncrContact, REA_CodeUser, REA_Date, REA_Action, REA_Comment)
VALUES (?, ?, NOW(), ?, ?)'
'INSERT INTO ASP_Realisations (REA_IncrContact, REA_CodeUser, REA_NomAffiche, REA_Date, REA_Action, REA_Comment)
VALUES (?, ?, ?, NOW(), ?, ?)'
);
$stmt->execute([$idContact, $codeUser, $action, $commentaire]);
$stmt->execute([$idContact, $codeUser, $nomAffiche, $action, $commentaire]);
echo json_encode(['id' => (int)$pdo->lastInsertId()]);
break;