diff --git a/admin.php b/admin.php index da97c28..d379f8c 100644 --- a/admin.php +++ b/admin.php @@ -1,4 +1,36 @@ prepare("SELECT role FROM users WHERE id = ?"); + $stmt->execute([$user_id]); + $user = $stmt->fetch(); + if (!$user) return null; + + $role = $user['role']; + $level = 0; + try { + $stmt_lvl = $pdo->prepare("SELECT level FROM users WHERE id = ?"); + $stmt_lvl->execute([$user_id]); + $level = (int)$stmt_lvl->fetchColumn(); + } catch (Exception $e) { + // level column might not exist + } + + if ($role === 'admin') { + $stmt = $pdo->prepare("SELECT * FROM grades WHERE user_type = 'admin' LIMIT 1"); + $stmt->execute(); + return $stmt->fetch(); + } elseif ($role === 'gm') { + $stmt = $pdo->prepare("SELECT * FROM grades WHERE user_type = 'GM' LIMIT 1"); + $stmt->execute(); + return $stmt->fetch(); + } else { + $stmt = $pdo->prepare("SELECT * FROM grades WHERE user_type = 'utilisateur' AND ? BETWEEN min_level AND max_level LIMIT 1"); + $stmt->execute([$level]); + return $stmt->fetch(); + } +} + require_once 'db/config.php'; session_start(); $db = db(); @@ -377,6 +409,44 @@ if (isset($_GET['delete_resource'])) { } // Handle Lootbox CRUD +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_grade') { + $id = (int)$_POST['id']; + $name = trim($_POST['name']); + $slug = trim($_POST['slug']); + $user_type = $_POST['user_type']; + $min_level = ($user_type === 'utilisateur') ? (int)$_POST['min_level'] : null; + $max_level = ($user_type === 'utilisateur') ? (int)$_POST['max_level'] : null; + + if ($user_type === 'utilisateur' && $min_level > $max_level) { + header('Location: ?tab=ranks&error=invalid_range'); + exit; + } + + // Check for overlap if user_type is 'utilisateur' + if ($user_type === 'utilisateur') { + $check = db()->prepare("SELECT id FROM grades WHERE user_type = 'utilisateur' AND id != ? AND NOT (max_level < ? OR min_level > ?)"); + $check->execute([$id, $min_level, $max_level]); + if ($check->fetch()) { + header('Location: ?tab=ranks&error=overlap_levels'); + exit; + } + } + + try { + if ($id > 0) { + $stmt = db()->prepare("UPDATE grades SET name = ?, slug = ?, user_type = ?, min_level = ?, max_level = ? WHERE id = ?"); + $stmt->execute([$name, $slug, $user_type, $min_level, $max_level, $id]); + } else { + $stmt = db()->prepare("INSERT INTO grades (name, slug, user_type, min_level, max_level) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$name, $slug, $user_type, $min_level, $max_level]); + } + header('Location: ?tab=ranks&success=1'); + exit; + } catch (PDOException $e) { + header('Location: ?tab=ranks&error=db'); + exit; + } +} if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_lootbox') { $id = (int)$_POST['id']; $name = $_POST['name']; @@ -450,6 +520,13 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["action"]) && $_POST[" exit; } +if (isset($_GET['delete_grade'])) { + $id = (int)$_GET['delete_grade']; + $stmt = db()->prepare("DELETE FROM grades WHERE id = ?"); + $stmt->execute([$id]); + header('Location: ?tab=ranks&success=deleted'); + exit; +} if (isset($_GET["delete_project_log"])) { $id = (int)$_GET["delete_project_log"]; $db->prepare("DELETE FROM project_logs WHERE id = ?")->execute([$id]); @@ -458,6 +535,7 @@ if (isset($_GET["delete_project_log"])) { } // --- DATA FETCHING --- + $users_list = []; $objects_list = []; $statuses_list = []; @@ -470,6 +548,7 @@ $resources_list = []; $lootboxes_list = []; $project_logs_list = []; $levels_list = []; +$ranks_list = []; if ($tab === 'users') { $users_list = $db->query("SELECT id, username, email, role FROM users ORDER BY username ASC")->fetchAll(); @@ -507,6 +586,8 @@ if ($tab === 'users') { $resources_list = $db->query("SELECT * FROM game_resources ORDER BY name ASC")->fetchAll(); } elseif ($tab === 'project_logs') { $project_logs_list = $db->query("SELECT * FROM project_logs ORDER BY created_at DESC")->fetchAll(); +} elseif ($tab === 'ranks') { + $ranks_list = $db->query("SELECT * FROM grades ORDER BY user_type DESC, min_level ASC")->fetchAll(); } elseif ($tab === 'lootboxes') { $lootboxes_list = $db->query("SELECT * FROM lootboxes ORDER BY name ASC")->fetchAll(); $resources_list = $db->query("SELECT name, slug FROM game_resources ORDER BY name ASC")->fetchAll(); @@ -748,10 +829,98 @@ if ($tab === 'users') {
À configurer
+| Nom | +Slug | +Type | +Intervalle Niveau | +Actions | +
|---|---|---|---|---|
| Aucun grade configuré. | ||||
| + | |
+ + + + + | ++ + - + + N/A + + | ++ + Suppr + | +