mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
V1.22.23 Passage à Claude Code et création du BackOffice
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* ASPIC — competences.php
|
||||
*
|
||||
* Endpoint du BackOffice (11 septembre 2026, chantier Compétences/Missions)
|
||||
* — catalogue des compétences (`ASP_Competences`), curaté par Jean-Marc, même
|
||||
* principe que le catalogue de consignes (voir moteur_consignes.php) : c'est
|
||||
* `mission_agent.php` (le code), pas ce catalogue, qui définit ce qu'une
|
||||
* compétence fait réellement — ce catalogue ne porte que le libellé et la
|
||||
* description affichés, jamais une définition d'outil exécutable.
|
||||
*
|
||||
* GET : liste toutes les compétences.
|
||||
* POST { "CMP_Code": "...", "CMP_Libelle": "...", "CMP_Description": "..." }
|
||||
* Crée une nouvelle entrée de catalogue. Ne câble aucun outil réel — voir
|
||||
* remarque d'en-tête : ça reste à faire à la main dans mission_agent.php
|
||||
* le jour où cette compétence doit produire un effet réel.
|
||||
*/
|
||||
|
||||
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') {
|
||||
$competences = $pdo->query('SELECT CMP_Code, CMP_Libelle, CMP_Description, CMP_DateCreation FROM ASP_Competences ORDER BY CMP_Libelle')->fetchAll();
|
||||
echo json_encode(['competences' => $competences]);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($method === 'POST') {
|
||||
$data = json_decode(file_get_contents('php://input'), true) ?? [];
|
||||
$code = trim((string) ($data['CMP_Code'] ?? ''));
|
||||
$libelle = trim((string) ($data['CMP_Libelle'] ?? ''));
|
||||
$description = trim((string) ($data['CMP_Description'] ?? ''));
|
||||
|
||||
if ($code === '' || $libelle === '') {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'CMP_Code et CMP_Libelle sont obligatoires.']);
|
||||
exit;
|
||||
}
|
||||
// Whitelist de forme plutôt qu'une simple absence de vérification : un
|
||||
// code de compétence est aussi un identifiant utilisé en dur dans
|
||||
// mission_agent.php (outilsDeLaCompetence()) — jamais d'espace ni de
|
||||
// caractère qui compliquerait sa lecture dans le code PHP.
|
||||
if (!preg_match('/^[A-Z0-9_]+$/', $code)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'CMP_Code ne doit contenir que des majuscules, chiffres et underscores (ex. SITE_WEB).']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$stmt = $pdo->prepare('SELECT 1 FROM ASP_Competences WHERE CMP_Code = ?');
|
||||
$stmt->execute([$code]);
|
||||
if ($stmt->fetch()) {
|
||||
http_response_code(409);
|
||||
echo json_encode(['error' => "La compétence $code existe déjà."]);
|
||||
exit;
|
||||
}
|
||||
$pdo->prepare('INSERT INTO ASP_Competences (CMP_Code, CMP_Libelle, CMP_Description) VALUES (?, ?, ?)')
|
||||
->execute([$code, $libelle, $description !== '' ? $description : null]);
|
||||
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