diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 4fa736f63919846186067962c251ad41e326f8ed..956857eb150b04da22643315b61b2fac606442ff 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -1772,22 +1772,32 @@ function valeur_numerique($expr) { return intval($a); } -// La fonction suivante ne sert plus aujourd'hui qu'aux squelettes des -// balises dynamiques, en attendant une nouvelle conception qui permettra -// d'eviter les redondances de calcul et d'ecriture qu'elle induit. -// Elle fournit la suite de Input-Hidden correspondant aux parametres de -// l'URL donnee en argument. Ce besoin de ne devrait pas apparaitre, -// utiliser plutot generer_form_ecrire. +// Fournit la suite de Input-Hidden correspondant aux parametres de +// l'URL donnee en argument // http://doc.spip.org/@form_hidden function form_hidden($action) { - $hidden = ''; + $hidden = array(); if (false !== ($p = strpos($action, '?'))) foreach(preg_split('/&(amp;)?/S',substr($action,$p+1)) as $c) { - $hidden .= "\n<input name='" . - entites_html(rawurldecode(str_replace('=', "' value='", $c))) . - "' type='hidden' />"; + list($var,$val) = explode('=', $c, 2); + $input = '<input name="' + . entites_html($var) + .'"' + . (is_null($val) + ? '' + : ' value="'.entites_html(rawurldecode($val)).'"' + ) + . ' type="hidden" />'; + + // si c'est une variable de la forme a[]=2, cumuler les input + // sinon ne conserver que le premier + if (preg_match(',\[\]$,S', $var)) + $hidden[] = $input; + else + if (!isset($hidden[$var])) + $hidden[$var] = $input; } - return $hidden; + return join("\n", $hidden); } // http://doc.spip.org/@filtre_bornes_pagination_dist diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 96d12e2c4a3c98b5cc349d5843b7eabc33876555..fe12469e35331060a5b42f27b5f25b903570d26a 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -240,6 +240,7 @@ function set_request($var, $val = NULL, $c=false) { // Exemples : [(#SELF|parametre_url{suite,18})] (ajout) // [(#SELF|parametre_url{suite,''})] (supprime) // [(#SELF|parametre_url{suite})] (prend $suite dans la _request) +// [(#SELF|parametre_url{suite[],1})] (tableaux valeurs multiples) // http://doc.spip.org/@parametre_url function parametre_url($url, $c, $v=NULL, $sep='&') { @@ -266,9 +267,13 @@ function parametre_url($url, $c, $v=NULL, $sep='&') { if ($v === NULL) { return $r[2]?substr($r[2],1):''; } - elseif (!$v) {// suppression + // suppression + elseif (!$v) { unset($url[$n]); - } else { + } + // ajout ; dans le cas d'un tableau ne rien faire, dans + // le cas d'une variable nrmale remplacer au meme endroit dans l'url + elseif (substr($r[1],-2) != '[]') { $url[$n] = $r[1].'='.$u; unset($ajouts[$r[1]]); }