Autosave: 20260228-184623

This commit is contained in:
Flatlogic Bot 2026-02-28 18:46:23 +00:00
parent 32c9083556
commit 0c69342648

142
admin.php
View File

@ -297,6 +297,38 @@ if (isset($_GET['delete_faction'])) {
exit;
}
// Handle Levels CRUD
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["action"]) && $_POST["action"] === "upsert_level") {
$id = (int)$_POST["id"];
$name = $_POST["name"];
$slug = $_POST["slug"];
$resource_id = (int)$_POST["resource_id"];
$required_quantity = (int)$_POST["required_quantity"];
if ($required_quantity <= 0) {
header("Location: admin.php?tab=levels&error=invalid_quantity");
exit;
}
if ($id > 0) {
$stmt = $db->prepare("UPDATE levels SET name = ?, slug = ?, resource_id = ?, required_quantity = ? WHERE id = ?");
$stmt->execute([$name, $slug, $resource_id, $required_quantity, $id]);
} else {
$stmt = $db->prepare("INSERT INTO levels (name, slug, resource_id, required_quantity) VALUES (?, ?, ?, ?)");
$stmt->execute([$name, $slug, $resource_id, $required_quantity]);
}
header("Location: admin.php?tab=levels&success=1");
exit;
}
if (isset($_GET["delete_level"])) {
$id = (int)$_GET["delete_level"];
$db->prepare("DELETE FROM levels WHERE id = ?")->execute([$id]);
header("Location: admin.php?tab=levels&success=1");
exit;
}
// Handle Resource CRUD
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upsert_resource') {
$id = (int)$_POST['id'];
@ -437,6 +469,7 @@ $factions_list = [];
$resources_list = [];
$lootboxes_list = [];
$project_logs_list = [];
$levels_list = [];
if ($tab === 'users') {
$users_list = $db->query("SELECT id, username, email, role FROM users ORDER BY username ASC")->fetchAll();
@ -467,6 +500,9 @@ if ($tab === 'users') {
$f['alliance_ids'] = $stmt->fetchAll(PDO::FETCH_COLUMN);
}
unset($f);
} elseif ($tab === 'levels') {
$levels_list = $db->query("SELECT l.*, r.name as resource_name FROM levels l JOIN game_resources r ON l.resource_id = r.id ORDER BY l.required_quantity ASC")->fetchAll();
$resources_list = $db->query("SELECT id, name FROM game_resources ORDER BY name ASC")->fetchAll();
} elseif ($tab === 'resources') {
$resources_list = $db->query("SELECT * FROM game_resources ORDER BY name ASC")->fetchAll();
} elseif ($tab === 'project_logs') {
@ -583,6 +619,9 @@ if ($tab === 'users') {
</header>
<div class="container">
<?php if (isset($_GET['error']) && $_GET['error'] === 'invalid_quantity'): ?>
<div class="success-msg" style="background: #bf616a; color: #fff;"><i class="fa-solid fa-triangle-exclamation"></i> Erreur : La quantité doit être un nombre strictement positif.</div>
<?php endif; ?>
<?php if (isset($_GET['success'])): ?>
<div class="success-msg"><i class="fa-solid fa-check-circle"></i> Opération effectuée avec succès.</div>
<?php endif; ?>
@ -643,9 +682,70 @@ if ($tab === 'users') {
<?php elseif ($tab === 'levels'): ?>
<h3 style="color: #88c0d0;">Gestion des Niveaux</h3>
<div class="form-card">
<p><i class="fa-solid fa-info-circle"></i> À configurer</p>
<h4>Ajouter / Modifier un Niveau</h4>
<form method="POST" id="levelForm">
<input type="hidden" name="action" value="upsert_level">
<input type="hidden" name="id" id="level_id" value="0">
<div style="display: flex; gap: 20px;">
<div class="form-group" style="flex: 2;">
<label>Nom du niveau (ex : Niveau 1)</label>
<input type="text" name="name" id="level_name" required placeholder="Niveau 1">
</div>
<div class="form-group" style="flex: 1;">
<label>Slug (identifiant technique unique)</label>
<input type="text" name="slug" id="level_slug" required placeholder="niveau_1">
</div>
</div>
<div style="display: flex; gap: 20px;">
<div class="form-group" style="flex: 1;">
<label>Ressource requise</label>
<select name="resource_id" id="level_resource_id" required>
<?php foreach ($resources_list as $res): ?>
<option value="<?php echo $res['id']; ?>" <?php echo (stripos($res['name'], 'Expérience') !== false || stripos($res['name'], 'Experience') !== false) ? 'selected' : ''; ?>>
<?php echo htmlspecialchars($res['name']); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group" style="flex: 1;">
<label>Quantité requise (nombre strictement positif)</label>
<input type="number" name="required_quantity" id="level_required_quantity" required min="1" placeholder="100">
</div>
</div>
<button type="submit" class="btn btn-add">ENREGISTRER LE NIVEAU</button>
<button type="button" class="btn" style="background: #4c566a; color: #fff;" onclick="resetLevelForm()">ANNULER</button>
</form>
</div>
<table>
<thead>
<tr>
<th>Nom</th>
<th>Slug</th>
<th>Ressource requise</th>
<th>Quantité requise</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php if (empty($levels_list)): ?>
<tr><td colspan="5" style="text-align: center; color: #8c92a3;">Aucun niveau configuré.</td></tr>
<?php else: ?>
<?php foreach ($levels_list as $lvl): ?>
<tr>
<td><strong><?php echo htmlspecialchars($lvl['name']); ?></strong></td>
<td><code><?php echo htmlspecialchars($lvl['slug']); ?></code></td>
<td><?php echo htmlspecialchars($lvl['resource_name']); ?></td>
<td><?php echo number_format($lvl['required_quantity'], 0, ',', ' '); ?></td>
<td>
<button class="btn btn-edit" onclick='editLevel(<?php echo json_encode($lvl, JSON_HEX_APOS); ?>)'>Editer</button>
<a href="?tab=levels&delete_level=<?php echo $lvl['id']; ?>" class="btn btn-del" onclick="return confirm('Supprimer ce niveau ?')">Suppr</a>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
<?php elseif ($tab === 'ranks'): ?>
<h3 style="color: #88c0d0;">Gestion des Grades</h3>
<div class="form-card">
@ -1402,6 +1502,26 @@ if ($tab === 'users') {
document.querySelectorAll('.ms-dropdown').forEach(d => d.style.display = 'none');
}
});
function editLevel(data) {
document.getElementById("level_id").value = data.id;
document.getElementById("level_name").value = data.name;
document.getElementById("level_slug").value = data.slug;
document.getElementById("level_resource_id").value = data.resource_id;
document.getElementById("level_required_quantity").value = data.required_quantity;
window.scrollTo(0,0);
}
function resetLevelForm() {
document.getElementById("levelForm").reset();
document.getElementById("level_id").value = 0;
const select = document.getElementById("level_resource_id");
for (let i = 0; i < select.options.length; i++) {
if (select.options[i].text.toLowerCase().includes("expérience") || select.options[i].text.toLowerCase().includes("experience")) {
select.selectedIndex = i;
break;
}
}
}
</script>
<?php elseif ($tab === 'lootboxes'): ?>
@ -1802,6 +1922,26 @@ function editStatus(data) {
document.querySelectorAll('.ms-dropdown').forEach(d => d.style.display = 'none');
}
});
function editLevel(data) {
document.getElementById("level_id").value = data.id;
document.getElementById("level_name").value = data.name;
document.getElementById("level_slug").value = data.slug;
document.getElementById("level_resource_id").value = data.resource_id;
document.getElementById("level_required_quantity").value = data.required_quantity;
window.scrollTo(0,0);
}
function resetLevelForm() {
document.getElementById("levelForm").reset();
document.getElementById("level_id").value = 0;
const select = document.getElementById("level_resource_id");
for (let i = 0; i < select.options.length; i++) {
if (select.options[i].text.toLowerCase().includes("expérience") || select.options[i].text.toLowerCase().includes("experience")) {
select.selectedIndex = i;
break;
}
}
}
</script>
</body>
</html>