diff --git a/css/styles.css b/css/styles.css index 93577a0..86e462d 100644 --- a/css/styles.css +++ b/css/styles.css @@ -641,7 +641,7 @@ img { .hero-video-info { position: absolute; - bottom: 70px; + bottom: 0; left: 0; width: 100%; background: linear-gradient(transparent, rgba(0, 0, 0, 0.7)); diff --git a/direct.php b/direct.php index cd55d09..30f8768 100644 --- a/direct.php +++ b/direct.php @@ -14,8 +14,9 @@ require_once 'includes/structured-data.php'; // Appliquer les en-têtes de sécurité setSecurityHeaders(); -// Vérifier s'il y a un direct en cours -$liveStream = getLiveStream(); +// Récupérer la vidéo à afficher selon le mode configuré +$displayData = getDisplayVideo(); +$video = $displayData['video']; ?> @@ -113,40 +114,54 @@ $liveStream = getLiveStream();
-
- EN DIRECT + + + + +
-
-

+

- +
- <?php echo $liveStream['channel']; ?> + <?php echo $video['channel']; ?> - +
- +
- +
diff --git a/includes/config.default.php b/includes/config.default.php index 10322d6..c104575 100644 --- a/includes/config.default.php +++ b/includes/config.default.php @@ -98,6 +98,15 @@ if (!defined('CACHE_DURATION')) define('CACHE_DURATION', 3600); // En secondes ( // Compte pour les lives if (!defined('LIVE_ACCOUNT_NAME')) define('LIVE_ACCOUNT_NAME', 'admin'); +// Mode d'affichage de la section live/vidéo : 'auto' (détection automatique du direct) ou 'static' (vidéo fixe) +if (!defined('LIVE_MODE')) define('LIVE_MODE', 'auto'); + +// ID de la vidéo à afficher en mode 'static' (ex: 'abc123-def456-ghi789') +if (!defined('STATIC_VIDEO_ID')) define('STATIC_VIDEO_ID', ''); + +// Texte du badge à afficher en mode 'static' (ex: 'À LA UNE', 'REPLAY', etc.) +if (!defined('STATIC_VIDEO_BADGE')) define('STATIC_VIDEO_BADGE', 'À LA UNE'); + // Tags pour filtrer les vidéos selon les catégories if (!defined('TAG_SHORT')) define('TAG_SHORT', 'short'); diff --git a/includes/config.local.php.sample b/includes/config.local.php.sample index 6686af9..32b3804 100644 --- a/includes/config.local.php.sample +++ b/includes/config.local.php.sample @@ -26,6 +26,20 @@ // Compte PeerTube pour les lives // define('LIVE_ACCOUNT_NAME', 'admin'); +// Mode d'affichage de la section live/vidéo +// 'auto' : Détection automatique du direct en cours +// 'static' : Afficher une vidéo spécifique (définie par STATIC_VIDEO_ID) +// define('LIVE_MODE', 'auto'); + +// ID de la vidéo à afficher en mode 'static' +// Pour trouver l'ID : https://votre-instance.fr/videos/watch/ID_DE_LA_VIDEO +// Exemple : '9c9de5e8-0a1e-484a-b099-e80766180a6d' +// define('STATIC_VIDEO_ID', ''); + +// Texte du badge à afficher en mode 'static' +// Exemples : 'À LA UNE', 'REPLAY', 'VIDÉO SPÉCIALE', etc. +// define('STATIC_VIDEO_BADGE', 'À LA UNE'); + // ========================================= // Filtres et tags // ========================================= diff --git a/includes/config.php b/includes/config.php index 617be78..2e04073 100644 --- a/includes/config.php +++ b/includes/config.php @@ -397,6 +397,67 @@ function getLiveStream() { return !empty($activeLives) ? reset($activeLives) : null; } +/** + * Récupère une vidéo spécifique par son ID + * + * @param string $videoId ID de la vidéo + * @return array|null Informations sur la vidéo ou null si non trouvée + */ +function getVideoById($videoId) { + if (empty($videoId)) { + return null; + } + + $data = callPeerTubeApi('videos/' . $videoId); + + // Vérifier si on a des résultats + if (empty($data)) { + return null; + } + + // Formater les données de la vidéo + $videoData = formatVideosData([$data]); + + // Retourner la première vidéo formatée + return !empty($videoData) ? reset($videoData) : null; +} + +/** + * Récupère la vidéo à afficher selon le mode configuré (auto ou static) + * + * En mode 'auto' : détecte automatiquement un direct en cours + * En mode 'static' : affiche une vidéo spécifique définie par STATIC_VIDEO_ID + * + * @return array|null Tableau avec 'video' (données de la vidéo ou null), 'mode' ('auto'|'static'), 'isLive' (bool), 'badge' (texte du badge) + */ +function getDisplayVideo() { + $mode = defined('LIVE_MODE') ? LIVE_MODE : 'auto'; + + if ($mode === 'static') { + // Mode vidéo statique + $videoId = defined('STATIC_VIDEO_ID') ? STATIC_VIDEO_ID : ''; + $video = getVideoById($videoId); + $badge = defined('STATIC_VIDEO_BADGE') ? STATIC_VIDEO_BADGE : 'À LA UNE'; + + return [ + 'video' => $video, + 'mode' => 'static', + 'isLive' => false, + 'badge' => $badge + ]; + } else { + // Mode automatique (détection de direct) + $video = getLiveStream(); + + return [ + 'video' => $video, + 'mode' => 'auto', + 'isLive' => $video !== null, + 'badge' => 'DIRECT' + ]; + } +} + /** * Formate les données brutes des vidéos venant de l'API * diff --git a/index.php b/index.php index dc65f41..41d622f 100644 --- a/index.php +++ b/index.php @@ -105,39 +105,55 @@ setSecurityHeaders();

Diffusion en direct

- DIRECT + + + + +
-
- Lecteur vidéo pour la diffusion en direct de +
+ Lecteur vidéo pour de
-

+

- + - Avatar de la chaîne <?php echo htmlspecialchars($liveStream['channel']); ?> + Avatar de la chaîne <?php echo htmlspecialchars($video['channel']); ?> - +