r12822 - branches/spip-2.0/ecrire/inc branches/spip-2.0/prive/formulaires spip/ecrire/inc spip/prive/formulaires

Author: esj@rezo.net
Date: 2008-09-29 18:33:15 +0200 (lun, 29 sep 2008)
New Revision: 12822

Log:
Bug dans le mécanisme CVT des formulaires d'édition privée: la fonction {{{formulaires_editer_objet_charger}}}, qui s'occupe par défaut de tous ces formulaires, laissait tomber le paramètre de retour, de sorte que ces formulaires ne pouvait boucler que sur {{{ self() }}}.

Puisque cette fonctionalité n'a visiblement pas été testée, je profite de ce qu'il est encore temps pour l'élargir et de proposer une rationnalisation qui n'est pas sans incompatibilité dans l'usage de ces nouvelles balises (combien d'utilisateurs aujourd'hui?).

Donc, dans les squelettes des formulaires d'édition privée, si le paramètre {{{action}}} est vide, alors les balises ouvrante et fermante {{{form}}} ne sont pas produites, non plus que {{{hidden}}} de l'action et le bouton {{{submit}}}. En pratique, cela veut dire qu'on peut faire ramener à une {{{#FORMULAIRE_*}}} le corps du formulaire sans ces balises {{{form}}} englobante, qu'on complètera facilement dans le squelette appelant. Par exemple, pour compléter le formulaire d'édition d'un article, au lieu d'écrire (comme dans prive/editer/article.hmtl):

{{{
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, #ENV{redirect},#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
}
}}}

on écrit

