Le filtre |propre directement annhile les modèles contenant du JS ou du PHP dans le site public
Je ne sais pas déterminer si c'est core, textwheel, safehtml… donc je mets dans core pour l'instant. Au départ ça m'a fait ça pour GIS, mais en fait ça me fait pareil pour d'autres modèles, pas que JS mais aussi PHP (comme Formidable appelé avec le modèle formulaire pour CVT) : spip-contrib-extensions/gis#76
Les balises de contenu telles que #TEXTE
passent dans propre, et possiblement dans de la sécurité, mais pourtant ça affiche bien tous les modèles possibles à la fois en admin et dans le site (surtout dans le site public pour les gens finaux) : modèles contenant du JS, formulaire CVT en modèle, etc.
En revanche quand on applique le filtre |propre
soi-même sur des balises (ENV, GET, VAL, peu importe) qui contiennent exactement ces mêmes modèles, alors dans le HTML final du site public, on se retrouve avec des div
ou des span
avec class="base64javascript"
ou "base64php"
qui ne sont pas dé-échappé.
J'ai vraiment du mal à comprendre comment ça marche, même après avoir tenté de refaire tout le cursus des fonctions (propre, expanser_liens, traiter_modeles, etc, etc) qui parfois sont dans le core, parfois surchargé par textwheel… De ce que j'ai compris il est "normal" que les choses soient échappés en "base64" à plusieurs endroits, mais à la fin c'est censé être dé-échappé. Or là pour les morceaux avec JS ou PHP, ça reste échappé jusqu'au bout.
Pour reproduire, sans squelette compliqué, dans les squelettes-dist :
<html>
<head>
<title>Test</title>
#INSERT_HEAD_CSS
#INSERT_HEAD
</head>
<body>
<BOUCLE_test(ARTICLES){id_article=1}>
Test avec article contenant un modèle avec JS, un modèle avec PHP, les deux s'affichent :
[(#TEXTE)]
</BOUCLE_test>
OU BIEN
#INFO_TEXTE{article, 1}
Test avec propre :
[(#VAL{<carte_gis|id_carte_gis=test>}|propre)]
[(#VAL{<formulaire|formidable|id=2>}|propre)]
</body>
</html>
Bizarrerie supplémentaire indiquée dans le ticket GIS aussi : quand on affiche deux ou plus de fois le même modèle avec JS, et quand ça fonctionne (avec TEXTE en boucle ou INFO_TEXTE), il ne marche que pour le premier arrivé !! Ensuite tous les suivants, même dans une écriture ou ça marche quand c'est seul, et bien ça produit le même résultat que le filtre |propre
seul avec l'échappement qui reste. Ça c'est tout autant n'importe quoi et incohérent (si ça marche dans #TEXTE
, alors si on affiche plusieurs fois cette balise dans la même page, ça doit marcher à chaque occurrence).
Et le même code avec |propre
à la main, fonctionne parfaitement dans l'admin, ça affiche le modèle. Chez moi ça laisse l'échappement que dans le site public.