prepare("SELECT u.role, u.display_name, u.username, u.guild_id, l.name as level_raw, u.selected_title_id, u.selected_badge_id, t.name as title_name, b.name as badge_name, b.image_url as badge_image FROM users u LEFT JOIN levels l ON u.level_id = l.id LEFT JOIN titles t ON u.selected_title_id = t.id LEFT JOIN badges b ON u.selected_badge_id = b.id WHERE u.id = ?"); $stmt->execute([$user_id]); $u_data = $stmt->fetch(); if ($u_data) { $user_role = $u_data['role'] ?? 'user'; $_SESSION['display_name'] = $u_data['display_name'] ?: $u_data['username']; $level_num = (int)filter_var($u_data['level_raw'], FILTER_SANITIZE_NUMBER_INT); $_SESSION['level'] = $level_num; $_SESSION['guild_id'] = $u_data['guild_id']; $_SESSION['selected_title_name'] = $u_data['title_name']; $_SESSION['selected_badge_name'] = $u_data['badge_name']; $_SESSION['selected_badge_image'] = $u_data['badge_image']; $grade_type = ($user_role === 'admin') ? 'admin' : 'utilisateur'; $g_stmt = $db->prepare("SELECT name, image_url FROM grades WHERE user_type = ? AND (min_level <= ? OR min_level IS NULL) AND (max_level >= ? OR max_level IS NULL) LIMIT 1"); $g_stmt->execute([$grade_type, $level_num, $level_num]); $grade_data = $g_stmt->fetch(); if ($grade_data) { $_SESSION['grade_name'] = $grade_data['name']; $_SESSION['grade_image'] = $grade_data['image_url']; } else { $_SESSION['grade_name'] = "Recrue"; $_SESSION['grade_image'] = "assets/images/placeholder_grade.png"; } } // Dynamic Resources for Header & Check $resources = []; $user_resource_amounts = []; // For easier access $stmt = $db->prepare(" SELECT gr.*, COALESCE(ur.amount, 0) as amount FROM game_resources gr LEFT JOIN user_resources ur ON gr.id = ur.resource_id AND ur.user_id = ? ORDER BY CASE WHEN gr.name LIKE 'Crédit%' THEN 1 WHEN gr.name LIKE 'Matériau%' THEN 2 WHEN gr.name LIKE 'Energie%' THEN 3 WHEN gr.name LIKE 'Donnée%' THEN 4 ELSE 5 END ASC, gr.name ASC "); $stmt->execute([$user_id]); $all_resources_raw = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach($all_resources_raw as $hr) { $user_resource_amounts[$hr['id']] = (float)$hr['amount']; if ($hr['show_in_header'] == 1) { $resources[$hr["name"]] = [ "val" => (string)$hr["amount"], "prod" => "", "icon" => $hr["icon"] ?: "fa-gem", "image" => $hr["image_url"] ]; } } // --- GUILD SPECIFIC LOGIC --- // Check if user is in a guild $stmt = $db->prepare("SELECT u.guild_id, m.role, g.name as guild_name, g.tag as guild_tag, g.description as guild_desc FROM users u LEFT JOIN guild_members m ON u.id = m.user_id LEFT JOIN guilds g ON u.guild_id = g.id WHERE u.id = ?"); $stmt->execute([$user_id]); $user_guild_info = $stmt->fetch(PDO::FETCH_ASSOC); $in_guild = !empty($user_guild_info['guild_id']); // Fetch member limit $stmt = $db->query("SELECT value FROM guild_restrictions WHERE restriction_key = 'member_limit'"); $member_limit = (int)($stmt->fetchColumn() ?: 50); // --- ACTIONS --- // JOIN GUILD if (isset($_GET['join']) && !$in_guild) { $guild_id = (int)$_GET['join']; $stmt = $db->prepare("SELECT COUNT(*) FROM guild_members WHERE guild_id = ?"); $stmt->execute([$guild_id]); $current_members = (int)$stmt->fetchColumn(); if ($current_members >= $member_limit) { $error = "Cette guilde est pleine."; } else { $db->beginTransaction(); try { $db->prepare("UPDATE users SET guild_id = ? WHERE id = ?")->execute([$guild_id, $user_id]); $db->prepare("INSERT INTO guild_members (guild_id, user_id, role) VALUES (?, ?, 'membre')")->execute([$guild_id, $user_id]); $_SESSION['guild_id'] = $guild_id; $db->commit(); header("Location: guilde.php"); exit; } catch (Exception $e) { $db->rollBack(); $error = "Erreur : " . $e->getMessage(); } } } // DISBAND GUILD if (isset($_GET['action']) && $_GET['action'] === 'disband' && $in_guild && $user_guild_info['role'] === 'superviseur') { $guild_id = $user_guild_info['guild_id']; $db->beginTransaction(); try { $db->prepare("UPDATE users SET guild_id = NULL WHERE guild_id = ?")->execute([$guild_id]); $db->prepare("DELETE FROM guild_members WHERE guild_id = ?")->execute([$guild_id]); $db->prepare("DELETE FROM guilds WHERE id = ?")->execute([$guild_id]); $_SESSION['guild_id'] = null; $db->commit(); header("Location: guilde.php"); exit; } catch (Exception $e) { $db->rollBack(); $error = "Erreur : " . $e->getMessage(); } } // LEAVE GUILD if (isset($_GET['action']) && $_GET['action'] === 'leave' && $in_guild && $user_guild_info['role'] !== 'superviseur') { $db->beginTransaction(); try { $db->prepare("UPDATE users SET guild_id = NULL WHERE id = ?")->execute([$user_id]); $db->prepare("DELETE FROM guild_members WHERE user_id = ?")->execute([$user_id]); $_SESSION['guild_id'] = null; $db->commit(); header("Location: guilde.php"); exit; } catch (Exception $e) { $db->rollBack(); $error = "Erreur : " . $e->getMessage(); } } // KICK MEMBER if (isset($_GET['kick']) && $in_guild && ($user_guild_info['role'] === 'superviseur' || $user_guild_info['role'] === 'officier')) { $target_id = (int)$_GET['kick']; if ($target_id != $user_id) { $stmt = $db->prepare("SELECT role FROM guild_members WHERE user_id = ? AND guild_id = ?"); $stmt->execute([$target_id, $user_guild_info['guild_id']]); $target_role = $stmt->fetchColumn(); if ($target_role) { $can_kick = ($user_guild_info['role'] === 'superviseur') || ($user_guild_info['role'] === 'officier' && $target_role === 'membre'); if ($can_kick) { $db->prepare("UPDATE users SET guild_id = NULL WHERE id = ?")->execute([$target_id]); $db->prepare("DELETE FROM guild_members WHERE user_id = ?")->execute([$target_id]); $message = "Membre exclu."; } else $error = "Droits insuffisants."; } } } // UPDATE ROLE if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_role' && $in_guild && $user_guild_info['role'] === 'superviseur') { $target_id = (int)$_POST['target_user_id']; $new_role = $_POST['new_role']; if (in_array($new_role, ['membre', 'officier']) && $target_id != $user_id) { $db->prepare("UPDATE guild_members SET role = ? WHERE user_id = ? AND guild_id = ?")->execute([$new_role, $target_id, $user_guild_info['guild_id']]); $message = "Grade mis à jour."; } } // CREATE GUILD if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'create_guild' && !$in_guild) { $name = trim($_POST['name']); $tag = strtoupper(trim($_POST['tag'])); $description = trim($_POST['description']); if (strlen($name) < 3) $error = "Nom trop court."; elseif (strlen($tag) < 2) $error = "Tag trop court."; else { $reqs = $db->query("SELECT resource_id, amount FROM guild_creation_requirements WHERE amount > 0")->fetchAll(PDO::FETCH_ASSOC); $db->beginTransaction(); try { $can_afford = true; foreach ($reqs as $req) { $stmt = $db->prepare("SELECT amount FROM user_resources WHERE user_id = ? AND resource_id = ?"); $stmt->execute([$user_id, $req['resource_id']]); if (($stmt->fetchColumn() ?: 0) < $req['amount']) { $can_afford = false; break; } } if (!$can_afford) { $error = "Ressources insuffisantes."; $db->rollBack(); } else { foreach ($reqs as $req) $db->prepare("UPDATE user_resources SET amount = amount - ? WHERE user_id = ? AND resource_id = ?")->execute([$req['amount'], $user_id, $req['resource_id']]); $db->prepare("INSERT INTO guilds (name, tag, description) VALUES (?, ?, ?)")->execute([$name, $tag, $description]); $guild_id = $db->lastInsertId(); $db->prepare("INSERT INTO guild_members (guild_id, user_id, role) VALUES (?, ?, 'superviseur')")->execute([$guild_id, $user_id]); $db->prepare("UPDATE users SET guild_id = ? WHERE id = ?")->execute([$guild_id, $user_id]); $_SESSION['guild_id'] = $guild_id; $db->commit(); header("Location: guilde.php"); exit; } } catch (Exception $e) { $db->rollBack(); $error = "Erreur : " . $e->getMessage(); } } } // --- DATA FETCHING --- if ($in_guild) { $stmt = $db->prepare("SELECT m.*, u.username, u.display_name FROM guild_members m JOIN users u ON m.user_id = u.id WHERE m.guild_id = ? ORDER BY FIELD(role, 'superviseur', 'officier', 'membre'), joined_at ASC"); $stmt->execute([$user_guild_info['guild_id']]); $guild_members = $stmt->fetchAll(PDO::FETCH_ASSOC); } else { $display_reqs = $db->query("SELECT r.id, r.name, r.icon, r.image_url, gr.amount FROM guild_creation_requirements gr JOIN game_resources r ON gr.resource_id = r.id WHERE gr.amount > 0")->fetchAll(PDO::FETCH_ASSOC); $all_guilds = $db->query("SELECT g.*, (SELECT COUNT(*) FROM guild_members WHERE guild_id = g.id) as member_count FROM guilds g ORDER BY member_count DESC")->fetchAll(PDO::FETCH_ASSOC); // Check global affordability for create button $can_afford_creation = true; foreach ($display_reqs as $req) { if (($user_resource_amounts[$req['id']] ?? 0) < $req['amount']) { $can_afford_creation = false; break; } } } ?> <?php echo $in_guild ? htmlspecialchars($user_guild_info['guild_name']) : 'Guildes'; ?> - Nexus
Retour au Nexus
$res): ?>
?v="> ">

Guildes Actives

GuildeMembresActions
Aucune guilde pour le moment.
[]
/ Rejoindre PLEINE

Fonder une Guilde

Coût requis :

Gratuit

[]

Votre grade :

Membres de la Guilde ( / )

MembreGradeAnciennetéGestion
@
Dissoudre la guilde Quitter la guilde