[spip-dev] form_hidden insère un champ id_ qui n'est pas dans l'action

J'ai été confronté à un comportement étonnant de form_hidden sur un formulaire inclu dans une noisette,
dans les circonstances suivantes :

- les urls du site sont sans réécriture (pas url_propres)

- on est sur une page dont l'url est de la forme de celle d'un objet éditorial
   par exemple ?page=patate&id_patate=1235 dans l'url
   mais il n'est pas nécessaire que 'patate' soit un objet déclaré

- le formulaire est inclu dans une noisette qui ne reçoit PAS l'id_patate
   car il n'en a pas besoin

- le formulaire reçoit en conséquence une action qui n'a rien à voir avec l'id_patate de la page courante
   (par exemple ?page=desfraises&sucre=oui)

- form_hidden appliqué à cette action renvoie une liste de <input hidden> correspondant à chaque élément de l'action ('desfraises' et 'sucre') comme attendu, mais aussi un input hidden pour l'identifiant 'id_patate' de la page courante, alors que cet identifiant n'apparaît pas dans l'action (et que j'en veux pas)
Si par contre il y a d'autres arguments d'urls dans la page, ça ne crée pas d'autres input pour eux. Sur une page 'truc' il n'y a que l'id_truc' qui se trouve ajouté en input hidden.

La doc sur spip.net ne décrit pas cela : "Si on fait un formulaire qui utilise comme action un lien comprenant des arguments (par exemple, quand on utilise la balise #SELF avec le type d’url par défaut), il faut remettre ces valeurs dans des champs hidden ; cette fonction calcule les champs en question.")

Cet ajoût dérogatoire est-il nécessaire ? Pourquoi ?

Si cet ajoût est nécessaire par défaut, peut être serait il possible d'ajouter un argument à form_hidden pour utiliser form_hidden SANS que l'identifiant de la page courante soit ajoutée comme input hidden dans le formulaire, s'il n'est pas explicitement dans l'action ?

C'est peut être un bug aussi : une fuite bien ciblée, du contexte global dans l'action locale.
form_hidden appelle urls_decoder_url pour 'comprendre' l'action et en extraire les variables mais je ne vois pas où la fuite a lieu.

JL

JLuc

Même vieux problème que [spip-dev] filtre |form_hidden et urls de type html (aout à décembre 2009) où on trouve quelques trolls et analyses du code.
Ya un ticket : #3769 - form_hidden insère un hidden en trop - spip - SPIP on GIT où Fil indique qu’il faut ajouter les arguments à l’url passée à form_hidden lorsqu’on veut qu’ils se fassent pas écraser par ceux du contexte.