From 8ddca1bf7ae31467b9a12341b3c8de1a614a4459 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 28 Jul 2003 08:44:31 +0000
Subject: [PATCH] * compatibilite php3 de la gestion de la pile des langues
 (script de charlie@nexen.net = Cedric Fronteau)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* remettre la langue du site dans la pile de langue avant d'INCLURE(), sinon on risque certaines incohérences
---
 ecrire/inc_filtres.php3 | 52 +++++++++++++++++++++++++++++++++++++++--
 inc-calcul-squel.php3   |  7 ++++--
 2 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index c705c0aac0..5a2f077b71 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -453,7 +453,7 @@ function lang_rtl ($lang) {
 function lang_select ($lang='') {
 	global $pile_langues, $spip_lang;
 	include_ecrire('inc_lang.php3');
-	array_push($pile_langues, $spip_lang);
+	php3_array_push($pile_langues, $spip_lang);
 	changer_langue(lang_supprimer_point($lang));
 }
 
@@ -461,7 +461,7 @@ function lang_select ($lang='') {
 function lang_dselect ($rien='') {
 	global $pile_langues;
 	include_ecrire('inc_lang.php3');
-	changer_langue(array_pop($pile_langues));
+	changer_langue(php3_array_pop($pile_langues));
 }
 
 // nettoyer les langues affectees automatiquement (cf. calculer_langues_rubriques)
@@ -469,4 +469,52 @@ function lang_supprimer_point ($langue) {
 	return ereg_replace('^\.', '', $langue);
 }
 
+
+//
+// array_push et array_pop pour php3 (a virer si on n'a pas besoin de la compatibilite php3
+// et a passer dans inc_version si on a besoin de ces fonctions ailleurs qu'ici)
+//
+/*
+ * Avertissement : Cette librairie de fonctions PHP est distribuee avec l'espoir 
+ * qu'elle sera utile, mais elle l'est SANS AUCUNE GARANTIE; sans meme la garantie de 
+ * COMMERCIALISATION ou d'UTILITE POUR UN BUT QUELCONQUE.
+ * Elle est librement redistribuable tant que la presente licence, ainsi que les credits des 
+ * auteurs respectifs de chaque fonctions sont laisses ensembles. 
+ * En aucun cas, Nexen.net ne pourra etre tenu responsable de quelques consequences que ce soit
+ * de l'utilisation ou la mesutilisation de ces fonctions PHP.
+ */
+/****
+ * Titre : array_push() et array_pop() pour PHP3 
+ * Auteur : Cedric Fronteau 
+ * Email : charlie@nexen.net
+ * Url : 
+ * Description : Implementation de array_push() et array_pop pour PHP3
+****/
+function php3_array_push(&$stack,$value){
+	if (!is_array($stack))
+		return FALSE;
+	end($stack);
+	do {
+		$k = key($stack);
+		if (is_long($k));
+			break;
+	} while(prev($stack));
+
+	if (is_long($k))
+		$stack[$k+1] = $value;
+	else
+		$stack[0] = $value;
+	return count($stack);
+}
+
+function php3_array_pop(&$stack){
+	if (!is_array($stack) || count($stack) == 0)
+		return NULL;
+	end($stack);
+	$v = current($stack);
+	$k = key($stack);
+	unset($stack[$k]);
+	return $v;
+}
+
 ?>
diff --git a/inc-calcul-squel.php3 b/inc-calcul-squel.php3
index 0593dd35fd..9766aff1cc 100644
--- a/inc-calcul-squel.php3
+++ b/inc-calcul-squel.php3
@@ -2169,6 +2169,7 @@ function calculer_texte($texte)
 
 		ereg('^\\{(.*)\\}$', trim($match[2]), $params);
 		$code .= "	\$retour .= '<"."?php ';\n";
+		$code .= "	\$retour .= 'include_ecrire(\'inc_filtres.php3\'); lang_select(lire_meta(\'langue_site\'));';\n";
 		$code .= "	\$retour .= '\$contexte_inclus = \'\'; ';\n";
 
 		if ($params) {
@@ -2194,9 +2195,11 @@ function calculer_texte($texte)
 				include(\'$dossier_squelettes/$fichier\');
 			} else {
 				include(\'$fichier\');
-			} ?".">';\n";
+			}';\n";
 		} else
-			$code .= "	\$retour .= 'include(\'$fichier\'); ?".">';\n";
+			$code .= "	\$retour .= 'include(\'$fichier\');';\n";
+
+		$code .= "	\$retour .= 'lang_dselect(); ?".">';\n";
 	}
 
 	if ($texte)
-- 
GitLab