mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 18:17:09 +00:00
110 lines
4.3 KiB
PHP
110 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* ASPIC — preferences.php
|
|
* Préférences d'affichage liées à l'utilisateur connecté (ASP_Users) : 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), et depuis
|
|
* le 29 août 2026, l'identité affichée dans le bandeau (USR_Code, USR_Societe
|
|
* — badge de repérage d'environnement, voir journal).
|
|
*
|
|
* 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), USR_Code et USR_Societe (peut être
|
|
* null si non renseignée) de l'utilisateur connecté.
|
|
* PUT : met à jour un ou plusieurs ratios (0-100 uniquement, whitelist des
|
|
* colonnes acceptées — voir CHAMPS_RATIO). USR_Societe n'est pas
|
|
* modifiable depuis ce formulaire (donnée gérée à la main en base,
|
|
* comme le reste de ASP_Users — voir journal, section 2).
|
|
*/
|
|
|
|
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_Code, USR_Societe, 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_Code' => $ligne['USR_Code'],
|
|
'USR_Societe' => $ligne['USR_Societe'],
|
|
'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()]);
|
|
}
|