From 58ed7e20a656d91386495f5d06d37bde35445761 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 29 Oct 2007 08:42:22 +0000
Subject: [PATCH] =?UTF-8?q?Extension=20du=20filtre=20'''parametre=5Furl'''?=
 =?UTF-8?q?:=20il=20est=20=C3=A0=20pr=C3=A9sent=20possible=20de=20donner?=
 =?UTF-8?q?=20une=20liste=20de=20param=C3=A8tres=20plut=C3=B4t=20qu'un=20u?=
 =?UTF-8?q?nique=20param=C3=A8tre,=20ce=20qui=20=C3=A9vite=20d'=C3=A9crire?=
 =?UTF-8?q?=20une=20succession=20d'appels=20=C3=A0=20ce=20filtre=20lorsque?=
 =?UTF-8?q?=20l'on=20veut=20appliquer=20le=20m=C3=AAme=20traitement=20?=
 =?UTF-8?q?=C3=A0=20ces=20param=C3=A8tres=20(en=20pratique=20c'est=20surto?=
 =?UTF-8?q?ut=20la=20suppression).=20La=20syntaxe=20retenue=20est=20de=20l?=
 =?UTF-8?q?es=20s=C3=A9parer=20par=20une=20barre=20'''|''',=20et=20ne=20ri?=
 =?UTF-8?q?en=20mettre=20autour.=20Ainsi:=20{{{=20[(#SELF|parametre=5Furl{?=
 =?UTF-8?q?"tri=5Fn|=5Ftri|=5Ftri=5Fn",""})]=20}}}=20=C3=A9limine=20trois?=
 =?UTF-8?q?=20param=C3=A8tres=20de=20l'URL=20courante=20s'ils=20s'y=20trou?=
 =?UTF-8?q?vent.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Application aux squelettes dynamiques introduits en [10645]. Ceux ci ont de plus un lien vers le squelette produit, sous la forme d'un appel au débusqueur avec les paramètres idoines (pour ne pas effrayer les débutants avec la page d'accueil du débusqueur).
---
 ecrire/inc/utils.php        | 18 +++++++-----
 ecrire/public/debug.php     | 55 ++++++++++++++++++++-----------------
 ecrire/public/styliser.php  |  2 +-
 ecrire/public/vertebrer.php | 31 +++++++++++++--------
 4 files changed, 61 insertions(+), 45 deletions(-)

diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f5fe4decd3..c835f1e42c 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -415,28 +415,32 @@ function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
 	$a = array_shift($url);
 	if (!$a) $a= './';
 
