From 87d0621b678ca2e29a8ab323962e8e9446afc29e Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sat, 8 Jul 2006 20:09:08 +0000
Subject: [PATCH] =?UTF-8?q?forcer=20le=20filtre=20|=3F{a,b}=20=C3=A0=20avo?=
 =?UTF-8?q?ir=20deux=20arguments=20:=20=C3=A7a=20=C3=A9vite=20des=20parse?=
 =?UTF-8?q?=20error=20terribles=20quand=20on=20a=20un=20filtre=20"mal=20?=
 =?UTF-8?q?=C3=A9crit"=20du=20genre=20|=3F{1}?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

mais ça permet désormais de faire :

[(#BALISE|?)]      (aspire les données et ne sort jamais rien)
[(#BALISE|?{yo})]  (affiche "yo" si la balise est non vide)
[(#BALISE|?{yo,spip})]  (cas habituel)
---
 ecrire/public/references.php | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index cc2ca76980..5eedecae7c 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -382,10 +382,15 @@ function compose_filtres($p, $code) {
 	foreach($p->param as $filtre) {
 		$fonc = array_shift($filtre);
 		if ($fonc) {
-			// recuperer les arguments du filtre, en les separant par des
-			// virgules, *sauf* dans le cas du filtre "?" qui demande un ":"
-			$arglist = compose_filtres_args($p, $filtre,
-				($fonc == '?' ? ':' : ','));
+			// recuperer les arguments du filtre, les separer par des virgules
+			// *sauf* dans le cas du filtre "?" qui demande un ":"
+			if ($fonc == '?') {
+				// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
+				if (count($filtre) != 2)
+					$filtre = array($filtre[0], $filtre[1]);
+				$arglist = compose_filtres_args($p, $filtre, ':');
+			} else
+				$arglist = compose_filtres_args($p, $filtre, ',');
 
 			// le filtre est defini dans la matrice ? il faut alors l'appeler
 			// de maniere indirecte, pour charger au prealable sa definition
-- 
GitLab