prepare("SELECT role FROM users WHERE id = ?"); $user_stmt->execute([$user_id]); $current_user = $user_stmt->fetch(); if (!$current_user || $current_user['role'] !== 'admin') { die("Accès refusé. Cette console est réservée aux Administrateurs."); } $tab = isset($_GET['tab']) ? $_GET['tab'] : 'users'; // --- HANDLERS --- // Handle User Role Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_user_role') { $target_user_id = (int)$_POST['target_user_id']; $new_role = $_POST['new_role']; if (in_array($new_role, ['user', 'gm', 'admin'])) { $stmt = $db->prepare("UPDATE users SET role = ? WHERE id = ?"); $stmt->execute([$new_role, $target_user_id]); } header("Location: admin.php?tab=users&success=1"); exit; } // Handle Celestial Object Type CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_object_type') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $icon = $_POST['icon']; $description = $_POST['description']; $modifier_ids = isset($_POST['modifiers']) ? $_POST['modifiers'] : []; $image_url = null; if ($id > 0) { $stmt_img = $db->prepare("SELECT image_url FROM celestial_object_types WHERE id = ?"); $stmt_img->execute([$id]); $image_url = $stmt_img->fetchColumn(); } if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) { $ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION); $filename = $slug . "_" . time() . "." . $ext; $target = "assets/images/celestial/" . $filename; if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) { $image_url = $target; } } if ($id > 0) { $stmt = $db->prepare("UPDATE celestial_object_types SET name = ?, slug = ?, icon = ?, description = ?, image_url = ? WHERE id = ?"); $stmt->execute([$name, $slug, $icon, $description, $image_url, $id]); } else { $stmt = $db->prepare("INSERT INTO celestial_object_types (name, slug, icon, description, image_url) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$name, $slug, $icon, $description, $image_url]); $id = $db->lastInsertId(); } // Sync modifiers $db->prepare("DELETE FROM celestial_object_type_modifiers WHERE celestial_object_type_id = ?")->execute([$id]); if (!empty($modifier_ids)) { $ins = $db->prepare("INSERT INTO celestial_object_type_modifiers (celestial_object_type_id, modifier_id) VALUES (?, ?)"); foreach ($modifier_ids as $mid) { $ins->execute([$id, (int)$mid]); } } header("Location: admin.php?tab=objects&success=1"); exit; } if (isset($_GET['delete_object'])) { $id = (int)$_GET['delete_object']; $db->prepare("DELETE FROM celestial_object_types WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=objects&success=1"); exit; } // Handle Status CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_status') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $color = $_POST['color']; $description = $_POST['description']; if ($id > 0) { $stmt = $db->prepare("UPDATE celestial_object_statuses SET name = ?, slug = ?, color = ?, description = ? WHERE id = ?"); $stmt->execute([$name, $slug, $color, $description, $id]); } else { $stmt = $db->prepare("INSERT INTO celestial_object_statuses (name, slug, color, description) VALUES (?, ?, ?, ?)"); $stmt->execute([$name, $slug, $color, $description]); } header("Location: admin.php?tab=statuses&success=1"); exit; } if (isset($_GET['delete_status'])) { $id = (int)$_GET['delete_status']; $db->prepare("DELETE FROM celestial_object_statuses WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=statuses&success=1"); exit; } // Handle Settlement Type CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_settlement_type') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $description = $_POST['description']; if ($id > 0) { $stmt = $db->prepare("UPDATE settlement_types SET name = ?, slug = ?, description = ? WHERE id = ?"); $stmt->execute([$name, $slug, $description, $id]); } else { $stmt = $db->prepare("INSERT INTO settlement_types (name, slug, description) VALUES (?, ?, ?)"); $stmt->execute([$name, $slug, $description]); } header("Location: admin.php?tab=settlement_types&success=1"); exit; } if (isset($_GET['delete_settlement_type'])) { $id = (int)$_GET['delete_settlement_type']; $db->prepare("DELETE FROM settlement_types WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=settlement_types&success=1"); exit; } // Handle Modifiers CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_modifier') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $type = $_POST['type']; $description = $_POST['description']; if ($id > 0) { $stmt = $db->prepare("UPDATE modifiers SET name = ?, slug = ?, type = ?, description = ? WHERE id = ?"); $stmt->execute([$name, $slug, $type, $description, $id]); } else { $stmt = $db->prepare("INSERT INTO modifiers (name, slug, type, description) VALUES (?, ?, ?, ?)"); $stmt->execute([$name, $slug, $type, $description]); } header("Location: admin.php?tab=modifiers&success=1"); exit; } if (isset($_GET['delete_modifier'])) { $id = (int)$_GET['delete_modifier']; $db->prepare("DELETE FROM modifiers WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=modifiers&success=1"); exit; } // Handle Faction CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_faction') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $fa_icon = $_POST['fa_icon']; $image_url = null; if ($id > 0) { $stmt_img = $db->prepare("SELECT image_url FROM factions WHERE id = ?"); $stmt_img->execute([$id]); $image_url = $stmt_img->fetchColumn(); } if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) { $ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION); $filename = "faction_" . time() . "." . $ext; $target = "assets/images/factions/" . $filename; if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) { $image_url = $target; } } if ($id > 0) { $stmt = $db->prepare("UPDATE factions SET name = ?, slug = ?, image_url = ?, fa_icon = ? WHERE id = ?"); $stmt->execute([$name, $slug, $image_url, $fa_icon, $id]); } else { $stmt = $db->prepare("INSERT INTO factions (name, slug, image_url, fa_icon) VALUES (?, ?, ?, ?)"); $stmt->execute([$name, $slug, $image_url, $fa_icon]); } header("Location: admin.php?tab=factions&success=1"); exit; } if (isset($_GET['delete_faction'])) { $id = (int)$_GET['delete_faction']; $db->prepare("DELETE FROM factions WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=factions&success=1"); exit; } // Handle Resource CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_resource') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $icon = $_POST['icon']; $description = $_POST['description']; $image_url = null; if ($id > 0) { $stmt_img = $db->prepare("SELECT image_url FROM game_resources WHERE id = ?"); $stmt_img->execute([$id]); $image_url = $stmt_img->fetchColumn(); } if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) { $ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION); $filename = "res_" . $slug . "_" . time() . "." . $ext; if (!is_dir("assets/images/resources")) { mkdir("assets/images/resources", 0775, true); } $target = "assets/images/resources/" . $filename; if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) { $image_url = $target; } } if ($id > 0) { $stmt = $db->prepare("UPDATE game_resources SET name = ?, slug = ?, icon = ?, description = ?, image_url = ? WHERE id = ?"); $stmt->execute([$name, $slug, $icon, $description, $image_url, $id]); } else { $stmt = $db->prepare("INSERT INTO game_resources (name, slug, icon, description, image_url) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$name, $slug, $icon, $description, $image_url]); } header("Location: admin.php?tab=resources&success=1"); exit; } if (isset($_GET['delete_resource'])) { $id = (int)$_GET['delete_resource']; $db->prepare("DELETE FROM game_resources WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=resources&success=1"); exit; } // Handle Lootbox CRUD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_lootbox') { $id = (int)$_POST['id']; $name = $_POST['name']; $slug = $_POST['slug']; $description = $_POST['description']; if ($id > 0) { $stmt = $db->prepare("UPDATE lootboxes SET name = ?, slug = ?, description = ? WHERE id = ?"); $stmt->execute([$name, $slug, $description, $id]); } else { $stmt = $db->prepare("INSERT INTO lootboxes (name, slug, description) VALUES (?, ?, ?)"); $stmt->execute([$name, $slug, $description]); $id = $db->lastInsertId(); } // Handle Rolls $db->prepare("DELETE FROM lootbox_rolls WHERE lootbox_id = ?")->execute([$id]); if (isset($_POST['rolls_count']) && is_array($_POST['rolls_count'])) { $ins_roll = $db->prepare("INSERT INTO lootbox_rolls (lootbox_id, roll_count, probability) VALUES (?, ?, ?)"); foreach ($_POST['rolls_count'] as $idx => $rc) { $prob = (float)$_POST['rolls_prob'][$idx]; if ($prob > 0) { $ins_roll->execute([$id, (int)$rc, $prob]); } } } // Handle Items $db->prepare("DELETE FROM lootbox_items WHERE lootbox_id = ?")->execute([$id]); if (isset($_POST['item_slug']) && is_array($_POST['item_slug'])) { $ins_item = $db->prepare("INSERT INTO lootbox_items (lootbox_id, resource_slug, probability, quantity_min, quantity_max, is_guaranteed) VALUES (?, ?, ?, ?, ?, ?)"); foreach ($_POST['item_slug'] as $idx => $islug) { $is_guaranteed = isset($_POST['item_is_guaranteed'][$idx]) ? (int)$_POST['item_is_guaranteed'][$idx] : 0; $iprob = $is_guaranteed ? 100.00 : (float)$_POST['item_prob'][$idx]; if ($is_guaranteed || $iprob > 0) { $qmin = (int)$_POST['item_qmin'][$idx]; $qmax = (int)$_POST['item_qmax'][$idx]; $ins_item->execute([$id, $islug ?: null, $iprob, $qmin, $qmax, $is_guaranteed]); } } } header("Location: admin.php?tab=lootboxes&success=1"); exit; } if (isset($_GET['delete_lootbox'])) { $id = (int)$_GET['delete_lootbox']; $db->prepare("DELETE FROM lootboxes WHERE id = ?")->execute([$id]); header("Location: admin.php?tab=lootboxes&success=1"); exit; } // --- DATA FETCHING --- $users_list = []; $objects_list = []; $statuses_list = []; $settlement_types_list = []; $modifiers_list = []; $factions_list = []; $resources_list = []; $lootboxes_list = []; if ($tab === 'users') { $users_list = $db->query("SELECT id, username, email, role FROM users ORDER BY username ASC")->fetchAll(); } elseif ($tab === 'objects') { $objects_list = $db->query("SELECT * FROM celestial_object_types ORDER BY name ASC")->fetchAll(); foreach ($objects_list as &$obj) { $stmt = $db->prepare("SELECT modifier_id FROM celestial_object_type_modifiers WHERE celestial_object_type_id = ?"); $stmt->execute([$obj['id']]); $obj['modifier_ids'] = $stmt->fetchAll(PDO::FETCH_COLUMN); } $modifiers_list = $db->query("SELECT * FROM modifiers ORDER BY type, name ASC")->fetchAll(); } elseif ($tab === 'statuses') { $statuses_list = $db->query("SELECT * FROM celestial_object_statuses ORDER BY name ASC")->fetchAll(); } elseif ($tab === 'settlement_types') { $settlement_types_list = $db->query("SELECT * FROM settlement_types ORDER BY name ASC")->fetchAll(); } elseif ($tab === 'modifiers') { $modifiers_list = $db->query("SELECT * FROM modifiers ORDER BY type, name ASC")->fetchAll(); } elseif ($tab === 'factions') { $factions_list = $db->query("SELECT * FROM factions ORDER BY name ASC")->fetchAll(); } elseif ($tab === 'resources') { $resources_list = $db->query("SELECT * FROM game_resources ORDER BY name 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(); foreach ($lootboxes_list as &$lb) { $stmt_r = $db->prepare("SELECT * FROM lootbox_rolls WHERE lootbox_id = ?"); $stmt_r->execute([$lb['id']]); $lb['rolls'] = $stmt_r->fetchAll(); $stmt_i = $db->prepare("SELECT * FROM lootbox_items WHERE lootbox_id = ?"); $stmt_i->execute([$lb['id']]); $lb['items'] = $stmt_i->fetchAll(); } } ?> Console Admin - Nexus

