feat: bouton purge des logs pour ROLE_ROOT

src/Controller/Admin/LogsController.php:
- Nouvelle route POST /admin/logs/purge: supprime tous les AppLog
  via requete DQL DELETE, accessible uniquement ROLE_ROOT
  (le controller entier est deja protege par ROLE_ROOT)

templates/admin/logs/index.html.twig:
- Bouton "Supprimer tous les logs" en haut a droite, rouge,
  visible uniquement pour ROLE_ROOT
- Confirmation data-confirm avant suppression

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-04-02 23:15:54 +02:00
parent d3e76f00de
commit e093dae3ef
2 changed files with 22 additions and 1 deletions

View File

@@ -13,6 +13,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Doctrine\ORM\EntityManagerInterface;
use Twig\Environment;
#[Route('/admin/logs', name: 'app_admin_logs')]
@@ -46,6 +47,19 @@ class LogsController extends AbstractController
]);
}
#[Route('/purge', name: '_purge', methods: ['POST'])]
public function purge(EntityManagerInterface $em): Response
{
$deleted = $em->createQueryBuilder()
->delete('App\Entity\AppLog', 'l')
->getQuery()
->execute();
$this->addFlash('success', $deleted.' log(s) supprime(s).');
return $this->redirectToRoute('app_admin_logs');
}
#[Route('/{id}/pdf', name: '_pdf', methods: ['GET'])]
public function pdf(
int $id,

View File

@@ -4,7 +4,14 @@
{% block admin_content %}
<div class="page-container">
<h1 class="text-2xl font-bold heading-page mb-8">Logs d'activite</h1>
<div class="flex items-center justify-between mb-8">
<h1 class="text-2xl font-bold heading-page">Logs d'activite</h1>
{% if is_granted('ROLE_ROOT') %}
<form method="post" action="{{ path('app_admin_logs_purge') }}" data-confirm="Supprimer tous les logs ? Cette action est irreversible.">
<button type="submit" class="btn-glass px-4 py-2 text-red-600 text-xs font-bold uppercase tracking-wider" style="border-color: rgba(220,38,38,0.3);">Supprimer tous les logs</button>
</form>
{% endif %}
</div>
<div class="glass overflow-hidden">
<table class="w-full text-xs">