{% extends 'base.html.twig' %} {% block title %}{{ podcast.title }} — Serigne Sam Mbaye{% endblock %} {% block meta_description %}{{ podcast.description ? podcast.description|slice(0, 155) ~ '…' : 'Conférence de Serigne Sam Mbaye : ' ~ podcast.title }}{% endblock %} {% block body %}
{# Thèmes : la relation multiple si elle est renseignée, sinon le thème unique historique — getEffectiveTopics gère les deux cas. #}
{% for topic in podcast.effectiveTopics %} {{ topic.name }} {% endfor %}

{{ podcast.title }}

{# Chaque information n'est affichée que si elle est réellement connue : mieux vaut une ligne courte qu'un champ vide ou inventé. #}

{{ podcast.durationLabel }} {% if podcast.recordedAt %} · enregistrée le {{ podcast.recordedAt|date('d/m/Y') }} {% elseif podcast.recordedYear %} · enregistrée vers {{ podcast.recordedYear }} {% endif %} {% if podcast.recordedPlace %}· {{ podcast.recordedPlace }}{% endif %} {% if podcast.speaker %}· {{ podcast.speaker }}{% endif %} {% if podcast.language %}· {{ podcast.language|upper }}{% endif %} · {{ podcast.playCount }} écoute(s)

{% if podcast.digitizedAt and podcast.recordedAt is empty and podcast.recordedYear is empty %} {# Distinction assumée : une date de numérisation n'est pas la date de la conférence, et ne doit surtout pas être présentée comme telle. #}

Numérisée le {{ podcast.digitizedAt|date('d/m/Y') }} — date de la conférence inconnue.

{% endif %} {% if is_granted('ROLE_ADMIN') %}

statut : {{ podcast.processingStatus }} {% if podcast.metadataConfidence is not null %} confiance : {{ (podcast.metadataConfidence * 100)|round }} % {% endif %}

{% endif %} {% set audio_url = podcast.audioPath starts with '/' ? podcast.audioPath : '/' ~ podcast.audioPath %} {# data-row-id relie ce bloc au lecteur : le bouton passe en « pause » et une barre de progression apparaît dès que cette conférence est lancée, y compris si la lecture a démarré depuis une autre page. data-row-style="plain" évite l'habillage des lignes de liste. #}
{# Sans nom explicite, le navigateur enregistre le fichier sous son nom sur le serveur (souvent un identifiant opaque). On repart du titre, nettoyé des caractères interdits dans un nom de fichier. #} {% set audio_parts = audio_url|split('.') %} {% set audio_ext = audio_parts|length > 1 ? audio_parts|last|lower : 'mp3' %} {% set download_name = podcast.title|replace({'/': ' ', '\\': ' ', ':': ' ', '*': ' ', '?': ' ', '"': ' ', '<': ' ', '>': ' ', '|': ' '})|trim %} ⤓ Télécharger
{% include 'partials/share_links.html.twig' with { url: url('app_podcast_show', {slug: podcast.slug}), title: podcast.title } only %}
{% if podcast.summary %}

Résumé

{{ podcast.summary|nl2br }}
{% endif %} {% include 'partials/chapters.html.twig' with {podcast: podcast} only %} {% if podcast.description %}
{{ podcast.description|nl2br }}
{% endif %}
{% endblock %} {% block structured_data %} {% endblock %}