+	$regexp = ',^(' . $c . ')(=.*)?$,';
+	$ajouts = array_flip(explode('|',$c));
+	$u = rawurlencode($v);
 	// lire les variables et agir
 	foreach ($url as $n => $val) {
-		if (preg_match(',^'.preg_quote($c,',').'(=.*)?$,', urldecode($val), $r)) {
+		if (preg_match($regexp, urldecode($val), $r)) {
 			if ($v === NULL) {
-				return $r[1]?substr($r[1],1):''; 
+				return $r[2]?substr($r[2],1):''; 
 			}
 			elseif (!$v) {// suppression
 				unset($url[$n]);
 			} else {
-				$url[$n] = $c.'='.rawurlencode($v);
-				$v = '';
+				$url[$n] = $r[1].'='.$u;
+				unset($ajouts[$r[1]]);
 			}
 		}
 	}
 
-	// ajouter notre parametre si on ne l'a pas encore trouve
+	// traiter les parametres pas encore trouves
 	if ($v === NULL
 	AND $args = func_get_args()
 	AND count($args)==2)
 		return $v;
-	elseif ($v)
-		$url[] = $c.'='.rawurlencode($v);
+	elseif ($v) {
+		foreach($ajouts as $k => $n) $url[] = $k .'=' . $u;
+	} 
 
 	// eliminer les vides
 	$url = array_filter($url);
diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php
index 9e337c3b52..48d0236f3f 100644
--- a/ecrire/public/debug.php
+++ b/ecrire/public/debug.php
@@ -399,8 +399,8 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	ob_end_clean();
 	$self = str_replace("\\'", '&#39;', self());
 	$self = parametre_url($self,'var_mode', 'debug');
-
 	echo debug_debut($fonc);
+
 	if ($var_mode_affiche !== 'validation') {
 		$self = parametre_url($self,'var_mode', 'debug');
 	  foreach ($debug_objets['sourcefile'] as $nom_skel => $sourcefile) {
@@ -452,31 +452,8 @@ function debug_dumpfile ($texte, $fonc, $type) {
 		echo "</fieldset>\n";
 	  }
 	  echo "</div>\n<a id='$fonc'></a>\n"; 
-	  if ($var_mode_objet && ($res = $debug_objets[$var_mode_affiche][$var_mode_objet])) {
-	    echo "<div id=\"debug_boucle\"><fieldset>";
-	    if ($var_mode_affiche == 'resultat') {
-		echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>";
-		$req = $debug_objets['requete'][$var_mode_objet];
-		if (function_exists('traite_query'))
-		  $req = traite_query($req);
-		echo ancre_texte($req);
-		foreach ($res as $view) 
-			if ($view) echo "\n<br /><fieldset>",interdire_scripts($view),"</fieldset>";
-
-	    } else if ($var_mode_affiche == 'code') {
-		echo  "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>";
-		echo ancre_texte("<"."?php\n".$res."\n?".">");
-	    } else if ($var_mode_affiche == 'boucle') {
-		echo  "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>";
-		echo ancre_texte($res);
-	    } else if ($var_mode_affiche == 'squelette') {
-		echo  "<legend>",$debug_objets['sourcefile'][$var_mode_objet],"</legend>";
-		echo ancre_texte($debug_objets['squelette'][$var_mode_objet]);
-	    }
-	    echo "</fieldset></div>";
-	  }
+	  echo debug_affiche($fonc, $debug_objets, $var_mode_objet, $var_mode_affiche);
 	}
-
 	if ($texte) {
 
 		$err = "";
@@ -507,6 +484,34 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	exit;
 }
 
+function debug_affiche($fonc, $tout, $objet, $affiche)
+{
+	if (!$objet) {if ($affiche == 'squelette') $objet = $fonc;}
+	if (!$objet OR !$res = $tout[$affiche][$objet]) return;
+	$res = "<div id=\"debug_boucle\"><fieldset>";
+	if ($affiche == 'resultat') {
+		$res .= "<legend>" .$tout['pretty'][$objet] ."</legend>";
+		$req = $tout['requete'][$objet];
+		if (function_exists('traite_query'))
+			$req = traite_query($req);
+		$res .= ancre_texte($req);
+		foreach ($res as $view) 
+			if ($view) $res .= "\n<br /><fieldset>" .interdire_scripts($view) ."</fieldset>";
+
+	} else if ($affiche == 'code') {
+		$res .=  "<legend>" .$tout['pretty'][$objet] ."</legend>";
+		$res .= ancre_texte("<"."?php\n".$res."\n?".">");
+	} else if ($affiche == 'boucle') {
+		$res .=  "<legend>" .$tout['pretty'][$objet] ."</legend>";
+		$res .= ancre_texte($res);
+	} else if ($affiche == 'squelette') {
+		$res .=  "<legend>" .$tout['sourcefile'][$objet] ."</legend>";
+		$res .= ancre_texte($tout['squelette'][$objet]);
+	}
+	$res .= "</fieldset></div>";
+	return $res;
+}
+
 // http://doc.spip.org/@debug_debut
 function debug_debut($titre)
 {
diff --git a/ecrire/public/styliser.php b/ecrire/public/styliser.php
index c1d959d5ac..eb31e22602 100644
--- a/ecrire/public/styliser.php
+++ b/ecrire/public/styliser.php
@@ -30,7 +30,7 @@ function public_styliser_dist($fond, $id_rubrique, $lang='', $connect='', $ext='
 		AND $table = $trouver_table($fond, $connect)) {
 				$base = _DIR_TMP . $fond . ".$ext";
 				if (!file_exists($base)
-				OR  $GLOBALS['var_mode'] == 'recalcul') {
+				OR  $GLOBALS['var_mode']) {
 					$vertebrer = charger_fonction('vertebrer', 'public');
 					$f = fopen($base, 'w');
 					fwrite($f, $vertebrer($table));
diff --git a/ecrire/public/vertebrer.php b/ecrire/public/vertebrer.php
index 5d358b1d33..cca75bd822 100755
--- a/ecrire/public/vertebrer.php
+++ b/ecrire/public/vertebrer.php
@@ -33,13 +33,14 @@ function vertebrer_sort($fields, $direction)
 	foreach($fields as $n => $t) {
 		$tri = $direction
 		. ((test_sql_int($t) OR test_sql_date($r)) ? 'tri_n' : 'tri');
-		$args ="";
+		$url ="";
 		foreach (array('tri', 'tri_n', '_tri', '_tri_n') as $c) {
-		  if ($tri != $c) $args .= '|parametre_url{' . $c .',""}';
+			if ($tri != $c) $url .= "|$c";
 		}
-      // #SELF contient tous les parametes *tri*. A ameliorer
-		$url = "[(#SELF$args|parametre_url{" . $tri . ",'" . $n . "'})]";
-		$res .= "\n\t\t<th><a href='$url'>$n</a></th>";
+		$url = "|parametre_url{" . $tri . ",'" . $n . "'}"
+		. '|parametre_url{"' . substr($url,1) .'",""}';
+
+		$res .= "\n\t\t<th><a href='[(#SELF$url)]'>$n</a></th>";
 	}
 	return $res;
 }
@@ -96,18 +97,24 @@ function public_vertebrer_dist($desc)
 <h1 style='text-align:center'>SPIPAdmin $surnom</h1><br />\n" .
 	  // au minimum: "<BOUCLE1($fond)></BOUCLE1>#TOTAL_BOUCLE<//B1>")
 	  // au maximum:
-	"<B1>#ANCRE_PAGINATION[<p class='pagination'>(#PAGINATION)</p>]" .
-	"<table class='spip' border='1' width='90%'>" .
-	"<tr>\n\t<th>Nb</th>" .
+	"<B1>#ANCRE_PAGINATION" .
+	"\n<p class='pagination'>" .
+	"\n<a style='float:left;' " .
+	"href='./?page=$surnom&amp;var_mode=debug&amp;var_mode_affiche=squelette#debug_boucle'>squelette" .
+	"</a>" .
+	"\n#PAGINATION" .
+	"\n</p>\n<table class='spip' border='1' width='90%'>" .
+	"\n\t<tr>\n\t\t<th>Nb</th>" .
 	vertebrer_sort($field,'') .
-	"\n</tr>\n<BOUCLE1($surnom)" .
+	"\n\t</tr>\n<BOUCLE1($surnom)" .
 	vertebrer_crit($field) .
 	'>' .
 	vertebrer_cell($field) .
 	"\n\t</tr>\n</BOUCLE1>" .
-	"\n\t<tr>\n\t<th>Nb</th>" .
+	"\n\t<tr>\n\t\t<th>Nb</th>" .
 	vertebrer_sort($field,'_') .
-	"\n</tr></table>" .
-"</B1><h2 style='text-align:center'><:texte_vide:></h2><//B1></div></body></html>";
+	"\n\t</tr>\n</table>" .
+"\n</B1>\n<h2 style='text-align:center'><:texte_vide:></h2>" .
+"\n<//B1></div></body></html>";
 }
 ?>
-- 
GitLab