Valider 1c1ef316 rédigé par Glop's avatar Glop Validation de Gitea
Parcourir les fichiers

Gestion des alias de boucles dans le traitement des champs.

Ce patch corrige une régression introduite par le commit c4f810b5.

Lorsqu'un alias de boucle existe, certains traitements sont définis
par rapport à cet alias plutôt que par rapport au nom canonique de la
boucle.

C'est par exemple le cas dans la version spip/3.2.11 du plugin Forum.
Ce plugin définit un alias `forums` correspondant au nom canonique
`forum` (voir ligne 32 de `base/forum.php`), puis définit plusieurs
traitements associés à `forums` (l'alias) et non à `forum` (le nom
canonique), comme par exemple ligne 57 du même fichier :
```
    $interfaces['table_des_traitements']['TEXTE']['forums'] = "[…]";
```

Le commit c4f810b5 force l'utilisation du nom canonique pour retrouver
les traitements à appliquer à un champ, ce qui fait que les traitements
définis avec l'alias ne sont plus appliqués.

Cela peut être problématique, car l'utilisation de l'alias est parfois
plus fréquente que celle du nom canonique. Ainsi, l'alias `forums` est
plus utilisé que le nom canonique `forum` : même la documentation de SPIP
parle de la `BOUCLE_xxx(FORUMS)` (https://www.spip.net/fr_article908.html).
Dans ce cas, il est donc plus intuitif de définir les traitements à
effectuer par rapport à l'alias que par rapport au nom canonique.

Ce patch tente donc de concilier les deux approches, en cherchant tout
d'abord à appliquer les traitements associés au nom canonique, puis,
s'il n'y en a pas, en appliquant les éventuels traitements associés à
l'alias. Cela permet de donner la priorité au nom canonique (ce qui
était le sens de c4f810b5, je suppose), sans non plus complètement
ignorer les alias (ce qui permet de maintenir une rétrocompatibilité
avec l'existant, y compris avec les plugins officiels de SPIP).
parent ca771e2b
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+6 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -733,7 +733,10 @@ function champs_traitements($p) {

		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
		if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
			$type_alias = $type_requete;
			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
		} else {
			$type_alias = false;
		}

		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
@@ -742,6 +745,9 @@ function champs_traitements($p) {
		} // ou pour une boucle en particulier "DATA","articles"
		elseif ($type_requete and isset($ps[$type_requete])) {
			$ps = $ps[$type_requete];
		} // ou pour une boucle utilisant un alias ("hierarchie")
		elseif ($type_alias and isset($ps[$type_alias])) {
			$ps = $ps[$type_alias];
		} // ou pour indifféremment quelle que soit la boucle
		elseif (isset($ps[0])) {
			$ps = $ps[0];