Files
ASPIC/consignes_apercu.php
T

91 lines
3.6 KiB
PHP

<?php
/**
* ASPIC — consignes_apercu.php (7 septembre 2026, soir)
*
* Endpoint dédié au badge IA générique (maquette fournie par Jean-Marc, voir
* journal) : répond très vite, SANS jamais appeler le moindre service
* externe, à la question « si j'enregistrais ces valeurs maintenant, au
* moins une consigne de Traitement IA se déclencherait-elle ? ».
*
* Existe pour une seule raison : ne JAMAIS deviner ni recopier en dur, côté
* écran, la condition qui déclenche une consigne IA (voir les échanges du
* 7 septembre 2026 dans le journal — Jean-Marc a refusé un premier essai qui
* testait `ville renseignée et CP vide` directement en JavaScript). La seule
* condition qui compte est celle écrite dans le jumeau
* "<fonction>_seraitDeclenchee" de la fonction elle-même (voir en-tête de
* consignes_fonctions.php) ; cet endpoint se contente d'interroger
* auMoinsUneConsigneIaSeraitDeclenchee() (moteur_consignes.php), qui parcourt
* les consignes actives et appelle ces jumeaux — rien d'autre.
*
* Le front-end (liste_contacts.html, validerFormulaireContact()) appelle cet
* endpoint AVANT l'enregistrement réel (POST/PUT vers contacts.php), pour
* savoir s'il doit afficher le badge IA pendant l'attente de la réponse.
* Un enregistrement qui ne déclenche aucune IA reste donc instantané à
* l'écran, sans badge — exigence explicite de Jean-Marc ("hors de question
* d'afficher systématiquement le badge IA, alors qu'il n'y est pas fait
* appel").
*
* Entrée JSON : { "contexte": "Contacts", "portee": "Création"|"Modification",
* "donnees": { ...valeurs actuelles du formulaire... } }
* Sortie JSON : { "declenche": true|false }
*
* Accès réservé aux utilisateurs identifiés, même principe que contacts.php.
* Toujours POST (l'objet "donnees" peut contenir des champs qui n'ont pas
* leur place dans une query string). Ne touche jamais à $_SESSION au-delà de
* la vérification d'identification, et n'écrit jamais en base.
*/
session_start();
header('Content-Type: application/json; charset=utf-8');
require __DIR__ . '/db.php';
require __DIR__ . '/consignes_fonctions.php';
require __DIR__ . '/moteur_consignes.php';
// Accès réservé aux utilisateurs identifiés (session ouverte par aspic.php).
if (empty($_SESSION['USR_Code'])) {
http_response_code(401);
echo json_encode(['error' => 'Non identifié — veuillez vous connecter.']);
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => 'Méthode non autorisée']);
exit;
}
$corps = json_decode(file_get_contents('php://input'), true);
if (!is_array($corps)) {
$corps = [];
}
$contexte = trim((string)($corps['contexte'] ?? ''));
$portee = trim((string)($corps['portee'] ?? ''));
$donnees = is_array($corps['donnees'] ?? null) ? $corps['donnees'] : [];
if ($contexte === '' || $portee === '') {
http_response_code(400);
echo json_encode(['error' => 'Paramètres "contexte" et "portee" obligatoires']);
exit;
}
try {
$pdo = getDbConnection();
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Connexion base de données impossible']);
exit;
}
try {
$declenche = auMoinsUneConsigneIaSeraitDeclenchee($pdo, $contexte, $portee, $donnees);
} catch (Throwable $e) {
// Repli prudent : en cas de souci imprévu, on répond "pas de badge" plutôt
// que de faire échouer l'écran pour un simple indicateur visuel — même
// philosophie de robustesse que les fonctions IA elles-mêmes (voir
// consignes_fonctions.php).
$declenche = false;
}
echo json_encode(['declenche' => $declenche]);