prepare("SELECT role FROM users WHERE id = ?"); $user_stmt->execute([$user_id]); $current_user = $user_stmt->fetch(); if (!$current_user || ($current_user['role'] !== 'admin' && $current_user['role'] !== 'gm')) { die("Accès refusé. Vous devez être un Maître du Jeu (MJ) pour accéder à cette console."); } $is_admin = ($current_user['role'] === 'admin'); // Fetch Dynamic Types and Statuses $object_types_db = $db->query("SELECT * FROM celestial_object_types ORDER BY id ASC")->fetchAll(PDO::FETCH_ASSOC); $statuses_db = $db->query("SELECT * FROM celestial_object_statuses ORDER BY id ASC")->fetchAll(PDO::FETCH_ASSOC); $settlement_types_db = $db->query("SELECT * FROM settlement_types ORDER BY id ASC")->fetchAll(PDO::FETCH_ASSOC); $object_types_map = []; foreach($object_types_db as $ot) $object_types_map[$ot['slug']] = $ot; $statuses_map = []; foreach($statuses_db as $s) $statuses_map[$s['slug']] = $s; // Handle Planet/Slot Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_slot') { $slot_id = (int)$_POST['slot_id']; $galaxy_id = (int)$_POST['galaxy_id']; $sector_id = (int)$_POST['sector_id']; $slot_num = (int)$_POST['slot_num']; $name = $_POST['name']; $type = $_POST['type']; $status = $_POST['status']; $orbital = (int)$_POST['orbital_control']; $terrestrial = (int)$_POST['terrestrial_control']; if ($type === 'empty') { if ($slot_id > 0) { $db->prepare("DELETE FROM planets WHERE id = ?")->execute([$slot_id]); } } else { if ($slot_id > 0) { $stmt = $db->prepare("UPDATE planets SET name = ?, type = ?, status = ?, orbital_control = ?, terrestrial_control = ? WHERE id = ?"); $stmt->execute([$name, $type, $status, $orbital, $terrestrial, $slot_id]); $planet_id = $slot_id; } else { $stmt = $db->prepare("INSERT INTO planets (galaxy_id, sector_id, slot, name, type, status, orbital_control, terrestrial_control) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$galaxy_id, $sector_id, $slot_num, $name, $type, $status, $orbital, $terrestrial]); $planet_id = $db->lastInsertId(); } // Handle Settlement (City) if (!empty($_POST['city_name'])) { $c_name = $_POST['city_name']; $c_type = $_POST['city_type']; // Simple check if city exists for this planet $stmt = $db->prepare("SELECT id FROM cities WHERE planet_id = ?"); $stmt->execute([$planet_id]); $city = $stmt->fetch(); if ($city) { $db->prepare("UPDATE cities SET name = ?, type = ? WHERE id = ?")->execute([$c_name, $c_type, $city['id']]); } else { $db->prepare("INSERT INTO cities (planet_id, name, type) VALUES (?, ?, ?)")->execute([$planet_id, $c_name, $c_type]); } } } header("Location: gm_console.php?view=sector&galaxy_id=$galaxy_id§or_id=$sector_id&success=1"); exit; } // Handle Sector Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_sector') { $sector_id = (int)$_POST['sector_id']; $galaxy_id = (int)$_POST['galaxy_id']; $s_name = $_POST['sector_name']; $s_status = $_POST['sector_status']; $stmt = $db->prepare("SELECT id FROM sectors WHERE id = ?"); $stmt->execute([$sector_id]); if ($stmt->fetch()) { $db->prepare("UPDATE sectors SET name = ?, status = ? WHERE id = ?")->execute([$s_name, $s_status, $sector_id]); } else { $db->prepare("INSERT INTO sectors (id, name, status, galaxy_id) VALUES (?, ?, ?, ?)")->execute([$sector_id, $s_name, $s_status, $galaxy_id]); } header("Location: gm_console.php?view=sector&galaxy_id=$galaxy_id§or_id=$sector_id&success=1"); exit; } $view = isset($_GET['view']) ? $_GET['view'] : 'galaxy'; $galaxy_id = isset($_GET['galaxy_id']) ? (int)$_GET['galaxy_id'] : 1; $sector_id = isset($_GET['sector_id']) ? (int)$_GET['sector_id'] : 1; $grid_size = 36; if ($view === 'sector') { // Fetch planets AND their cities $stmt = $db->prepare("SELECT p.*, c.name as city_name, c.type as city_type FROM planets p LEFT JOIN cities c ON p.id = c.planet_id WHERE p.galaxy_id = ? AND p.sector_id = ? AND p.slot BETWEEN 1 AND ?"); $stmt->execute([$galaxy_id, $sector_id, $grid_size]); $objects_raw = $stmt->fetchAll(); $grid = array_fill(1, $grid_size, null); foreach ($objects_raw as $obj) { $grid[$obj['slot']] = $obj; } $stmt = $db->prepare("SELECT * FROM sectors WHERE id = ?"); $stmt->execute([$sector_id]); $sector_info = $stmt->fetch(); } elseif ($view === 'galaxy') { $stmt = $db->prepare("SELECT sector_id, slot, status, type FROM planets WHERE galaxy_id = ? ORDER BY sector_id, slot ASC"); $stmt->execute([$galaxy_id]); $all_planets = $stmt->fetchAll(); $sector_data = []; foreach ($all_planets as $p) { $sector_data[$p['sector_id']][$p['slot']] = ['status' => $p['status'], 'type' => $p['type']]; } $stmt = $db->prepare("SELECT id, status FROM sectors WHERE galaxy_id = ?"); $stmt->execute([$galaxy_id]); $global_sector_statuses = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); } function getStatusColor($status, $type, $statuses_map, $object_types_map) { if (isset($statuses_map[$status])) return $statuses_map[$status]['color']; return 'rgba(255,255,255,0.05)'; } ?>