From 3dd12ffbf35f9ca4722b7846f2929a713143ccdc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ma=C3=AFeul=20Rouquette?= <maieul@maieul.net>
Date: Sun, 31 Mar 2024 13:16:25 +0200
Subject: [PATCH] =?UTF-8?q?fix:=20Ne=20pas=20permettre=20d'installer=20une?=
 =?UTF-8?q?=20version=20de=20SPIP=20plus=20ancienne=20que=20la=20version?=
 =?UTF-8?q?=20d=C3=A9j=C3=A0=20install=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

fix: #4213
---
 ecrire/base/upgrade.php             | 18 ++++++++++--------
 ecrire/exec/demande_mise_a_jour.php | 16 +++++++++++-----
 ecrire/lang/ecrire_fr.php           |  2 ++
 3 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index 9b81ef861a..3765027053 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -119,14 +119,16 @@ function maj_base($version_cible = 0, $redirect = '', $debut_page = true) {
 		"Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
 	);
 	if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
-		sql_replace(
-			'spip_meta',
-			[
-				'nom' => 'version_installee',
-				'valeur' => $GLOBALS['spip_version_base'],
-				'impt' => 'non'
-			]
-		);
+		if (!$version_installee) {
+			sql_replace(
+				'spip_meta',
+				[
+					'nom' => 'version_installee',
+					'valeur' => $GLOBALS['spip_version_base'],
+					'impt' => 'non'
+				]
+			);
+		}
 		return false;
 	}
 	if (!upgrade_test()) {
diff --git a/ecrire/exec/demande_mise_a_jour.php b/ecrire/exec/demande_mise_a_jour.php
index 65d6924b8d..558f41e7ab 100644
--- a/ecrire/exec/demande_mise_a_jour.php
+++ b/ecrire/exec/demande_mise_a_jour.php
@@ -43,11 +43,17 @@ function exec_demande_mise_a_jour_dist() {
 	echo $commencer_page('', '', '', '', true, false, false);
 
 	echo debut_grand_cadre();
-	echo boite_ouvrir(_T('info_message_technique'), 'notice');
-	echo '<p>' . _T('info_procedure_maj_version') . '</p>',
-		'<p>' . _T('info_administrateur_site_01') . '</p>';
-	echo bouton_action(_T('bouton_mettre_a_jour_base'), generer_url_ecrire('upgrade', 'reinstall=non'));
-	echo boite_fermer();
+	if ($GLOBALS['spip_version_base'] < $GLOBALS['meta']['version_installee'] ?? 0) {
+		echo boite_ouvrir(_T('info_erreur_version_base_plus_recente'), 'error');
+		echo '<p>'._T('info_version_base_plus_recente').'</p>';
+		echo boite_fermer();
+	} else {
+		echo boite_ouvrir(_T('info_message_technique'), 'notice');
+		echo '<p>' . _T('info_procedure_maj_version') . '</p>',
+			'<p>' . _T('info_administrateur_site_01') . '</p>';
+		echo bouton_action(_T('bouton_mettre_a_jour_base'), generer_url_ecrire('upgrade', 'reinstall=non'));
+		echo boite_fermer();
+	}
 	// masquer les erreurs sql sur cette page car proviennent de la base pas a jour !
 	echo '<style type="text/css">#debug-nav {display: none;}</style>';
 	echo fin_grand_cadre();
diff --git a/ecrire/lang/ecrire_fr.php b/ecrire/lang/ecrire_fr.php
index 128ce4cfdc..979cd81cfd 100644
--- a/ecrire/lang/ecrire_fr.php
+++ b/ecrire/lang/ecrire_fr.php
@@ -427,6 +427,8 @@ exige d’avoir un accès FTP au site Web.</p>',
 	'info_procedez_par_etape' => 'procédez étape par étape',
 	'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter
 	la base de données à la nouvelle version de SPIP.',
+	'info_version_base_plus_recente' => 'La version de SPIP en base de données est plus récente que celle que vous utilisez. Cette opération n\'est pas supportée, mettez à jour votre installation.',
+	'info_erreur_version_base_plus_recente' => 'Erreur d\'installation',
 	'info_proxy_ok' => 'Test du proxy réussi.',
 	'info_ps' => 'P.-S.',
 	'info_publier' => 'publier',
-- 
GitLab