mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
V1.19.21 Réflexions stratégiques et gestion de la personnalité des collaborateurs
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
/**
|
||||
* ASPIC — collaborateurs_identite.php
|
||||
*
|
||||
* Endpoint interne (10 septembre 2026, réflexions stratégiques section 20 —
|
||||
* "collaborateurs", identité propre à chacun) — PAS un endpoint destiné aux
|
||||
* futurs utilisateurs, sur le même principe que dictees_test.php/
|
||||
* contact_ia_test.html : un outil de mise au point réservé à Jean-Marc.
|
||||
*
|
||||
* Lit/écrit une nouvelle colonne AGN_Identite (texte libre : parcours de vie,
|
||||
* expérience professionnelle, traits de caractère) sur ASP_Agents — même
|
||||
* principe qu'AGN_Variantes/AGN_Photo, colonne éditée à la main par Jean-Marc
|
||||
* en base avant tout premier essai :
|
||||
*
|
||||
* ALTER TABLE ASP_Agents
|
||||
* ADD COLUMN AGN_Identite TEXT NULL DEFAULT NULL AFTER AGN_Couleur;
|
||||
*
|
||||
* Colonne élargie de TEXT à MEDIUMTEXT le 10 septembre 2026 (soir), à la
|
||||
* demande de Jean-Marc — ce texte est voué à s'enrichir avec l'usage réel de
|
||||
* l'application (missions, réunions, compétences acquises...) plutôt qu'à
|
||||
* rester une biographie figée écrite une fois, donc les 65 535 octets d'un
|
||||
* TEXT auraient fini par devenir un plafond réel :
|
||||
*
|
||||
* ALTER TABLE ASP_Agents
|
||||
* MODIFY COLUMN AGN_Identite MEDIUMTEXT NULL DEFAULT NULL;
|
||||
*
|
||||
* (voir aussi TEXTE_IDENTITE_MAX_OCTETS dans ecran_fond.html, qui reflète
|
||||
* cette même limite côté indicateur de saisie.)
|
||||
*
|
||||
* Volontairement séparé d'agents.php : celui-ci reste l'endpoint de lecture
|
||||
* publique consommé par ecran_fond.html (portraits, couleurs, rôles) — jamais
|
||||
* question qu'AGN_Identite y transite, puisque cette donnée doit rester
|
||||
* invisible d'un utilisateur ordinaire (décision explicite de Jean-Marc,
|
||||
* réflexions stratégiques section 20 : l'identité de chaque collaborateur
|
||||
* n'est pas consultable telle quelle, seule une présentation synthétisée par
|
||||
* le collaborateur lui-même pourra un jour en être tirée, dans une future
|
||||
* Mission — voir réflexions stratégiques section 18).
|
||||
*
|
||||
* Accès : simple session ouverte, même principe que tous les autres endpoints
|
||||
* du projet (contacts.php, todolist.php...) — PAS de vérification renforcée
|
||||
* par USR_Code précis. Décision explicite de Jean-Marc (10 septembre 2026,
|
||||
* revenant sur le premier réglage plus strict envisagé) : il reste seul
|
||||
* utilisateur réel de l'application pour encore plusieurs mois, inutile de
|
||||
* s'imposer une friction (retrouver puis coder en dur son propre USR_Code)
|
||||
* pour un risque nul dans l'immédiat. Cette page reste malgré tout un outil
|
||||
* interne, jamais lié depuis la navigation normale de l'application — rien
|
||||
* n'affiche AGN_Identite ailleurs (voir plus haut).
|
||||
* ⚠️ À REVOIR le jour où un second utilisateur réel (collaborateur humain,
|
||||
* client bêta) aura un compte MIRADOR sur la même base : remettre une
|
||||
* vérification par rôle (ex. nouvelle colonne USR_Administrateur, encore
|
||||
* inexistante à ce jour) avant d'ouvrir l'accès à qui que ce soit d'autre que
|
||||
* Jean-Marc.
|
||||
*/
|
||||
|
||||
session_start();
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
require __DIR__ . '/db.php';
|
||||
|
||||
if (empty($_SESSION['USR_Code'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['error' => 'Non identifié — veuillez vous connecter.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$pdo = getDbConnection();
|
||||
} catch (PDOException $e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Connexion base de données impossible']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
if ($method === 'GET') {
|
||||
try {
|
||||
$stmt = $pdo->query(
|
||||
'SELECT AGN_Incr, AGN_Prenom, AGN_Fonction, AGN_Photo, AGN_Couleur, AGN_Identite
|
||||
FROM ASP_Agents ORDER BY AGN_OrdreAffichage ASC'
|
||||
);
|
||||
echo json_encode(['collaborateurs' => $stmt->fetchAll()]);
|
||||
} catch (PDOException $e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Erreur base de données : ' . $e->getMessage()]);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($method === 'PUT') {
|
||||
$data = json_decode(file_get_contents('php://input'), true) ?? [];
|
||||
$incr = (int) ($data['AGN_Incr'] ?? 0);
|
||||
// Champ volontairement libre, sans limite de longueur imposée ici
|
||||
// (MEDIUMTEXT côté base, voir en-tête) : une identité bien écrite peut
|
||||
// dépasser largement la taille d'un champ de fiche habituel (Nom,
|
||||
// Ville...) de ce projet, et grandira encore avec l'usage réel de
|
||||
// l'application — le seul garde-fou vit côté front-end (voir
|
||||
// TEXTE_IDENTITE_MAX_OCTETS/compteur-identite dans ecran_fond.html).
|
||||
$identite = trim((string) ($data['AGN_Identite'] ?? ''));
|
||||
|
||||
if ($incr <= 0) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'AGN_Incr manquant ou invalide']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
// Existence vérifiée par un SELECT séparé plutôt que sur rowCount() de
|
||||
// l'UPDATE (même précaution que contacts.php, section PUT — un texte
|
||||
// identique au texte déjà enregistré donnerait rowCount() = 0 alors
|
||||
// que le collaborateur existe bien).
|
||||
$verif = $pdo->prepare('SELECT AGN_Incr FROM ASP_Agents WHERE AGN_Incr = ?');
|
||||
$verif->execute([$incr]);
|
||||
if (!$verif->fetch()) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Collaborateur introuvable']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $pdo->prepare('UPDATE ASP_Agents SET AGN_Identite = ? WHERE AGN_Incr = ?');
|
||||
$stmt->execute([$identite !== '' ? $identite : null, $incr]);
|
||||
echo json_encode(['success' => true]);
|
||||
} catch (PDOException $e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Erreur base de données : ' . $e->getMessage()]);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
http_response_code(405);
|
||||
echo json_encode(['error' => 'Méthode non autorisée']);
|
||||
Reference in New Issue
Block a user