From 00967c06093ba2c39d535110bcaab2de36bd8d9f Mon Sep 17 00:00:00 2001
From: James <james@rezo.net>
Date: Sat, 1 Sep 2007 10:31:31 +0000
Subject: [PATCH] =?UTF-8?q?-*=20Un=20bug=20=C3=A9trange=20sur=20la=20balis?=
 =?UTF-8?q?e=20#ENV=20qui=20renvoyait=20un=20entier=20s=C3=A9rialis=C3=A9.?=
 =?UTF-8?q?..=20-*=20Deux=20petits=20filtres=20dans=20la=20lign=C3=A9e=20d?=
 =?UTF-8?q?e=20|reset=20et=20|end=20:=20|push=20ajoute=20un=20=C3=A9l?=
 =?UTF-8?q?=C3=A9ment=20=C3=A0=20une=20balise=20qui=20est=20en=20fait=20un?=
 =?UTF-8?q?=20tableau,=20=C3=A8quivalent=20=C3=A0=20array=5Fpush=20et=20|f?=
 =?UTF-8?q?ind=20qui=20est=20un=20=C3=A9quivalent=20de=20in=5Farray=20(tou?=
 =?UTF-8?q?t=20=C3=A7a=20parce=20que=20les=20fonctions=20natives=20de=20ph?=
 =?UTF-8?q?p=20ne=20fonctionnait=20plus)=20-*=20Corrections=20sur=20le=20f?=
 =?UTF-8?q?iltre=20et=20la=20balise=20#FOREACH,=20qui=20avaient=20eux=20au?=
 =?UTF-8?q?ssi=20souffert=20de=20la=20nouvelle=20balise=20#ENV.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/filtres.php    | 19 ++++++++++++++-----
 ecrire/public/balises.php | 10 +++++-----
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 7bda63ff65..c1749735fe 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -1699,6 +1699,14 @@ function filtre_end($array) {
 	return filtre_valeur_tableau($array,@count($array)-1);
 }
 
+function filtre_push($array, $val) {
+	if($array == '' OR !array_push($array, $val)) return '';
+	return $array;
+}
+
+function filtre_find($array, $val) {
+	return ($array != '' AND in_array($val, $array));
+}
 
 //
 // fonction standard de calcul de la balise #PAGINATION
@@ -2150,11 +2158,12 @@ function http_style_background($img, $att='')
 // http://doc.spip.org/@filtre_foreach_dist
 function filtre_foreach_dist($balise_deserializee, $modele = 'foreach') {
 	$texte = '';
-	foreach($balise_deserializee as $k => $v)
-		$texte .= recuperer_fond(
-			'modeles/'.$modele,
-			array('cle' => $k, 'valeur' => $v)
-		);
+	if(is_array($balise_deserializee))
+		foreach($balise_deserializee as $k => $v)
+			$texte .= recuperer_fond(
+				'modeles/'.$modele,
+				array_merge(array('cle' => $k), (is_array($v) ? $v : array('valeur' => $v)))
+			);
 	return $texte;
 }
 
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 36098d0fa4..02ac2f4e2a 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -997,7 +997,7 @@ function balise_ENV_dist($p, $src = NULL) {
 	if (!$_nom) {
 		// cas de #ENV sans argument : on retourne le serialize() du tableau
 		// une belle fonction [(#ENV|affiche_env)] serait pratique
-		$p->code = '($a = ('.$src.') ? serialize($a) : "")';
+		$p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")';
 	} else {
 		// admet deux arguments : nom de variable, valeur par defaut si vide
 		$p->code = 'is_array($a = ('.$src.')) ? $a['.$_nom.'] : ""';
@@ -1383,14 +1383,14 @@ function balise_FOREACH_dist($p) {
 		$_modele = interprete_argument_balise(2,$p);
 		$_modele = str_replace("'", "", strtolower($_modele));
 		$__modele = 'foreach_'.strtolower($_tableau);
-		$_modele = (!$_modele AND ($f = find_in_path('modeles/'.$__modele.'.html'))) ? $__modele : ($_modele ? $_modele : 'foreach');
+		$_modele = (!$_modele AND find_in_path('modeles/'.$__modele.'.html')) ?
+			$__modele : 
+			($_modele ? $_modele : 'foreach');
 
 		$p->param = @array_shift(@array_shift($p->param));
 		$p = $balise($p);
-		//retirer le serialize
-		$p->code = preg_replace(',serialize\((.*)\),', '\1', $p->code);
 		$filtre = chercher_filtre('foreach');
-		$p->code = $filtre . "(" . $p->code . ", '" . $_modele . "')";
+		$p->code = $filtre . "(unserialize(" . $p->code . "), '" . $_modele . "')";
 	}
 	//On a pas trouve la balise correspondant au tableau a traiter
 	else {
-- 
GitLab