mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 17:17:08 +00:00
V1.15.17 Evolutions des consignes
This commit is contained in:
+73
-6
@@ -69,6 +69,23 @@
|
||||
* pas de distinction Saisie/Validation (tout s'applique à l'enregistrement),
|
||||
* pas de vérification en temps réel côté écran pour l'instant — décision de
|
||||
* Jean-Marc du 6 septembre 2026, priorité à la robustesse.
|
||||
*
|
||||
* Journalisation des Traitements IA dans ASP_Realisations (7 septembre 2026,
|
||||
* soir) : appliquerConsignes() peut remonter, via son paramètre par référence
|
||||
* $journalisationsIA, une ou plusieurs entrées à journaliser (ex. code postal
|
||||
* déduit par l'IA depuis la ville — voir consigne_completer_code_postal()).
|
||||
* Écrites ICI, directement en base, plutôt que laissées au front-end comme
|
||||
* CNT_CRE/CNT_MAJ (voir liste_contacts.html, validerFormulaireContact()) :
|
||||
* REA_CodeUser/REA_NomAffiche reçoivent alors le nom d'agent IA (ex. "Matilda"
|
||||
* — voir ASP_Agents.AGN_Prenom, et CNS_Agent sur la consigne qui a déclenché le
|
||||
* Traitement), pas
|
||||
* l'utilisateur humain de la session — hors de portée de realisations.php,
|
||||
* qui impose volontairement $_SESSION['USR_Code'] (correctif de sécurité du
|
||||
* 24 août 2026, voir ce fichier) et ne doit surtout pas rouvrir la
|
||||
* possibilité qu'un client falsifie REA_CodeUser. Best-effort (try/catch
|
||||
* séparé) : un souci de journalisation ne doit jamais faire échouer
|
||||
* l'enregistrement du contact lui-même, même principe que la journalisation
|
||||
* CNT_CRE/CNT_MAJ côté front.
|
||||
*/
|
||||
|
||||
session_start();
|
||||
@@ -122,6 +139,43 @@ function construireMotifLike(string $valeur): array
|
||||
return [$motif, '\\'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Journalise dans ASP_Realisations les Traitements IA remontés par
|
||||
* appliquerConsignes() (voir moteur_consignes.php et le commentaire d'en-tête
|
||||
* de ce fichier) — ex. code postal déduit de la ville. Best-effort : une
|
||||
* exception ici est avalée (juste consignée au log serveur), jamais renvoyée
|
||||
* au client — un souci de journalisation ne doit pas laisser croire que
|
||||
* l'enregistrement du contact a échoué alors qu'il a réussi.
|
||||
*/
|
||||
function journaliserRealisationsIA(PDO $pdo, int $idContact, array $journalisationsIA): void
|
||||
{
|
||||
if (!$journalisationsIA) return;
|
||||
try {
|
||||
// REA_CodeUser ET REA_NomAffiche reçoivent la même valeur pour un
|
||||
// agent IA (7 septembre 2026, nuit — "le prénom de l'agent en dur",
|
||||
// Jean-Marc) : contrairement à un utilisateur humain, un agent n'a
|
||||
// pas de code technique court séparé de son nom affiché — la valeur
|
||||
// vient déjà en clair de CNS_Agent (voir moteur_consignes.php),
|
||||
// aucune recherche supplémentaire à faire ici.
|
||||
$stmt = $pdo->prepare(
|
||||
'INSERT INTO ASP_Realisations (REA_IncrContact, REA_CodeUser, REA_NomAffiche, REA_Date, REA_Action, REA_Comment)
|
||||
VALUES (?, ?, ?, NOW(), ?, ?)'
|
||||
);
|
||||
foreach ($journalisationsIA as $j) {
|
||||
$nomAgent = (string)($j['agent'] ?? 'IA');
|
||||
$stmt->execute([
|
||||
$idContact,
|
||||
$nomAgent,
|
||||
$nomAgent,
|
||||
(string)($j['action'] ?? 'IA'),
|
||||
(string)($j['commentaire'] ?? ''),
|
||||
]);
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
error_log('ASPIC contacts: échec journalisation ASP_Realisations (Traitement IA) : ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
switch ($method) {
|
||||
case 'GET':
|
||||
@@ -199,10 +253,14 @@ try {
|
||||
case 'POST':
|
||||
$data = json_decode(file_get_contents('php://input'), true) ?? [];
|
||||
|
||||
$erreurConsigne = appliquerConsignes($pdo, 'Contacts', 'Création', $data);
|
||||
$erreurConsigne = appliquerConsignes($pdo, 'Contacts', 'Création', $data, $agentConsigne, $journalisationsIA, $avertissementsIA);
|
||||
if ($erreurConsigne !== null) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => $erreurConsigne]);
|
||||
// 'agent' (CNS_Agent, 7 septembre 2026) : vaut JSON null si la
|
||||
// consigne en échec n'en a pas — sans effet côté front, où
|
||||
// afficherToast n'affiche la ligne agent que si la valeur est
|
||||
// présente et non vide.
|
||||
echo json_encode(['error' => $erreurConsigne, 'agent' => $agentConsigne]);
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -245,7 +303,14 @@ try {
|
||||
$stmtCode = $pdo->prepare('UPDATE ASP_Contacts SET CNT_Code = ? WHERE CNT_Incr = ?');
|
||||
$stmtCode->execute([$code, $nouvelIncr]);
|
||||
|
||||
echo json_encode(['id' => $nouvelIncr, 'code' => $code]);
|
||||
journaliserRealisationsIA($pdo, $nouvelIncr, $journalisationsIA);
|
||||
|
||||
// 'avertissements' (7 septembre 2026, nuit) : messages à afficher
|
||||
// immédiatement à l'écran, voir moteur_consignes.php ("_avertissement")
|
||||
// — distinct de la journalisation ci-dessus, qui va dans
|
||||
// l'historique mais ne s'affiche pas tout de suite. Tableau vide
|
||||
// la plupart du temps, le front-end n'affiche alors rien.
|
||||
echo json_encode(['id' => $nouvelIncr, 'code' => $code, 'avertissements' => $avertissementsIA]);
|
||||
break;
|
||||
|
||||
case 'PUT':
|
||||
@@ -256,10 +321,10 @@ try {
|
||||
}
|
||||
$data = json_decode(file_get_contents('php://input'), true) ?? [];
|
||||
|
||||
$erreurConsigne = appliquerConsignes($pdo, 'Contacts', 'Modification', $data);
|
||||
$erreurConsigne = appliquerConsignes($pdo, 'Contacts', 'Modification', $data, $agentConsigne, $journalisationsIA, $avertissementsIA);
|
||||
if ($erreurConsigne !== null) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => $erreurConsigne]);
|
||||
echo json_encode(['error' => $erreurConsigne, 'agent' => $agentConsigne]);
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -295,7 +360,9 @@ try {
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute($params);
|
||||
|
||||
echo json_encode(['success' => true]);
|
||||
journaliserRealisationsIA($pdo, (int)$_GET['id'], $journalisationsIA);
|
||||
|
||||
echo json_encode(['success' => true, 'avertissements' => $avertissementsIA]);
|
||||
break;
|
||||
|
||||
case 'DELETE':
|
||||
|
||||
Reference in New Issue
Block a user