diff --git a/config/packages/knp_paginator.yaml b/config/packages/knp_paginator.yaml new file mode 100644 index 0000000..57d75e6 --- /dev/null +++ b/config/packages/knp_paginator.yaml @@ -0,0 +1,3 @@ +knp_paginator: + template: + pagination: 'components/pagination/glass.html.twig' diff --git a/src/Command/PurgeEmailTrackingCommand.php b/src/Command/PurgeEmailTrackingCommand.php index 67bb3b8..b76ebda 100644 --- a/src/Command/PurgeEmailTrackingCommand.php +++ b/src/Command/PurgeEmailTrackingCommand.php @@ -13,7 +13,7 @@ use Symfony\Component\Console\Style\SymfonyStyle; #[AsCommand( name: 'app:email-tracking:purge', - description: 'Supprime les enregistrements EmailTracking de plus de 90 jours', + description: 'Supprime les EmailTracking et AppLog de plus de 90 jours', )] class PurgeEmailTrackingCommand extends Command { @@ -45,7 +45,18 @@ class PurgeEmailTrackingCommand extends Command $deleted = $qb->getQuery()->execute(); - $io->success("$deleted enregistrement(s) supprime(s)."); + $io->text("EmailTracking : $deleted enregistrement(s) supprime(s)."); + + $deletedLogs = $this->em->createQueryBuilder() + ->delete('App\Entity\AppLog', 'l') + ->where('l.createdAt < :threshold') + ->setParameter('threshold', $threshold) + ->getQuery() + ->execute(); + + $io->text("AppLog : $deletedLogs enregistrement(s) supprime(s)."); + + $io->success(($deleted + $deletedLogs).' enregistrement(s) supprime(s) au total.'); return Command::SUCCESS; } diff --git a/src/Controller/Admin/LogsController.php b/src/Controller/Admin/LogsController.php index 505808f..bb0c1b2 100644 --- a/src/Controller/Admin/LogsController.php +++ b/src/Controller/Admin/LogsController.php @@ -6,6 +6,7 @@ use App\Entity\AppLog; use App\Repository\AppLogRepository; use App\Service\AppLoggerService; use Dompdf\Dompdf; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Knp\Component\Pager\PaginatorInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -51,6 +52,7 @@ class LogsController extends AbstractController AppLogRepository $repository, AppLoggerService $loggerService, Environment $twig, + #[Autowire('%kernel.project_dir%')] string $projectDir, ): Response { $log = $repository->find($id); @@ -60,9 +62,13 @@ class LogsController extends AbstractController $hmacValid = $loggerService->verifyLog($log); + $logoPath = $projectDir.'/public/logo_facture.png'; + $logo = file_exists($logoPath) ? 'data:image/png;base64,'.base64_encode((string) file_get_contents($logoPath)) : ''; + $html = $twig->render('admin/logs/pdf.html.twig', [ 'log' => $log, 'hmacValid' => $hmacValid, + 'logo' => $logo, ]); $dompdf = new Dompdf(); diff --git a/src/Entity/AppLog.php b/src/Entity/AppLog.php index 07a086e..d454c26 100644 --- a/src/Entity/AppLog.php +++ b/src/Entity/AppLog.php @@ -47,7 +47,7 @@ class AppLog $this->action = $action; $this->user = $user; $this->ip = $ip; - $this->createdAt = new \DateTimeImmutable(); + $this->createdAt = new \DateTimeImmutable(date('Y-m-d H:i:s')); $this->hmac = $this->generateHmac($hmacSecret); } @@ -110,7 +110,7 @@ class AppLog $this->action, $this->ip ?? '', null !== $this->user ? (string) $this->user->getId() : '', - $this->createdAt->format('Y-m-d\TH:i:s.u'), + $this->createdAt->format('Y-m-d\TH:i:s'), ]); return hash_hmac('sha256', $payload, $secret); diff --git a/templates/admin/logs/pdf.html.twig b/templates/admin/logs/pdf.html.twig index 3119695..b387d80 100644 --- a/templates/admin/logs/pdf.html.twig +++ b/templates/admin/logs/pdf.html.twig @@ -4,63 +4,103 @@
CRM SITECONSEIL - Genere le {{ "now"|date("d/m/Y H:i:s") }}
- -| Informations du log | |
|---|---|
| ID | {{ log.id }} |
| Date | {{ log.createdAt|date('d/m/Y H:i:s') }} |
| Utilisateur | -- {% if log.user %} - {{ log.user.fullName }} ({{ log.user.email }}) - {% else %} - Non connecte - {% endif %} - | -
| Methode HTTP | {{ log.method }} |
| URL | {{ log.url }} |
| Route | {{ log.route }} |
| Action | {{ log.action }} |
| Adresse IP | {{ log.ip }} |
- {% if hmacValid %} - ✓ INTEGRITE VERIFIEE - DONNEES CONFORMES - {% else %} - ✗ INTEGRITE COMPROMISE - DONNEES ALTEREES - {% endif %} -
-Signature HMAC SHA-256 :
-{{ log.hmac }}
+ +