Autosave: 20260228-184623
This commit is contained in:
parent
32c9083556
commit
0c69342648
142
admin.php
142
admin.php
@ -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>
|
||||
Loading…
x
Reference in New Issue
Block a user