From ef374b2633c24844bd2f19156df5ed2da49eabe5 Mon Sep 17 00:00:00 2001 From: Johnnybegood90 Date: Sun, 15 Mar 2026 04:51:06 +0100 Subject: [PATCH] Documenter release et demo --- setup.php | 25 +++++++++++++++++++++++++ src/config.php | 3 +++ src/js/config.js | 1 + src/js/live.js | 2 +- src/js/sources.js | 18 +++++++++++++++--- src/tpl/modals.php | 1 + 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/setup.php b/setup.php index ec21324..bb88005 100644 --- a/setup.php +++ b/setup.php @@ -69,6 +69,7 @@ if ($mode === 'setup' && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST[' } else { $group_name = trim($_POST['group_name'] ?? ''); $allow_personal_epg = isset($_POST['allow_personal_epg']); + $allow_personal_m3u = $allow_personal_epg && isset($_POST['allow_personal_m3u']); $names = $_POST['source_name'] ?? []; $epg_urls = $_POST['source_epg_url'] ?? []; @@ -103,6 +104,7 @@ if ($mode === 'setup' && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST[' 'group_name' => $group_name, 'epg_sources' => $epg_sources, 'allow_personal_epg' => $allow_personal_epg, + 'allow_personal_m3u' => $allow_personal_m3u, 'admin_key' => $new_key, ]; $written = file_put_contents($config_path, json_encode($config, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); @@ -119,6 +121,9 @@ if ($mode === 'setup' && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST[' $prefill_group = $_POST['group_name'] ?? $existing['group_name'] ?? ''; $prefill_sources = $existing['epg_sources'] ?? []; $prefill_epg = !empty($existing['allow_personal_epg']); +$prefill_personal_m3u = array_key_exists('allow_personal_m3u', $existing) + ? !empty($existing['allow_personal_m3u']) + : $prefill_epg; $submitted_key = trim($_POST['admin_key_input'] ?? $_POST['admin_key_hidden'] ?? ''); ?> @@ -289,6 +294,17 @@ $submitted_key = trim($_POST['admin_key_input'] ?? $_POST['admin_key_hidden'] +
+
+ Allow personal M3U + Lets visitors add their own stream playlist in the Personal EPG modal. +
+ +
+ @@ -324,6 +340,15 @@ function addSource() { function removeSource(btn) { btn.closest('.source-block').remove(); renumberSources(); updateRemoveButtons(); } function renumberSources() { document.querySelectorAll('.source-block').forEach((b,i) => b.querySelector('.source-num').textContent = `SOURCE ${i+1}`); } function updateRemoveButtons() { const b = document.querySelectorAll('.source-block'); b.forEach(bl => bl.querySelector('.source-remove').style.display = b.length > 1 ? '' : 'none'); } +const allowPersonalEpgToggle = document.getElementById('allowPersonalEpg'); +const allowPersonalM3uToggle = document.getElementById('allowPersonalM3u'); +function syncPersonalM3uToggle() { + if (!allowPersonalEpgToggle || !allowPersonalM3uToggle) return; + allowPersonalM3uToggle.disabled = !allowPersonalEpgToggle.checked; + if (!allowPersonalEpgToggle.checked) allowPersonalM3uToggle.checked = false; +} +allowPersonalEpgToggle?.addEventListener('change', syncPersonalM3uToggle); +syncPersonalM3uToggle(); diff --git a/src/config.php b/src/config.php index e0c67f8..379fcaf 100644 --- a/src/config.php +++ b/src/config.php @@ -29,6 +29,9 @@ if (isset($config['epg_url']) && !isset($config['epg_sources'])) { $group_name = htmlspecialchars($config['group_name'] ?? 'GridTV'); $epg_sources = $config['epg_sources'] ?? []; $allow_personal_epg = !empty($config['allow_personal_epg']); +$allow_personal_m3u = array_key_exists('allow_personal_m3u', $config) + ? !empty($config['allow_personal_m3u']) + : $allow_personal_epg; // Default to the first configured source to keep the rest of the app compatible. $first_source = $epg_sources[0] ?? []; diff --git a/src/js/config.js b/src/js/config.js index 8d8188d..2c3fe6d 100644 --- a/src/js/config.js +++ b/src/js/config.js @@ -1,6 +1,7 @@ const EPG_SOURCES = ; const L = ; const ALLOW_PERSONAL_EPG = ; +const ALLOW_PERSONAL_M3U = ; // Index of the currently selected source. let activeSourceIndex = 0; diff --git a/src/js/live.js b/src/js/live.js index 39e2e7d..0bc2d8b 100644 --- a/src/js/live.js +++ b/src/js/live.js @@ -9,7 +9,7 @@ window.addEventListener('load', () => { const savedSource = localStorage.getItem('gridtv-active-source'); if (savedSource === 'personal') { const epg = localStorage.getItem('gridtv-personal-epg'); - const m3u = localStorage.getItem('gridtv-personal-m3u') ?? ''; + const m3u = ALLOW_PERSONAL_M3U ? (localStorage.getItem('gridtv-personal-m3u') ?? '') : ''; if (epg) { currentEpgUrl = epg; currentM3uUrl = m3u; diff --git a/src/js/sources.js b/src/js/sources.js index 08904ee..2f6b328 100644 --- a/src/js/sources.js +++ b/src/js/sources.js @@ -28,8 +28,16 @@ function openPersonalEpgModal() { const saved_epg = localStorage.getItem('gridtv-personal-epg') ?? ''; const saved_m3u = localStorage.getItem('gridtv-personal-m3u') ?? ''; const modal = document.getElementById('personalEpgModal'); + const m3uInput = document.getElementById('personalM3uInput'); + const m3uHint = document.getElementById('personalM3uHint'); document.getElementById('personalEpgInput').value = saved_epg; - document.getElementById('personalM3uInput').value = saved_m3u; + if (m3uInput) { + m3uInput.value = ALLOW_PERSONAL_M3U ? saved_m3u : ''; + m3uInput.disabled = !ALLOW_PERSONAL_M3U; + } + if (m3uHint) { + m3uHint.style.display = ALLOW_PERSONAL_M3U ? '' : 'none'; + } modal.classList.add('visible'); } @@ -44,10 +52,14 @@ function closePersonalEpgModal(applied) { function applyPersonalEpg() { const epg = document.getElementById('personalEpgInput').value.trim(); - const m3u = document.getElementById('personalM3uInput').value.trim(); + const m3u = ALLOW_PERSONAL_M3U ? document.getElementById('personalM3uInput').value.trim() : ''; if (!epg) { alert('URL EPG obligatoire'); return; } localStorage.setItem('gridtv-personal-epg', epg); - localStorage.setItem('gridtv-personal-m3u', m3u); + if (ALLOW_PERSONAL_M3U) { + localStorage.setItem('gridtv-personal-m3u', m3u); + } else { + localStorage.removeItem('gridtv-personal-m3u'); + } localStorage.setItem('gridtv-active-source', 'personal'); updateSourceDropdownLabel('✏ Personal EPG'); currentEpgUrl = epg; diff --git a/src/tpl/modals.php b/src/tpl/modals.php index 85b5f95..cf4318a 100644 --- a/src/tpl/modals.php +++ b/src/tpl/modals.php @@ -29,6 +29,7 @@