Formulaire editer_liens affiché inutilement dans certains cas
Reproduire le comportement
Pour observer le problème, je propose d'utiliser les mots-clés, qui se servent du formulaire « editer_liens ». Donc :
-
- Avoir au préalable des articles avec des mots-clés, et d'autres sans.
-
- Désactiver l'ajout de mots-clés aux articles pour tous les groupes de mots-clé.
Résultat :
- Les articles possédant des mots-clés comportent toujours le formulaire. Là, ça me semble normal.
- Les articles ne possédant pas de mot-clé affichent eux aussi le formulaire. Là, ça me paraît erroné : il devrait être caché. Il n'a aucune utilité, et on a "désactivé" l'utilisation des mots-clés pour les articles, ça veut dire qu'on en veut pas.
Continuons.
-
- Retirer tous les mots-clés liés aux articles.
Résultat :
- Maintenant, le formulaire n'est plus affiché, car plus aucun article ne possède de mot clé : on retrouve le comportement normal.
Problème
Le problème vient d'un test effectué dans charger : http://core.spip.org/projects/spip/repository/entry/spip/prive/formulaires/editer_liens.php#L94
Le raisonnement actuel est le suivant : quand le formulaire n'est pas éditable, il est caché s'il n'existe aucun lien pour le type d'objet. Ou pour reprendre l'exemple des mots, plus parlant : le formulaire est caché s'il n'existe aucun mot lié à un article (n'importe quel article). Or je pense qu'il devrait être caché s'il n'existe aucun mot lié à l'article en cours.
Donc, en remplaçant :
objet_trouver_liens(array($objet_lien=>'*'),array(($objet_lien==$objet_source?$objet:$objet_source)=>'*'))
par :
objet_trouver_liens(array($objet_lien=>'*'),array(($objet_lien==$objet_source?$objet:$objet_source)=>$id_objet))
On retrouve le comportement qui me semble "normal".