Add files via upload

This commit is contained in:
2026-08-28 20:47:44 +02:00
committed by GitHub
parent 1abbb489d6
commit 61a0a08f64
17 changed files with 3962 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
<?php
/**
* ASPIC — preferences.php
* Préférences d'affichage liées à l'utilisateur connecté (ASP_Users), et non
* à un contact ou à une donnée métier — pour l'instant, uniquement le ratio
* de répartition du panneau de détail (grille des champs / sous-liste des
* réalisations), voir journal de développement, section 17.
*
* Toujours restreint à l'utilisateur de la session en cours
* ($_SESSION['USR_Code'], ouverte par aspic.php) : aucun USR_Code n'est
* jamais accepté depuis le corps de la requête, sur le même principe que
* REA_CodeUser dans realisations.php (voir journal, section 15) — impossible
* pour un utilisateur de lire ou modifier les préférences d'un autre.
*
* GET : renvoie les deux ratios (0-100) de l'utilisateur connecté.
* PUT : met à jour un ou plusieurs ratios (0-100 uniquement, whitelist des
* colonnes acceptées — voir CHAMPS_RATIO).
*/
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;
}
$method = $_SERVER['REQUEST_METHOD'];
try {
$pdo = getDbConnection();
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Connexion base de données impossible']);
exit;
}
// Whitelist des colonnes de préférence modifiables — n'accepter que celles-ci
// dans le corps d'un PUT, jamais un nom de colonne arbitraire fourni par le
// client (même logique que CHAMPS_EDITABLES dans contacts.php).
const CHAMPS_RATIO = ['USR_RatioPanneauContact', 'USR_RatioPanneauProspect'];
try {
switch ($method) {
case 'GET':
$stmt = $pdo->prepare(
'SELECT USR_RatioPanneauContact, USR_RatioPanneauProspect FROM ASP_Users WHERE USR_Code = ?'
);
$stmt->execute([$_SESSION['USR_Code']]);
$ligne = $stmt->fetch();
if (!$ligne) {
http_response_code(404);
echo json_encode(['error' => 'Utilisateur introuvable']);
exit;
}
echo json_encode([
'USR_RatioPanneauContact' => (int)$ligne['USR_RatioPanneauContact'],
'USR_RatioPanneauProspect' => (int)$ligne['USR_RatioPanneauProspect'],
]);
break;
case 'PUT':
$data = json_decode(file_get_contents('php://input'), true) ?? [];
$assignations = [];
$params = [];
foreach (CHAMPS_RATIO as $champ) {
if (!array_key_exists($champ, $data)) {
continue;
}
$valeur = $data[$champ];
if (!is_numeric($valeur) || (int)$valeur < 0 || (int)$valeur > 100) {
http_response_code(400);
echo json_encode(['error' => "$champ doit être un entier compris entre 0 et 100"]);
exit;
}
$assignations[] = "$champ = ?";
$params[] = (int)$valeur;
}
if (!$assignations) {
http_response_code(400);
echo json_encode(['error' => 'Aucun champ de préférence reconnu à mettre à jour']);
exit;
}
$params[] = $_SESSION['USR_Code'];
$sql = 'UPDATE ASP_Users SET ' . implode(', ', $assignations) . ' WHERE USR_Code = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
echo json_encode(['success' => true]);
break;
default:
http_response_code(405);
echo json_encode(['error' => 'Méthode non autorisée']);
}
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Erreur base de données : ' . $e->getMessage()]);
}