{# Historique des actions (admin only). Paramètres : - logs : ActivityLog[] - moreHref : string|null Lien vers le journal complet, posé à DROITE du titre - moreLabel : string Libellé de ce lien (défaut : « Voir tout le journal ») #} {% set moreHref = moreHref ?? null %} {% set moreLabel = moreLabel ?? 'Voir tout le journal' %} {% if logs is defined %}
{% include '_atoms/icon/icon.html.twig' with { name: 'clock', size: 'md', color: 'gray' } only %}

Historique des actions

{# Sous la liste, ce lien se lisait comme la suite des entrées ; à droite du titre, il appartient à la section et se trouve sans la parcourir. #} {% if moreHref %} {{ moreLabel }} {% include '_atoms/icon/icon.html.twig' with { name: 'arrow-right', size: 'xs' } only %} {% endif %}
{% if logs is empty %}
Aucune activité enregistrée.
{% else %}
{% for log in logs %} {% set ctx = log.context ?? {} %} {# Le nom français de l'action et la couleur de son badge viennent de ActivityLogLabels : les deux tables vivaient ici, ne couvraient que dix actions, et tout le domaine commercial s'affichait en code brut. #} {% set badgeVariant = activity_variant(log.action) %} {% set actionLabel = activity_label(log.action) %} {# ── Phrase lisible selon l'action ── #} {% if log.action == 'viewed' %} {% set message %}a consulté{% endset %} {% elseif log.action == 'created' %} {% set message %}a créé{% if log.entityLabel %} « {{ log.entityLabel }} »{% endif %}{% endset %} {% elseif log.action == 'updated' %} {% set message %}a modifié{% if ctx is not empty and ctx.modifications is not defined and ctx.details is not defined %} — {% for field, change in ctx %}{{ field }} : {{ change }}{% if not loop.last %} · {% endif %}{% endfor %}{% elseif log.notes %} — {{ log.notes }}{% endif %}{% endset %} {% elseif log.action == 'deleted' %} {% set message %}a supprimé{% if log.entityLabel %} « {{ log.entityLabel }} »{% endif %}{% endset %} {% elseif log.action == 'activated' %} {% set message %}a activé le contrat {% if ctx.tokens_added is defined %} — {{ ctx.tokens_added|number_format(0, ',', '\u00A0') }} tokens crédités {% endif %} {% if ctx.users_renewed is defined and ctx.users_renewed > 0 %} , {{ ctx.users_renewed }} utilisateur{{ ctx.users_renewed > 1 ? 's' : '' }} renouvelé{{ ctx.users_renewed > 1 ? 's' : '' }} {% endif %} {% endset %} {% elseif log.action == 'deactivated' %} {% set message %}a désactivé le contrat {% if ctx.company_deactivated is defined and ctx.company_deactivated %} — entreprise désactivée {% if ctx.users_deactivated is defined and ctx.users_deactivated > 0 %} , {{ ctx.users_deactivated }} utilisateur{{ ctx.users_deactivated > 1 ? 's' : '' }} désactivé{{ ctx.users_deactivated > 1 ? 's' : '' }} {% endif %} {% endif %} {% endset %} {% elseif log.action == 'renewed_tokens' %} {% set message %}renouvellement automatique {% if ctx.tokens_added is defined %} — {{ ctx.tokens_added|number_format(0, ',', '\u00A0') }} tokens crédités {% endif %} {% if ctx.periods_renewed is defined and ctx.periods_renewed > 1 %} ({{ ctx.periods_renewed }} périodes) {% endif %} {% endset %} {% elseif log.action == 'reset_password' %} {% set message %}a réinitialisé le mot de passe{% if log.notes %} — {{ log.notes }}{% endif %}{% endset %} {% elseif log.action == 'add_tokens' %} {% set message %}a ajouté {% if ctx.tokens_added is defined %} {{ ctx.tokens_added|number_format(0, ',', '\u00A0') }} tokens {% else %} des tokens {% endif %} {% if log.notes %} — {{ log.notes }}{% endif %} {% endset %} {% elseif log.action == 'set_tokens' %} {% set message %}a défini le solde à {% if ctx.tokens_set is defined %} {{ ctx.tokens_set|number_format(0, ',', '\u00A0') }} tokens {% else %} un nouveau solde {% endif %} {% if log.notes %} — {{ log.notes }}{% endif %} {% endset %} {% else %} {% set message %}{% if log.notes %} — {{ log.notes }}{% endif %}{% endset %} {% endif %}
{# Badge action #}
{% include '_atoms/badge/badge.html.twig' with { label: actionLabel, variant: badgeVariant } only %}
{# Phrase lisible #}
{{ log.actorLabel }} {{ message|raw }}
{# Date #} {{ log.createdAt|date('d/m/Y H:i') }}
{# ── Ce qui a changé, et ce qu'il faut savoir en plus ── Rendu pour toute action qui en porte, sans que chaque branche ci-dessus ait à s'en occuper. Le contexte est déjà écrit en français par CommercialActivityLogger : rien à traduire ici. #} {% if ctx.modifications is defined or ctx.details is defined %}
{% for modif in ctx.modifications ?? [] %} {{ modif.champ }} {{ modif.avant }} {{ modif.apres }} {% endfor %} {% for libelle, valeur in ctx.details ?? {} %} {{ libelle }} {{ valeur }} {% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}