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