{{{
<form action='#ENV{redirect}'>
[(#ACTION_FORMULAIRE{#ENV{redirect}}]
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, ' ',#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
}
mes autres saisies
<input type='submit' />
</form>
}}}

Cela est rendu opérationnel par le présent dépot. Points méritants discussion:

  * On a écrit ci-dessus {{{' '}}} et pas la chaîne vide car le bug actuel fait que donner la chaîne vide équivaut à obtenir le formulaire complet, avec {{{self()}}}, et on a préféré ne pas casser la compatibilité. Si on veut pouvoir le faire (ce qui est plus conforme à la compréhension qu'on a du squelette), la conséqence est que si on veut expliciter par exemple {{{lier_trad}}} mais avoir le comportement par défaut pour le retour, il faudra écrire explicitement #SELF (ou NULL).

  * Dans cette famille de balises, ce retour est parfois le 3e argument et parfois le 2e, il serait bon d'unifier.

  * De même l'argument {{{config_fonctions}}} change de rang souvent, on pourrait unifier ici aussi.

Modified:
   branches/spip-2.0/ecrire/inc/editer.php
   branches/spip-2.0/prive/formulaires/editer_article.html
   branches/spip-2.0/prive/formulaires/editer_auteur.html
   branches/spip-2.0/prive/formulaires/editer_breve.html
   branches/spip-2.0/prive/formulaires/editer_groupe_mot.html
   branches/spip-2.0/prive/formulaires/editer_mot.html
   branches/spip-2.0/prive/formulaires/editer_rubrique.html
   branches/spip-2.0/prive/formulaires/editer_site.html
   branches/spip-2.0/prive/formulaires/login.html
   spip/ecrire/inc/editer.php
   spip/prive/formulaires/editer_article.html
   spip/prive/formulaires/editer_auteur.html
   spip/prive/formulaires/editer_breve.html
   spip/prive/formulaires/editer_groupe_mot.html
   spip/prive/formulaires/editer_mot.html
   spip/prive/formulaires/editer_rubrique.html
   spip/prive/formulaires/editer_site.html
   spip/prive/formulaires/login.html

Details: http://trac.rezo.net/trac/spip/changeset/12822

Bonjour emmanuel,
je ne comprends pas l'usage de ce dépôt qui va à l'encontre même de la logique de CVT. Le bug que tu mentionnes n'en est pas un mais bien une caractéristique inhérente à CVT :

Dans CVT on actionne toujours le formulaire sur l'url d'origine self() pour pouvoir re-présenter le formulaire de saisie avec les erreurs de saisies le cas échéant.
En cas de succès, et après traitement du formulaire par la fonction traiter(), on redirige vers l'url de retour, dans la fonction charger, par une redirection 302.
En d'autres termes, poster sur une url différente de celle d'origine empêche toute possibilité de faire fonctionner le mécanisme de vérification, puisque en cas d'erreur, le formulaire ne sera pas traité ni réaffiché.

$retour est donc bien l'url de redirection après traitement du formulaire, et jamais l'url sur laquelle on poste qui doit *toujours* etre self().
Dans quel cas le mécanisme initial ne convient-il pas et est-il nécessaire de boucler sur une url différente ?

Pour le coup, c'est un dépôt qui est loin d'être neutre et me semble pour le moins incertain à ce stade.

Cédric

logique meme de ce dépôt qui
Le 29 sept. 08 à 18:33, esj@rezo.net a écrit :

Author: esj@rezo.net
Date: 2008-09-29 18:33:15 +0200 (lun, 29 sep 2008)
New Revision: 12822

Log:
Bug dans le mécanisme CVT des formulaires d'édition privée: la fonction {{{formulaires_editer_objet_charger}}}, qui s'occupe par défaut de tous ces formulaires, laissait tomber le paramètre de retour, de sorte que ces formulaires ne pouvait boucler que sur {{{ self() }}}.

Puisque cette fonctionalité n'a visiblement pas été testée, je profite de ce qu'il est encore temps pour l'élargir et de proposer une rationnalisation qui n'est pas sans incompatibilité dans l'usage de ces nouvelles balises (combien d'utilisateurs aujourd'hui?).

Donc, dans les squelettes des formulaires d'édition privée, si le paramètre {{{action}}} est vide, alors les balises ouvrante et fermante {{{form}}} ne sont pas produites, non plus que {{{hidden}}} de l'action et le bouton {{{submit}}}. En pratique, cela veut dire qu'on peut faire ramener à une {{{#FORMULAIRE_*}}} le corps du formulaire sans ces balises {{{form}}} englobante, qu'on complètera facilement dans le squelette appelant. Par exemple, pour compléter le formulaire d'édition d'un article, au lieu d'écrire (comme dans prive/editer/article.hmtl):

{{{
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, #ENV{redirect},#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
}
}}}

on écrit

{{{
<form action='#ENV{redirect}'>
[(#ACTION_FORMULAIRE{#ENV{redirect}}]
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, ' ',#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
}
mes autres saisies
<input type='submit' />
</form>
}}}

Cela est rendu opérationnel par le présent dépot. Points méritants discussion:

  * On a écrit ci-dessus {{{' '}}} et pas la chaîne vide car le bug actuel fait que donner la chaîne vide équivaut à obtenir le formulaire complet, avec {{{self()}}}, et on a préféré ne pas casser la compatibilité. Si on veut pouvoir le faire (ce qui est plus conforme à la compréhension qu'on a du squelette), la conséqence est que si on veut expliciter par exemple {{{lier_trad}}} mais avoir le comportement par défaut pour le retour, il faudra écrire explicitement #SELF (ou NULL).

  * Dans cette famille de balises, ce retour est parfois le 3e argument et parfois le 2e, il serait bon d'unifier.

  * De même l'argument {{{config_fonctions}}} change de rang souvent, on pourrait unifier ici aussi.

Modified:
   branches/spip-2.0/ecrire/inc/editer.php
   branches/spip-2.0/prive/formulaires/editer_article.html
   branches/spip-2.0/prive/formulaires/editer_auteur.html
   branches/spip-2.0/prive/formulaires/editer_breve.html
   branches/spip-2.0/prive/formulaires/editer_groupe_mot.html
   branches/spip-2.0/prive/formulaires/editer_mot.html
   branches/spip-2.0/prive/formulaires/editer_rubrique.html
   branches/spip-2.0/prive/formulaires/editer_site.html
   branches/spip-2.0/prive/formulaires/login.html
   spip/ecrire/inc/editer.php
   spip/prive/formulaires/editer_article.html
   spip/prive/formulaires/editer_auteur.html
   spip/prive/formulaires/editer_breve.html
   spip/prive/formulaires/editer_groupe_mot.html
   spip/prive/formulaires/editer_mot.html
   spip/prive/formulaires/editer_rubrique.html
   spip/prive/formulaires/editer_site.html
   spip/prive/formulaires/login.html

Details: http://trac.rezo.net/trac/spip/changeset/12822

_______________________________________________
spip-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-commit
dev: http://trac.rezo.net/trac/spip/

Le 30 sept. 08 à 00:28, Committo,Ergo:sum a écrit :

Je verrai après si je trouve une solution à mon probème moins intrusive.

Bon, donc j'ai trouvé sans finalement toucher au code de ces balises, mais Cédric une question quand même: tu as vérifié la sécurité de tout ça car ce 7e argument permet de glisser tout ce qu'on veut. Je crois comprendre que dans le core ça n'a pas trop d'importance, mais dans la doc de ces balises pour qui veut les mettre dans un squelette lambda il y a peut-être un pb, je n'ai pas approfondis.

A+
  Emmanuel