feat: add À la une feature

This commit is contained in:
2026-01-14 16:51:44 +04:00
parent 66de41b118
commit 10f0b9a6eb
6 changed files with 149 additions and 34 deletions
+9
View File
@@ -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');
+14
View File
@@ -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
// =========================================
+61
View File
@@ -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
*