+ on ajoute un pipeline formulaire_verifier_etape qui recoit le numero d'etape en args et permet donc de traiter les cvtmulti proprement depuis les plugins
- encoding (utf8)
- eof_ending (saut le ligne en fin de fichier)
- elseif (pas else if)
- function_call_space (espaces sur fonctions)
- function_declaration (pareil)
- function_typehint_space (pareil)
- sur protege_champ() si le unserialize ne réussit pas… pas la peine de crier.
- sur les drapeaux d'édition, lorsqu'on crée un nouvel élément (par exemple un mot), le contexte n'a pas encore l'identifiant de l'objet.
On protège simplement toutes les entites à l'aide de la fonction htmlspecialchars sans traitement particulier par rapport au contenu
A tester intensivement
- existe_formulaire (par Ybbet) : Ne pas mettre le nom de la variable crée une erreur pour PHPdoc
- sql_fetch (par Ybbet) : Ne pas mettre le nom de la variable crée une erreur pour PHPdoc
- sql_fetch_all (par Ybbet) : Ne pas mettre le nom de la variable crée une erreur pour PHPdoc
au passage, on ajoute un pipeline formulaire_fond permettant de personaliser le fond du formulaire. Il complete les pipelines formulaire_charger,formulaire_verifier,formulaire_traiter
On pouvait deja faire la meme chose avec le pipeline recuperer_fond, mais cela greve *tous* les calculs de fond, alors que la plupart des cas d'utilisation de ce pipeline concernent en fait les formulaires
Je profite de cette écriture massive pour normaliser quelque chose de trompeur lorsqu'on compare deux versions, savoir l'usage de " ou ' dans le premier argument de define et defined. Comme les chaînes entre apostrophes sont plus rapidement analysées que celles entre guillemets, je choisis l'apostrophe.
Dépot obtenu avec le script Shell:
{{{
a=$(find . -name "*.php" |grep -v extensions/ | grep -v /config/ | grep -v index.php | grep -v public.php | grep -v prive.php )
echo -n "Fichiers: "
echo $a|wc -w
for i in $a
do
sed -f ~/Sites/spip/spip.sed $i > /tmp/f.php
if diff -q $i /tmp/f.php
then
:
else
diff $i /tmp/f.php
# echo $i; php /tmp/f.php
# mv /tmp/f.php $i
fi
done
}}}
et le script Sed:
{{{
s/Copyright (c) 2001-20../Copyright (c) 2001-2011/
s,\(if [(]!*\)*\(defined* *[(]\)"\([^"]*\)"\(.*\);[[:space:]]*[#/]*.*$,\1\2'\3'\4;,
}}}
et on delegue a trouver_fond la tache de trouver un fond dans le chemin en prenant en compte son extension.
Elle s'enrichit d'un argument optionnel booleen permettant de retourner son resultat sous forme de tableau type pathinfo
dont la valeur 'extension' est toujours renseignee (meme en cas d'echec), et dont la valeur 'fond' contient le nom du fichier sans l'extension.
Cela permet d'eviter de mettre l'extension en dur dans styliser.
Les plugins pourront utiliser cette fonction, et continuer a etre compatible avec les anciennes versions de SPIP simplement
en la definissant si elle n'existe pas
La constante _EXTENSION_SQUELETTE qui indique l'extension d'un
sauelette avait beaucoup trop d'occurrences dans le code,
ce qui ne permet pas facilement de mettre en place une strategie
ou plusieurs extensions seraient possibles simultanement.
Il n'y a besoin que d'une seule occurrence en fait,
dans la fonction {{{trouve_modele}}} sur laquelle toutes les autres se
rabattent.
Pour le decompilateur, il faut se baseru sur l'extension du
fichier de depart pour retrouver l'information, et n'avoir
qu'un seul point d'entree poureviter de gerer une valeur par defaut.
Pour le debusqueur, on donne le nom du squelette sans l'extension
puisque justement il est possible qu'il y ait le choix.
celle-ci peut etre polluee par une variable postee dans le formulaire.
Du coup les arguments changent et la balise #FORMULAIRE ne reconait pas le formulaire responsable du post. La seule solution etait de forcer la prise en compte du POST, ce qui interdit d'avoir plusieurs formulaires sur la meme page.
Pour y remedier, on introduit en sus des 3 fonctionc charger, verifier, traiter, une fonction optionnelle identifier qui est chargee de retourner une signature en fonction des arguments du formulaire, en ignorant ceux qui ne reprensentent pas l'objet saisi.
On aurait pu demander a charger de retourner cette signature dans la table des valeurs, mais ca aurait oblige a faire un double appel a la fonction charger() du formulaire.
Cette balise ne prend plus qu'un seul argument, un squelette de formulaire. Elle verifie son existence et fournit un trio de fonctions CVT par défaut pour son utilisation. Pour chacune des 3 fonctions, s'il existe une fonction homonyme au nom du squelette, c'est elle qui prend la main. Sinon, le comportement par défaut proposé consiste à trouver la table des métas associée à ce formulaire pour y lire les valeurs (fonction {{{_charger}}}) et les y écrire (fonction {{{_traiter}}}). Rien n'est fait pour la fonction {{{_verifier}}}).
Le chemin d'accès au squelette détermine la table des métas associée. S'il commence par {{{_DIR_PLUGINS}}} (autrement dit si le formulaire a été trouvé dans un plugin), la table des métas associée est celle du plugin (qui est par défaut le préfixe du plugin, suivi de {{{_metas}}}). Sinon c'est la table des métas standard.
A noter que cette balise ne s'applique plus forcément à un plugin et qu'elle devrait donc changer de nom ({{{#GERER}}} ou {{{#REMPLIR}}} sembleraient plus appropriés).
A noter aussi que la fonction booléenne {{{existe_formulaire}}} renvoie maintenant le chemin, alors qu'elle renvoyait auparavant son argument initial ce qui n'était pas très utile.
Y a-t-il des cas où #ACTION_FORMULAIRE est appelé autrement qu'avec un unique argument égal à #ENV{action} ? En tout cas, il semble que ces balises dynamiques devraient plus généralement rajouter elles-mêmes ce que rajoute #ACTION_FORMULAIRE: cette balise incompréhensible pour l'utilisateur serait ainsi éliminée, et le code du compilateur gagnerait en clarté en regroupant en un seul endroit toute la production de ces input-hidden.