322 lines
17 KiB
PHP
Raw Permalink Normal View History

<?php
/**
* Page principale d'administration - MH Wilds - Partage de Quêtes à Couronnes
*/
// Démarrer la session
session_start();
// Définir une constante pour empêcher l'accès direct aux includes
define('SECURE_ACCESS', true);
// Inclure les fichiers nécessaires
require_once '../includes/config.php';
require_once '../includes/database.php';
require_once '../includes/functions.php';
// Vérifier l'authentification
require_login();
// Titre de la page
$page_title = 'Administration - MH Wilds Couronnes';
$page_description = 'Interface d\'administration pour le site de partage de quêtes à couronnes.';
$header_title = 'Administration';
$is_admin_page = true;
// Scripts JS supplémentaires
$extra_js = <<<EOT
<script src="../assets/js/admin.js"></script>
EOT;
// Récupérer les données
$monsters = get_all_monsters();
$announcements = get_all_announcements(false); // Récupérer toutes les annonces, y compris inactives
$statistics = get_site_statistics();
// Inclure l'en-tête
include '../includes/header.php';
?>
<div class="row">
<div class="col-md-3">
<div class="list-group">
<a href="#announcementsSection" class="list-group-item list-group-item-action active" id="announcementsTab">Annonces</a>
<a href="#monstersSection" class="list-group-item list-group-item-action" id="monstersTab">Monstres</a>
<a href="#maintenanceSection" class="list-group-item list-group-item-action" id="maintenanceTab">Maintenance</a>
<a href="#passwordSection" class="list-group-item list-group-item-action" id="passwordTab">Mot de passe</a>
</div>
</div>
<div class="col-md-9">
<!-- Section des annonces -->
<div id="announcementsSection" class="admin-section">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h2 class="h4 mb-0">Gestion des annonces</h2>
<button class="btn btn-primary btn-sm" id="addAnnouncementBtn">Ajouter une annonce</button>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Texte</th>
<th>Statut</th>
<th>Date</th>
<th>Actions</th>
</tr>
</thead>
<tbody id="announcementsList">
<?php if (empty($announcements)): ?>
<tr>
<td colspan="4" class="text-center">Aucune annonce pour le moment.</td>
</tr>
<?php else: ?>
<?php foreach ($announcements as $announcement): ?>
<tr>
<td><?php echo secure_output($announcement['text']); ?></td>
<td>
<?php if ($announcement['active']): ?>
<span class="badge bg-success">Active</span>
<?php else: ?>
<span class="badge bg-secondary">Inactive</span>
<?php endif; ?>
</td>
<td><?php echo date('d/m/Y', strtotime($announcement['created_at'])); ?></td>
<td>
<div class="btn-group btn-group-sm">
<button class="btn btn-outline-primary edit-announcement-btn" data-id="<?php echo $announcement['id']; ?>">
Éditer
</button>
<button class="btn btn-outline-danger delete-announcement-btn" data-id="<?php echo $announcement['id']; ?>">
Supprimer
</button>
</div>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Section des monstres -->
<div id="monstersSection" class="admin-section d-none">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h2 class="h4 mb-0">Gestion des monstres</h2>
<button class="btn btn-primary btn-sm" id="addMonsterBtn">Ajouter un monstre</button>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Image</th>
<th>Nom</th>
<th>Quêtes</th>
<th>Actions</th>
</tr>
</thead>
<tbody id="monstersList">
<?php if (empty($monsters)): ?>
<tr>
<td colspan="4" class="text-center">Aucun monstre pour le moment.</td>
</tr>
<?php else: ?>
<?php foreach ($monsters as $monster): ?>
<?php $quest_count = count_quests_for_monster($monster['id']); ?>
<tr>
<td>
<img src="../<?php echo secure_output($monster['image']); ?>" alt="<?php echo secure_output($monster['name']); ?>" class="img-thumbnail" width="80">
</td>
<td><?php echo secure_output($monster['name']); ?></td>
<td><?php echo $quest_count; ?></td>
<td>
<div class="btn-group btn-group-sm">
<button class="btn btn-outline-primary edit-monster-btn" data-id="<?php echo $monster['id']; ?>">
Éditer
</button>
<button class="btn btn-outline-danger delete-monster-btn" data-id="<?php echo $monster['id']; ?>">
Supprimer
</button>
</div>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Section de maintenance -->
<div id="maintenanceSection" class="admin-section d-none">
<div class="card">
<div class="card-header">
<h2 class="h4 mb-0">Maintenance du site</h2>
</div>
<div class="card-body">
<div class="mb-4">
<h3 class="h5">Nettoyer les quêtes anciennes</h3>
<p>Cette action supprimera toutes les quêtes datant de plus de 15 jours.</p>
<form id="cleanQuestsForm">
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
<button type="button" class="btn btn-warning" id="cleanOldQuestsBtn">Nettoyer les quêtes anciennes</button>
</form>
<div id="cleanResult" class="alert alert-success mt-3 d-none"></div>
</div>
<hr>
<div>
<h3 class="h5">Statistiques du site</h3>
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center">
Nombre total de monstres
<span class="badge bg-primary rounded-pill" id="totalMonstersCount"><?php echo $statistics['total_monsters']; ?></span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
Nombre total de quêtes
<span class="badge bg-primary rounded-pill" id="totalQuestsCount"><?php echo $statistics['total_quests']; ?></span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
Quêtes avec petite couronne
<span class="badge bg-warning rounded-pill" id="smallCrownQuestsCount"><?php echo $statistics['small_crown_quests']; ?></span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
Quêtes avec grande couronne
<span class="badge bg-secondary rounded-pill" id="largeCrownQuestsCount"><?php echo $statistics['large_crown_quests']; ?></span>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Modale d'ajout/édition d'annonce -->
<div class="modal fade" id="announcementModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="announcementModalTitle">Ajouter une annonce</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button>
</div>
<div class="modal-body">
<form id="announcementForm">
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
<input type="hidden" id="announcementId" name="announcementId">
<div class="mb-3">
<label for="announcementText" class="form-label">Texte de l'annonce</label>
<textarea class="form-control" id="announcementText" name="announcementText" rows="3" required></textarea>
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="announcementActive" name="announcementActive" checked>
<label class="form-check-label" for="announcementActive">
Activer l'annonce
</label>
</div>
<div class="d-grid">
<button type="submit" class="btn btn-primary" id="saveAnnouncementBtn">Enregistrer</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Modale d'ajout/édition de monstre -->
<div class="modal fade" id="monsterModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="monsterModalTitle">Ajouter un monstre</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button>
</div>
<div class="modal-body">
<form id="monsterForm">
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
<input type="hidden" id="monsterId" name="monsterId">
<div class="mb-3">
<label for="monsterName" class="form-label">Nom du monstre</label>
<input type="text" class="form-control" id="monsterName" name="monsterName" required>
</div>
<div class="mb-3">
<label for="monsterImage" class="form-label">Chemin de l'image</label>
<div class="input-group">
<span class="input-group-text">assets/img/</span>
<input type="text" class="form-control" id="monsterImage" name="monsterImage" required placeholder="Nom_du_monstre.jpg">
</div>
<div class="form-text">Format recommandé: jpg, 300x200px. Exemple: Rathalos.jpg</div>
</div>
<div class="d-grid">
<button type="submit" class="btn btn-primary" id="saveMonsterBtn">Enregistrer</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Modale de confirmation de suppression -->
<div class="modal fade" id="confirmDeleteModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="confirmDeleteTitle">Confirmer la suppression</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button>
</div>
<div class="modal-body">
<p id="confirmDeleteMessage">Êtes-vous sûr de vouloir supprimer cet élément ?</p>
<form id="confirmDeleteForm">
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
<input type="hidden" name="deletionType">
<input type="hidden" name="deletionId">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="button" class="btn btn-danger" id="confirmDeleteBtn">Supprimer</button>
</div>
</div>
</div>
</div>
<!-- Section de changement de mot de passe -->
<div id="passwordSection" class="admin-section d-none">
<div class="card">
<div class="card-header">
<h2 class="h4 mb-0">Changer le mot de passe</h2>
</div>
<div class="card-body">
<form id="changePasswordForm">
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
<div class="mb-3">
<label for="currentPassword" class="form-label">Mot de passe actuel</label>
<input type="password" class="form-control" id="currentPassword" name="currentPassword" required>
</div>
<div class="mb-3">
<label for="newPassword" class="form-label">Nouveau mot de passe</label>
<input type="password" class="form-control" id="newPassword" name="newPassword" required minlength="8">
<div class="form-text">Le mot de passe doit contenir au moins 8 caractères.</div>
</div>
<div class="mb-3">
<label for="confirmPassword" class="form-label">Confirmer le nouveau mot de passe</label>
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" required>
</div>
<div class="d-grid">
<button type="submit" class="btn btn-primary">Changer le mot de passe</button>
</div>
</form>
<div id="passwordResult" class="alert mt-3 d-none"></div>
</div>
</div>
</div>
<?php
// Inclure le pied de page
include '../includes/footer.php';