From bd8b519753fe0890af96128191b7af79ba3fb246 Mon Sep 17 00:00:00 2001 From: sorcier Date: Wed, 4 Nov 2026 10:08:15 +0100 Subject: [PATCH] feat(ui): custom modal dialog for update confirmation (v1.4.3) --- public/api.php | 2 +- public/assets/app.js | 71 ++++++++++++++++++++++++++++++++--- public/index.php | 88 +++++++++++++++++++++++++++++++++++++++++++- version.json | 6 +-- 4 files changed, 157 insertions(+), 10 deletions(-) diff --git a/public/api.php b/public/api.php index 9cf402a..eccee64 100644 --- a/public/api.php +++ b/public/api.php @@ -140,7 +140,7 @@ try { $installedVerData = file_exists("{$appDir}/version.json") ? json_decode((string)file_get_contents("{$appDir}/version.json"), true) : []; - $installedVer = $installedVerData['version'] ?? '1.4.2'; + $installedVer = $installedVerData['version'] ?? '1.4.3'; echo json_encode([ 'success' => true, diff --git a/public/assets/app.js b/public/assets/app.js index 10ef291..95154e7 100644 --- a/public/assets/app.js +++ b/public/assets/app.js @@ -5896,14 +5896,57 @@ async function checkSystemUpdate(notify = false) { } } -async function runSystemUpdate() { - if (!confirm("Voulez-vous lancer la mise à jour de NexusPBX ?\n\nUne sauvegarde préventive automatique de vos configurations et de votre base de données sera créée.")) { - return; - } +function openUpdateConfirmModal() { + const modal = document.getElementById('modal-confirm-update'); + if (!modal) return; + let targetVer = ''; + let currVer = (appState && appState.version) ? appState.version : (document.querySelector('meta[name="nexus-app-version"]')?.content || ''); + + try { + const cachedRaw = localStorage.getItem('nexus_update_cached_data'); + if (cachedRaw) { + const cached = JSON.parse(cachedRaw); + if (cached.latest_version) targetVer = cached.latest_version; + if (cached.current_version) currVer = cached.current_version; + } + } catch (_) {} + + const elTarget = document.getElementById('update-modal-target-version'); + const elCurrent = document.getElementById('update-modal-current-version'); + const elBadge = document.getElementById('update-modal-target-badge'); + + if (elTarget) elTarget.textContent = targetVer ? `v${targetVer}` : 'Dernière version'; + if (elCurrent) elCurrent.textContent = currVer ? `v${currVer}` : 'vActuelle'; + if (elBadge && targetVer) elBadge.textContent = `v${targetVer} disponible`; + + modal.classList.remove('hidden'); + modal.classList.add('flex'); +} + +function closeUpdateConfirmModal() { + const modal = document.getElementById('modal-confirm-update'); + if (modal) { + modal.classList.add('hidden'); + modal.classList.remove('flex'); + } +} + +function runSystemUpdate() { + openUpdateConfirmModal(); +} + +async function executeSystemUpdate() { + const btnModalConfirm = document.getElementById('btn-confirm-update-action'); const btnRun = document.getElementById('btn-run-update'); const statusText = document.getElementById('update-status-text'); + if (btnModalConfirm) { + btnModalConfirm.disabled = true; + btnModalConfirm.classList.add('opacity-75', 'cursor-not-allowed'); + btnModalConfirm.innerHTML = '↻ Déploiement en cours...'; + } + if (btnRun) { btnRun.disabled = true; btnRun.innerHTML = '↻ Mise à jour en cours...'; @@ -5959,22 +6002,40 @@ async function runSystemUpdate() { statusText.textContent = `Mise à jour terminée avec succès (v${newVer}) ! Rechargement...`; } + if (btnModalConfirm) { + btnModalConfirm.className = 'px-5 py-2.5 rounded-xl text-xs font-bold bg-emerald-600 text-white flex items-center gap-2'; + btnModalConfirm.innerHTML = '✓ Mise à jour terminée ! Rechargement...'; + } + // 3. Rechargement avec paramètre anti-cache pour forcer le navigateur à récupérer le nouveau DOM setTimeout(() => { + closeUpdateConfirmModal(); window.location.href = window.location.origin + window.location.pathname + '?_t=' + Date.now(); - }, 2000); + }, 1800); } else { + closeUpdateConfirmModal(); alert("Erreur lors de la mise à jour :\n\n" + (data.output || data.message)); if (btnRun) { btnRun.disabled = false; btnRun.innerHTML = 'Réessayer la mise à jour'; } + if (btnModalConfirm) { + btnModalConfirm.disabled = false; + btnModalConfirm.classList.remove('opacity-75', 'cursor-not-allowed'); + btnModalConfirm.innerHTML = 'Lancer la mise à jour (1-Clic)'; + } } } catch (e) { + closeUpdateConfirmModal(); alert("Erreur réseau lors de la mise à jour : " + e.message); if (btnRun) { btnRun.disabled = false; btnRun.innerHTML = 'Réessayer la mise à jour'; } + if (btnModalConfirm) { + btnModalConfirm.disabled = false; + btnModalConfirm.classList.remove('opacity-75', 'cursor-not-allowed'); + btnModalConfirm.innerHTML = 'Lancer la mise à jour (1-Clic)'; + } } } diff --git a/public/index.php b/public/index.php index fde60a4..cf8485b 100644 --- a/public/index.php +++ b/public/index.php @@ -18,7 +18,7 @@ $companyLogo = trim($branding['company_logo'] ?? ''); $hasBranding = !empty($companyName) || !empty($companyLogo); $appVerData = file_exists(__DIR__ . '/../version.json') ? json_decode((string)file_get_contents(__DIR__ . '/../version.json'), true) : []; -$appVersion = $appVerData['version'] ?? '1.4.2'; +$appVersion = $appVerData['version'] ?? '1.4.3'; ?> @@ -4726,6 +4726,92 @@ $appVersion = $appVerData['version'] ?? '1.4.2'; + + + + + diff --git a/version.json b/version.json index 6fd3eee..e5efcf4 100644 --- a/version.json +++ b/version.json @@ -1,12 +1,12 @@ { - "version": "1.4.2", + "version": "1.4.3", "codename": "Helios", "release_date": "2026-11-04", "min_php_version": "8.2", "changelog": [ + "Nouvelle boîte modale élégante et personnalisée pour confirmer le lancement des mises à jour (remplacement du confirm natif)", "Rendu serveur natif garanti du logo et nom de l'exploitant sur la page de connexion", "Boîte de connexion allégée en style verre dépoli transparent (Glassmorphism backdrop-blur)", - "Nouveau fond d'écran immersif haute définition (réseau constellation)", - "Lissage élégant des graphiques CPU/RAM et Réseau (splines Bézier cubiques sans angles vifs)" + "Nouveau fond d'écran immersif haute définition (réseau constellation)" ] }