mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-08-28 22:23:14 +00:00
Add files via upload
This commit is contained in:
+103
@@ -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()]);
|
||||
}
|
||||
Reference in New Issue
Block a user