tri_protege_champ protège trop et peut casser des tris (notamment autre que SQL)
Les boucles SPIP ne bouclent pas que sur du SQL, depuis qu'on a ouvert, il y a moult autres utilisations. Et de nombreux critères fonctionnent parfaitement pour ces autres boucles aussi, comme les différentes manières de trier.
Mais {tri} modifie le nom des champs, ce que ne fait pas {par}.
Par exemple dans Sphinx, avec les données JSON, il est possible de trier sur des clés du JSON, comme ça : properties.gis[0].ville
Cela marche parfaitement avec {par} sans rien casser. Mais {tri} vire tout ce qui n'est pas un espace et un mot, et donc ça aboutit dans la requête finale à : properties.gis0.ville
Ça se passe dans tri_protege_champ avec cette regex :
function tri_protege_champ($t) {
return preg_replace(',[^\s\w.+],', '', $t);
}
Pourquoi cette restriction à ce point, et qui n'est pas faite pour {par} dont la valeur peut parfaitement aussi venir d'un #ENV inconnu ? Peut-on augmenter les caractères possibles ? Et dans ce cas juste spécifiquement les crochets en plus, ou encore plus large ?