38676-vm/profile.php
2026-03-09 19:02:21 +00:00

187 lines
10 KiB
PHP

<?php
require_once 'db/config.php';
session_start();
$db = db();
$id = $_GET['id'] ?? null;
$username = $_GET['player'] ?? '';
$is_ajax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
$user = null;
if ($id || !empty($username)) {
// Fetch full user data matching the header logic in index.php
$sql = "SELECT u.id, 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,
g.name as guild_name, g.tag as guild_tag
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
LEFT JOIN guilds g ON u.guild_id = g.id
WHERE " . ($id ? "u.id = ?" : "(u.username = ? OR u.display_name = ?)");
$stmt = $db->prepare($sql);
$params = $id ? [$id] : [$username, $username];
$stmt->execute($params);
$user = $stmt->fetch();
if ($user) {
$level_num = (int)filter_var($user['level_raw'] ?? '1', FILTER_SANITIZE_NUMBER_INT);
$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();
$user['grade_name'] = $grade_data['name'] ?? "Recrue";
$user['grade_image'] = $grade_data['image_url'] ?? "assets/images/placeholder_grade.png";
$user['level_num'] = $level_num ?: 1;
}
}
if ($is_ajax): ?>
<?php if ($user): ?>
<div class="profile-top-section">
<div style="display: flex; align-items: center; justify-content: center; margin-bottom: 5px;">
<img src="<?php echo htmlspecialchars($user['grade_image']); ?>" class="profile-grade-img">
<span class="profile-username">
<?php echo htmlspecialchars($user['grade_name']); ?>
<?php echo htmlspecialchars($user['display_name'] ?: $user['username']); ?>
</span>
</div>
<?php if (!empty($user['title_name'])): ?>
<span class="profile-title-text">— <?php echo htmlspecialchars($user['title_name']); ?> —</span>
<?php endif; ?>
<span class="profile-level-text">Niveau <?php echo $user['level_num']; ?></span>
</div>
<div class="profile-section-header">Guilde</div>
<div class="guild-info-box">
<?php if (!empty($user['guild_id'])): ?>
<div class="guild-display">
<div class="guild-icon-placeholder"><i class="fa-solid fa-building-shield"></i></div>
<span class="guild-tag-display">[<?php echo htmlspecialchars($user['guild_tag']); ?>]</span>
<span class="guild-name-display"><?php echo htmlspecialchars($user['guild_name']); ?></span>
</div>
<?php else: ?>
<div class="guild-display" style="opacity: 0.5;">
<div class="guild-icon-placeholder"><i class="fa-solid fa-user"></i></div>
<span class="guild-name-display" style="font-style: italic;">Aucune guilde</span>
</div>
<?php endif; ?>
</div>
<div class="profile-bottom-grid">
<div class="profile-left-col">
<!-- Additional data could go here (stats, etc.) -->
<div style="width: 100%; height: 100%; opacity: 0.1; background: url('https://www.transparenttextures.com/patterns/stardust.png');"></div>
</div>
<div class="profile-right-col">
<div class="profile-section-header">Insigne Équipé</div>
<div class="badge-info-section">
<?php if (!empty($user['badge_image'])): ?>
<img src="<?php echo htmlspecialchars($user['badge_image']); ?>?v=<?php echo time(); ?>" class="badge-img-display" title="<?php echo htmlspecialchars($user['badge_name']); ?>">
<span class="badge-name-display"><?php echo htmlspecialchars($user['badge_name']); ?></span>
<?php else: ?>
<div style="width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; opacity: 0.2; margin-bottom: 15px;">
<i class="fa-solid fa-medal fa-3x"></i>
</div>
<span class="badge-name-display" style="opacity: 0.5; font-style: italic;">Aucun insigne</span>
<?php endif; ?>
</div>
</div>
</div>
<?php else: ?>
<div style="text-align: center; padding: 40px; background: rgba(0,0,0,0.5);">
<i class="fa-solid fa-user-slash" style="font-size: 48px; color: #bf616a; margin-bottom: 20px;"></i>
<h2 style="color: #fff; text-transform: uppercase;">Joueur introuvable</h2>
</div>
<?php endif; ?>
<?php exit; endif; ?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Profil de <?php echo $user ? htmlspecialchars($user['display_name'] ?: $user['username']) : 'Joueur'; ?> - Nexus</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet">
<style>
body { background: #000; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; min-height: 100vh; display: flex; align-items: center; justify-content: center; background-image: radial-gradient(circle at 50% 50%, #0f172a 0%, #000 100%); }
.profile-card { background: rgba(15, 23, 42, 0.9); border: 1px solid #1e293b; border-radius: 16px; width: 100%; max-width: 550px; padding: 40px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); text-align: center; position: relative; overflow: hidden; }
.profile-card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 4px; background: linear-gradient(90deg, #88c0d0, #81a1c1); }
.grade-img { width: 100px; height: 100px; object-fit: contain; margin-bottom: 20px; filter: drop-shadow(0 0 15px rgba(136, 192, 208, 0.3)); }
h1 { margin: 10px 0; font-size: 32px; color: #fff; }
.username { color: #8c92a3; font-size: 16px; margin-bottom: 15px; display: block; }
.title-text { font-size: 16px; font-weight: bold; color: #ebcb8b; text-transform: uppercase; letter-spacing: 0.15em; margin-bottom: 10px; font-style: italic; }
.level-badge { display: inline-block; background: rgba(136, 192, 208, 0.1); color: #88c0d0; padding: 5px 15px; border-radius: 20px; font-weight: bold; font-size: 14px; margin-bottom: 25px; border: 1px solid rgba(136, 192, 208, 0.3); }
.guild-info { background: rgba(30, 41, 59, 0.5); padding: 15px; border-radius: 12px; margin-bottom: 30px; border: 1px solid #1e293b; display: inline-flex; align-items: center; gap: 10px; }
.guild-tag { color: #ebcb8b; font-weight: bold; }
.guild-name { color: #fff; font-weight: 500; }
.badge-display { margin-top: 20px; padding: 20px; background: rgba(0, 0, 0, 0.2); border-radius: 16px; display: inline-block; border: 1px solid rgba(255,255,255,0.05); }
.badge-img { width: 120px; height: 120px; object-fit: contain; filter: drop-shadow(0 0 20px rgba(136, 192, 208, 0.2)); }
.badge-name { font-size: 11px; color: #8c92a3; margin-top: 10px; text-transform: uppercase; letter-spacing: 0.05em; }
.btn-back { margin-top: 40px; display: inline-block; color: #8c92a3; text-decoration: none; font-size: 14px; transition: color 0.2s; }
.btn-back:hover { color: #88c0d0; }
.error-container { text-align: center; }
.error-container i { font-size: 64px; color: #bf616a; margin-bottom: 20px; }
</style>
</head>
<body>
<div class="profile-card">
<?php if ($user): ?>
<img src="<?php echo htmlspecialchars($user['grade_image']); ?>" class="grade-img" alt="Grade">
<h1><?php echo htmlspecialchars($user['display_name'] ?: $user['username']); ?></h1>
<span class="username">@<?php echo htmlspecialchars($user['username']); ?></span>
<?php if (!empty($user['title_name'])): ?>
<div class="title-text">« <?php echo htmlspecialchars($user['title_name']); ?> »</div>
<?php endif; ?>
<div class="level-badge">NIVEAU <?php echo $user['level_num']; ?> — <?php echo htmlspecialchars($user['grade_name']); ?></div>
<?php if (!empty($user['guild_id'])): ?>
<br>
<div class="guild-info">
<i class="fa-solid fa-building-shield" style="color: #88c0d0;"></i>
<span class="guild-tag">[<?php echo htmlspecialchars($user['guild_tag']); ?>]</span>
<span class="guild-name"><?php echo htmlspecialchars($user['guild_name']); ?></span>
</div>
<?php endif; ?>
<?php if (!empty($user['badge_image'])): ?>
<div style="display: block;">
<div class="badge-display">
<img src="<?php echo htmlspecialchars($user['badge_image']); ?>?v=<?php echo time(); ?>" class="badge-img" title="<?php echo htmlspecialchars($user['badge_name']); ?>">
<div class="badge-name">Badge de prestige</div>
</div>
</div>
<?php endif; ?>
<?php else: ?>
<div class="error-container">
<i class="fa-solid fa-user-slash"></i>
<h1>Joueur introuvable</h1>
<p style="color: #8c92a3;">Le profil de @<?php echo htmlspecialchars($username); ?> n'a pas été localisé dans la base de données du Nexus.</p>
</div>
<?php endif; ?>
<a href="index.php" class="btn-back"><i class="fa-solid fa-arrow-left"></i> Retour au Nexus</a>
</div>
</body>
</html>