{% extends "layout.twig" %} {% set actionClasses = { 'CREATE': 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200', 'UPDATE': 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200', 'DELETE': 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200', 'LOGIN': 'bg-slate-100 text-slate-700 dark:bg-slate-700 dark:text-slate-200', 'LOGOUT': 'bg-slate-100 text-slate-700 dark:bg-slate-700 dark:text-slate-200', 'LOGIN_FAILED': 'bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-200', 'BOOTSTRAP_ADMIN': 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200', } %} {% set defaultActionClass = 'bg-slate-100 text-slate-700 dark:bg-slate-700 dark:text-slate-200' %} {% set anyFilter = false %} {% for v in filters %}{% if v != '' and v is not null %}{% set anyFilter = true %}{% endif %}{% endfor %} {% block content %}

Audit log

{{ total }} matching row{{ total == 1 ? '' : 's' }} · page {{ page }} / {{ pages }} · {{ pageSize }} per page

{% if dateErrors is not empty %}
Invalid date filter ignored. Use the YYYY-MM-DD format (e.g. 2026-01-31).
{% endif %}
{% if anyFilter %} Clear {% endif %}
{% if rows is empty %}
No audit rows match.
{% else %} {% for r in rows %} {% endfor %}
When (UTC) User Action Entity Diff Origin
{{ r.occurred_at }} {% if r.user_email is not null and r.user_email != '' %}{{ r.user_email }}{% else %}{% endif %} {{ r.action }} {{ r.entity_type }} {% if r.entity_id is not null %} / {{ r.entity_id }} {% endif %} {% set b = pretty_json(r.before_json|default(null)) %} {% set a = pretty_json(r.after_json|default(null)) %} {% if b == '' and a == '' %} {% else %}
{% if b != '' and a != '' %}before / after{% elseif b != '' %}before only{% else %}after only{% endif %} {% if b != '' %}
before
{{ b }}
{% endif %} {% if a != '' %}
after
{{ a }}
{% endif %}
{% endif %}
{{ r.ip_address|default('') }} {% if r.user_agent is defined and r.user_agent %} (UA) {% endif %}
{% endif %}
{% if pages > 1 %} {% endif %}
{% endblock %}