src/Entity/AppLog.php:
- createdAt initialise avec date('Y-m-d H:i:s') au lieu de
new DateTimeImmutable() pour tronquer les microsecondes
(PostgreSQL arrondit les microsecondes differemment de PHP,
ce qui causait des HMAC invalides a la relecture)
- generateHmac(): format Y-m-d\TH:i:s sans microsecondes
templates/admin/logs/pdf.html.twig (reecrit):
- Meme style que les attestations RGPD (templates/pdf/rgpd_*.html.twig):
banniere gold avec logo, doc-type badge indigo, titre italic uppercase,
info-grid avec cellules bordure indigo, tableaux data avec header dark,
bloc HMAC avec encadre vert/rouge, footer SARL SITECONSEIL
- Logo passe au template via base64
src/Controller/Admin/LogsController.php:
- pdf(): injection de kernel.project_dir, chargement du logo en base64
et passage au template
src/Command/PurgeEmailTrackingCommand.php:
- Ajout de la purge des AppLog de plus de 90 jours (meme seuil
que EmailTracking), affiche le nombre de logs supprimes
templates/components/pagination/glass.html.twig (nouveau):
- Template de pagination KnpPaginator style glassmorphism:
boutons glass avec hover, page active en glass-gold,
fleches precedent/suivant
config/packages/knp_paginator.yaml (nouveau):
- Configuration KnpPaginator pour utiliser le template glass
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
24 lines
1.2 KiB
Twig
24 lines
1.2 KiB
Twig
{% if pageCount > 1 %}
|
|
<nav class="flex items-center justify-center gap-1">
|
|
{% if previous is defined and previous %}
|
|
<a href="{{ path(route, query|merge({(pageParameterName): previous})) }}" class="glass px-3 py-2 text-xs font-bold text-gray-600 hover:bg-white/80 transition-all" rel="prev">«</a>
|
|
{% else %}
|
|
<span class="glass px-3 py-2 text-xs font-bold text-gray-300 cursor-default">«</span>
|
|
{% endif %}
|
|
|
|
{% for page in pagesInRange %}
|
|
{% if page != current %}
|
|
<a href="{{ path(route, query|merge({(pageParameterName): page})) }}" class="glass px-3 py-2 text-xs font-bold text-gray-600 hover:bg-white/80 transition-all">{{ page }}</a>
|
|
{% else %}
|
|
<span class="glass-gold px-3 py-2 text-xs font-bold text-gray-900">{{ page }}</span>
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
{% if next is defined and next %}
|
|
<a href="{{ path(route, query|merge({(pageParameterName): next})) }}" class="glass px-3 py-2 text-xs font-bold text-gray-600 hover:bg-white/80 transition-all" rel="next">»</a>
|
|
{% else %}
|
|
<span class="glass px-3 py-2 text-xs font-bold text-gray-300 cursor-default">»</span>
|
|
{% endif %}
|
|
</nav>
|
|
{% endif %}
|