mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-08-28 21:13:13 +00:00
104 lines
3.9 KiB
PHP
104 lines
3.9 KiB
PHP
<?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()]);
|
|
}
|