CONSOLE ADMIN

Opération effectuée avec succès.
Utilisateurs Objets Célestes Bonus & Malus Statuts / États Types d'Établissements Factions Ressources Lootboxes

Gestion des Rôles

UtilisateurEmailRôle ActuelNouveau Rôle

Objets Célestes

Ajouter / Modifier un Objet

VisuelNomBonus/MalusSlugActions
prepare("SELECT m.name, m.type FROM modifiers m JOIN celestial_object_type_modifiers cotm ON m.id = cotm.modifier_id WHERE cotm.celestial_object_type_id = ?"); $stmt->execute([$o['id']]); $m_list = $stmt->fetchAll(); foreach ($m_list as $ml): ?> Suppr

Gestion des Bonus & Malus

Ajouter / Modifier un Modificateur

TypeNomDescriptionSlugActions
Suppr

Statuts / États

Ajouter / Modifier un Statut

CouleurNomSlugActions
Suppr

Types d'Établissements

Ajouter / Modifier un Type d'Établissement

NomSlugDescriptionActions
Suppr

Gestion des Factions

Ajouter / Modifier une Faction

VisuelNomSlugActions
Suppr

Gestion des Ressources

Ajouter / Modifier une Ressource

VisuelNomSlugActions
Suppr

Système de Lootboxes

Créer / Modifier une Lootbox

Nb Total
Chance (%)
Type
Ressource / Objet
Chance (%)
Qté Min
Qté Max
NomSlugObjets Directs (100%)Nb Total (%)Pool Aléatoire (%)Actions
$i['is_guaranteed']); foreach ($directs as $d): ?>
(Qté: -)
Aucun"; ?>
objet(s): %
!$i['is_guaranteed']); foreach ($pool as $i): ?>
(Rien)'; ?>: % (Qté: -)
Suppr