Mauvaise conception de l'API enfants objet_type_decrire_infos_enfants

Cette mauvaise conception était déjà présente dans l'ancien plugin.

Description du bug / Comment le reproduire

Il est possible de déclarer plusieurs parentèles possible pour un même objet. Un type d'objet peut avoir pour parents plusieurs types d'objets différents, mais attention : il peut aussi avoir pour parents un MEME type d'objets avec deux méthodes différentes !

Par exemple un article peut avoir une rubrique directe sur un champ interne ET des rubriques indirectes sur une table de liaison (polyhier) : c'est bien deux méthodes différentes, mais pour le MEME type de parent (rubrique).

Ensuite dans l'API "parents" tout va bien : qu'il n'y ait qu'un seul parent possible ou plusieurs, l'API retourne TOUJOURS un tableau de tableaux :

Mais par contre pour la fonction "enfants"… ça ne renvoie QU'UNE manière de trouver l'enfant par type d'enfants (par exemple pour le type "article"), donc dès qu'on déclare plusieurs ça écrase la précédente ! https://git.spip.net/spip/ecrire/-/blob/5.x/base/objets.php?ref_type=heads#L1636

$enfants[$objet][$objet_enfant] = $parent_methode;

Si on prend l'exemple des articles, dès qu'on va déclarer une méthode en plus pour le même parent "rubrique", alors ça va écraser la méthode "id_rubrique" interne, et ça ne listera plus jamais les articles directs des rubriques.

Comportement attendu

L'API enfants doit toujours renvoyer un tableau de tableaux, exactement comme l'API parents.

Ce qui en cascade listera tous les enfants de toutes les méthodes.

Piste de résolution

Ça devrait être :

$enfants[$objet][$objet_enfant] = $enfants[$objet][$objet_enfant] ?? [];
$enfants[$objet][$objet_enfant][] = $parent_methode;
Modification effectuée par RastaPopoulos