{% extends 'base.html.twig' %} {% set display_name = profile.displayName ?: profile.username %} {% set read_count = shelves.read ? shelves.read.itemsCount : 0 %} {% set reading_count = shelves.reading ? shelves.reading.itemsCount : 0 %} {% set want_count = shelves.want_to_read ? shelves.want_to_read.itemsCount : 0 %} {% set total_books = read_count + reading_count + want_count %} {% block title %}{{ display_name }} · @{{ profile.username }} · LivreComment{% endblock %} {% block body_class %}page-wide{% endblock %} {# Macro : menu burger d'actions (réutilisé soit dans le header own, soit dans la page-toolbar pour les autres profils). #} {% macro profile_burger(profile, display_name, is_own_profile, has_activity) %}
Statistiques {% if has_activity|default(false) %} Activité {% endif %} {% if is_own_profile %}
Modifier le profil Mes listes Paramètres {% if is_granted('ROLE_ADMIN') %}
Console Admin {% endif %}
{% endif %}
{% endmacro %} {# Override du header app sur son propre profil : layout Instagram-like avec @username au centre + burger à droite. Le logo global disparaît. #} {% block app_header %} {% if is_own_profile %} {% else %} {{ parent() }} {% endif %} {% endblock %} {% block body %} {# Toolbar visible UNIQUEMENT pour les profils d'autres users (back + burger). Pour son propre profil, le burger vit déjà dans le header custom. #} {% if not is_own_profile %}
{% include 'components/_back_button.html.twig' with { fallback: path('app_home') } only %} {{ _self.profile_burger(profile, display_name, is_own_profile, has_activity|default(false)) }}
{% endif %}
{% set avatar_url = user_avatar(profile) %} {% if avatar_url %} {% else %} {% endif %}

{{ display_name }}

{% if not is_own_profile %} {% include 'profile/_follow_button.html.twig' with { profile: profile, is_following: is_following } only %} {% endif %} {% if profile.bio %}

{{ profile.bio }}

{% endif %} {% if profile.pinnedQuote %}
{{ profile.pinnedQuote }}
{% endif %}
{% if favorites|length > 0 %}

Coups de cœur {{ favorites|length }} / 4

{% for work in favorites %} {% if work_cover_thumb(work) %} Couverture de {{ work.title }} {% else %} {% endif %} {% endfor %}
{% elseif is_own_profile %}

Coups de cœur

{% for i in 1..4 %} {% endfor %}

Choisis 4 livres qui te résument

{% endif %} {% if recent_activity|length > 0 %}

Activité récente

Tout voir →
{% endif %} {# Pub : entre Activité récente et la suite du profil (Listes) #} {% include 'components/_ad_slot.html.twig' with { slot: 'profile' } only %} {% if pinned_review %} {% set pr_work = pinned_review.work %} {% set pr_score = pinned_review.rating.score|number_format(1, '.', '') %}
Critique épinglée {% if work_cover_thumb(pr_work) %} {% else %} {% endif %}

{{ pr_work.title }}

{% for i in 1..5 %} {% endfor %} {{ pinned_review.rating.score }}/5 · {{ pinned_review.createdAt|date('d/m/Y') }}

{{ pinned_review.body }}

{% endif %} {% if currently_reading %} {% set cr_work = currently_reading.work %} {% set cr_authors = [] %} {% for author in cr_work.authors %}{% set cr_authors = cr_authors|merge([author.name]) %}{% endfor %} {% set months_fr = ['janv', 'févr', 'mars', 'avr', 'mai', 'juin', 'juill', 'août', 'sept', 'oct', 'nov', 'déc'] %}
En ce moment {% if work_cover_thumb(cr_work) %} Couverture de {{ cr_work.title }} {% else %} {% endif %}

{{ cr_work.title }}

{% if cr_authors|length > 0 %}

{{ cr_authors|join(', ') }}

{% endif %}

Commencé · {{ currently_reading.createdAt|date('j') }} {{ months_fr[currently_reading.createdAt|date('n') - 1] }}{% if currently_reading.createdAt|date('Y') != "now"|date('Y') %} {{ currently_reading.createdAt|date('Y') }}{% endif %}

{% endif %} {% if total_books == 0 and reviews_count == 0 %}
{% if is_own_profile %}

Tu n'as pas encore ajouté de livre. Trouve-en un dans la recherche pour commencer.

Chercher un livre → {% else %}

{{ display_name }} n'a pas encore ajouté de livre.

{% endif %}
{% else %} {# Section Listes custom — avant critiques, après favoris #} {% if custom_lists|default([])|length > 0 %}

Listes {{ custom_lists|length }}

{% for list in custom_lists %} {% include 'lists/_list_row.html.twig' with { list: list, mode: 'mine' } only %} {% endfor %}
{% endif %} {% set shelf_labels = {'read': 'Lus', 'reading': 'En cours', 'want_to_read': 'À lire'} %} {% set any_shelf_visible = false %} {% for shelf_key in ['read', 'reading', 'want_to_read'] %} {% set shelf = shelves[shelf_key] %} {% set count = shelf ? shelf.itemsCount : 0 %} {% if shelf and (is_own_profile or count > 0) %}{% set any_shelf_visible = true %}{% endif %} {% endfor %} {% if any_shelf_visible or reviews_count > 0 or rated_count > 0 %}

Étagères

{% for shelf_key in ['read', 'reading', 'want_to_read'] %} {% set shelf = shelves[shelf_key] %} {% set count = shelf ? shelf.itemsCount : 0 %} {% if shelf and (is_own_profile or count > 0) %} {% if shelf_key == 'read' %} {% elseif shelf_key == 'reading' %} {% else %} {% endif %} {{ shelf_labels[shelf_key] }} {{ count }} {{ count > 1 ? 'livres' : 'livre' }} {% endif %} {% endfor %} {# Livres : tous les livres notés (la note bascule l'œuvre en "Lu" automatiquement). Page dédiée avec note + logo commentaire par livre. #} {% if rated_count > 0 %} Livres {{ rated_count }} {{ rated_count > 1 ? 'livres' : 'livre' }} {% endif %} {# Critiques : ligne cliquable dans l'étagère, à côté des statuts de lecture. La liste complète est sur la page critiques dédiée. #} {% if reviews_count > 0 %} Critiques {{ reviews_count }} {{ reviews_count > 1 ? 'critiques' : 'critique' }} {% endif %}
{% endif %} {% endif %}
{% endblock %}