Alpha V2.5.4
This commit is contained in:
parent
10f9e8ec3f
commit
81cfad2a9e
20
auth.php
20
auth.php
@ -29,11 +29,27 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$error = 'Ce nom d\'utilisateur ou cet email est déjà utilisé.';
|
||||
} else {
|
||||
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
|
||||
$stmt = $db->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
|
||||
|
||||
try {
|
||||
$db->beginTransaction();
|
||||
|
||||
$stmt = $db->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
|
||||
$stmt->execute([$username, $email, $hashed_password]);
|
||||
$new_user_id = $db->lastInsertId();
|
||||
|
||||
// Initialize resources for the new user
|
||||
$resources = $db->query("SELECT id, slug FROM game_resources")->fetchAll(PDO::FETCH_ASSOC);
|
||||
$res_stmt = $db->prepare("INSERT INTO user_resources (user_id, resource_id, amount) VALUES (?, ?, ?)");
|
||||
|
||||
foreach ($resources as $resource) {
|
||||
$initialAmount = ($resource['slug'] === 'res_xp') ? 1 : 0;
|
||||
$res_stmt->execute([$new_user_id, $resource['id'], $initialAmount]);
|
||||
}
|
||||
|
||||
$db->commit();
|
||||
$success = 'Compte créé avec succès ! Vous pouvez maintenant vous connecter.';
|
||||
} catch (Exception $e) {
|
||||
$db->rollBack();
|
||||
$error = 'Erreur lors de la création du compte.';
|
||||
}
|
||||
}
|
||||
@ -166,4 +182,4 @@ $page = $_GET['page'] ?? 'login';
|
||||
<a href="index.php" class="back-link"><i class="fa-solid fa-arrow-left"></i> Retour à la galaxie</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
42
db/migrate_user_resources.php
Normal file
42
db/migrate_user_resources.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/config.php';
|
||||
$db = db();
|
||||
|
||||
try {
|
||||
// 1. Create the user_resources table
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS user_resources (
|
||||
user_id INT NOT NULL,
|
||||
resource_id INT NOT NULL,
|
||||
amount BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (user_id, resource_id),
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (resource_id) REFERENCES game_resources(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
||||
|
||||
echo "Table user_resources created (if it did not exist).\n";
|
||||
|
||||
// 2. Get all users and all resources
|
||||
$users = $db->query("SELECT id FROM users")->fetchAll(PDO::FETCH_COLUMN);
|
||||
$resources = $db->query("SELECT id, slug FROM game_resources")->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if (empty($users) || empty($resources)) {
|
||||
echo "No users or resources found to initialize.\n";
|
||||
} else {
|
||||
// 3. Initialize resources for each user
|
||||
$stmt = $db->prepare("INSERT IGNORE INTO user_resources (user_id, resource_id, amount) VALUES (?, ?, ?)");
|
||||
|
||||
foreach ($users as $userId) {
|
||||
foreach ($resources as $resource) {
|
||||
$initialAmount = ($resource['slug'] === 'res_xp') ? 1 : 0;
|
||||
$stmt->execute([$userId, $resource['id'], $initialAmount]);
|
||||
}
|
||||
}
|
||||
echo "Resources initialized for " . count($users) . " users.\n";
|
||||
}
|
||||
|
||||
echo "Migration completed successfully.\n";
|
||||
} catch (PDOException $e) {
|
||||
die("Migration failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
|
||||
83
index.php
83
index.php
@ -6,11 +6,36 @@ $db = db();
|
||||
|
||||
$user_role = 'user';
|
||||
if (isset($_SESSION['user_id'])) {
|
||||
$stmt = $db->prepare("SELECT role FROM users WHERE id = ?");
|
||||
$stmt = $db->prepare("SELECT u.role, u.display_name, u.username, l.name as level_raw
|
||||
FROM users u
|
||||
LEFT JOIN levels l ON u.level_id = l.id
|
||||
WHERE u.id = ?");
|
||||
$stmt->execute([$_SESSION['user_id']]);
|
||||
$u_data = $stmt->fetch();
|
||||
$stmt = $db->prepare("SELECT u.level, u.grade, g.name as grade_name, g.image_url as grade_image FROM users u LEFT JOIN grades g ON u.grade = g.slug WHERE u.id = ?"); $stmt->execute([$_SESSION["user_id"]]); $extra = $stmt->fetch(); $_SESSION["level"] = $extra["level"]; $_SESSION["grade_name"] = $extra["grade_name"]; $_SESSION["grade_image"] = $extra["grade_image"];
|
||||
$user_role = $u_data['role'] ?? 'user';
|
||||
|
||||
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;
|
||||
|
||||
$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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$view = isset($_GET['view']) ? $_GET['view'] : 'sector';
|
||||
@ -37,9 +62,38 @@ $factions_map = []; foreach($factions_db as $f) $factions_map[$f['id']] = $f;
|
||||
// Grid size: 6x6 = 36 slots per sector
|
||||
$grid_size = 36;
|
||||
|
||||
// Mock Resources
|
||||
$header_resources = $db->query("SELECT * FROM game_resources WHERE show_in_header = 1 ORDER BY CASE WHEN name = 'Crédits' THEN 1 WHEN name = 'Materials' THEN 2 WHEN name = 'Energie' THEN 3 WHEN name = 'Données' THEN 4 ELSE 5 END ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC);
|
||||
$resources = []; foreach($header_resources as $hr) { $resources[$hr["name"]] = ["val" => "0", "prod" => "", "icon" => $hr["icon"] ?: "fa-gem", "image" => $hr["image_url"]]; }
|
||||
// Dynamic Resources
|
||||
$resources = [];
|
||||
if (isset($_SESSION['user_id'])) {
|
||||
$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 = ?
|
||||
WHERE gr.show_in_header = 1
|
||||
ORDER BY CASE
|
||||
WHEN gr.name = 'Crédits' THEN 1
|
||||
WHEN gr.name = 'Materials' THEN 2
|
||||
WHEN gr.name = 'Energie' THEN 3
|
||||
WHEN gr.name = 'Données' THEN 4
|
||||
ELSE 5
|
||||
END ASC, gr.name ASC
|
||||
");
|
||||
$stmt->execute([$_SESSION['user_id']]);
|
||||
$header_resources = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach($header_resources as $hr) {
|
||||
$resources[$hr["name"]] = [
|
||||
"val" => (string)$hr["amount"],
|
||||
"prod" => "",
|
||||
"icon" => $hr["icon"] ?: "fa-gem",
|
||||
"image" => $hr["image_url"]
|
||||
];
|
||||
}
|
||||
} else {
|
||||
$header_resources = $db->query("SELECT * FROM game_resources WHERE show_in_header = 1 ORDER BY CASE WHEN name = 'Crédits' THEN 1 WHEN name = 'Materials' THEN 2 WHEN name = 'Energie' THEN 3 WHEN name = 'Données' THEN 4 ELSE 5 END ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach($header_resources as $hr) {
|
||||
$resources[$hr["name"]] = ["val" => "0", "prod" => "", "icon" => $hr["icon"] ?: "fa-gem", "image" => $hr["image_url"]];
|
||||
}
|
||||
}
|
||||
|
||||
if ($view === 'sector') {
|
||||
$stmt = $db->prepare("SELECT * FROM planets WHERE galaxy_id = ? AND sector_id = ? AND slot BETWEEN 1 AND ?");
|
||||
@ -941,15 +995,16 @@ function getStatusColor($status, $statuses_map) {
|
||||
<h2>Profil Public</h2>
|
||||
<button class="modal-close" onclick="document.getElementById('profileModal').style.display='none'">×</button>
|
||||
</div>
|
||||
<div class="modal-body" style="text-align: center;">
|
||||
<div style="font-size: 24px; margin-bottom: 20px; color: #fff;">
|
||||
<?php echo htmlspecialchars($_SESSION["grade_name"] ?? "N/A"); ?> <?php echo htmlspecialchars($_SESSION["display_name"] ?? $_SESSION["username"]); ?>
|
||||
<div class="modal-body" style="text-align: center; padding-top: 40px; padding-bottom: 40px;">
|
||||
<div style="display: flex; align-items: center; justify-content: center; gap: 15px; margin-bottom: 10px;">
|
||||
<img src="<?php echo htmlspecialchars($_SESSION["grade_image"] ?? "assets/images/placeholder_grade.png"); ?>" style="width: 60px; height: 60px; object-fit: contain;">
|
||||
<span style="font-size: 28px; font-weight: bold; color: #fff;">
|
||||
<?php echo htmlspecialchars($_SESSION["grade_name"] ?? "Recrue"); ?>
|
||||
<?php echo htmlspecialchars($_SESSION["display_name"] ?? $_SESSION["username"]); ?>
|
||||
</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;">
|
||||
<img src="<?php echo htmlspecialchars($_SESSION["grade_image"] ?? "assets/images/placeholder_grade.png"); ?>" style="width:100px; height:100px;">
|
||||
</div>
|
||||
<div class="stat-card" style="text-align: center; font-size: 18px; color: #88c0d0;">
|
||||
Niveau <?php echo htmlspecialchars($_SESSION["level"] ?? "N/A"); ?>
|
||||
<div style="font-size: 16px; color: #88c0d0; opacity: 0.8;">
|
||||
Niveau <?php echo htmlspecialchars($_SESSION["level"] ?? "1"); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
33
patch_resources_v2.php
Normal file
33
patch_resources_v2.php
Normal file
@ -0,0 +1,33 @@
|
||||
// Dynamic Resources
|
||||
$resources = [];
|
||||
if (isset($_SESSION['user_id'])) {
|
||||
$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 = ?
|
||||
WHERE gr.show_in_header = 1
|
||||
ORDER BY CASE
|
||||
WHEN gr.name = 'Crédits' THEN 1
|
||||
WHEN gr.name = 'Materials' THEN 2
|
||||
WHEN gr.name = 'Energie' THEN 3
|
||||
WHEN gr.name = 'Données' THEN 4
|
||||
ELSE 5
|
||||
END ASC, gr.name ASC
|
||||
");
|
||||
$stmt->execute([$_SESSION['user_id']]);
|
||||
$header_resources = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach($header_resources as $hr) {
|
||||
$resources[$hr["name"]] = [
|
||||
"val" => (string)$hr["amount"],
|
||||
"prod" => "",
|
||||
"icon" => $hr["icon"] ?: "fa-gem",
|
||||
"image" => $hr["image_url"]
|
||||
];
|
||||
}
|
||||
} else {
|
||||
// Fallback for guests (all 0)
|
||||
$header_resources = $db->query("SELECT * FROM game_resources WHERE show_in_header = 1 ORDER BY CASE WHEN name = 'Crédits' THEN 1 WHEN name = 'Materials' THEN 2 WHEN name = 'Energie' THEN 3 WHEN name = 'Données' THEN 4 ELSE 5 END ASC, name ASC")->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach($header_resources as $hr) {
|
||||
$resources[$hr["name"]] = ["val" => "0", "prod" => "", "icon" => $hr["icon"] ?: "fa-gem", "image" => $hr["image_url"]];
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user