07/06/10, Fil:
Je crois que les extensions sont chargées avant les plugins, il faudra
inverser si on veut que ce soit viable.
J'arrive pas à voir où c'est défini pour confirmer que l'ordre est
incorrect, et comment le changer le cas échéant.
Je suppute que c'est dans la fonction _chemin(), puisque c'est là que
certains parcours et listes de répertoires semblent définis, mais nulle
mention des plugins, et encore moins des extensions.
te voila sur le _chemin() de la découverte ...
Ce mécanisme de détermination des chemins est pour le moins cryptique.
Sans parler de documentation, reste-t-il des traces même éparses
d'échanges de mails, de logs de commits, ou même, n'ayons pas peur des
mots, de logs IRC qui permettraient aux nouveaux arrivants, aux nuls en
chinois, et autres contributeurs ponctuels potentiels d'en dénouer une
partie ?
En fait, chaque appel à la fonction _chemin($dir) ajoute le répertoire $dir en tête du PATH (ou presque en tête, car si un $dossier_squelettes est défini, il reste toujours sur le haut de la pile). Si _chemin() est appelé avec un 'dir1:dir2:dir3', ces 3 chemins sont placés en tête du path dans le meme ordre (donc dir1 se retrouve en tête du path).
Ensuite, la construction du path complet est réalisée par les fonctions de compilation de chargement des plugins, dans inc/plugin :
- liste_plugin_valides() liste et ordonne les plugins selon leur arbre de dépendance. le tableau $ordre qui en ressort liste donc les plugins avec en premier ceux qui sont les moins prioritaires, et en dernier ceux celui qui passe en priorité sur les autres :
- le plus prioritaire doit arriver en dernier dans les pipeline() pour pouvoir effacer/modifier ce qu'ont fait les autres plugins
- le plus prioritaire doit arriver en premier dans le path pour que ses fichiers soient pris en priorité dans les include_spip()
La fonction ecrire_plugin_actifs() utilise cette liste de plugins ordonnés pour construire les fichiers
tmp/cache/charger_plugins_chemin.php
tmp/cache/charger_pipelines.php
tmp/cache/charger_plugin_fonctions.php
tmp/cache/charger_plugin_options.php
qui sont inclus à chaque hit au moment opportun.
Et là, en revoyant tout cela et en lisant le code généré, je constate que tout est bon 
J'ai dans tmp/cache/charger_plugins_chemin.php :
_chemin(implode(':',array(_DIR_PLUGIN_COMPRESSEUR,_DIR_PLUGIN_DOCUMENTAIRE,_DIR_PLUGIN_GESTDOC,_DIR_PLUGIN_COMMENTS.'feed/',_DIR_PLUGIN_COMMENTS,_DIR_PLUGIN_CACHE_COOL,_DIR_PLUGIN_AGENDA,_DIR_PLUGIN_ZENGARDEN,_DIR_PLUGIN_WEBFONTS,_DIR_PLUGIN_TROMBI,_DIR_PLUGIN_Z,_DIR_PLUGIN_LETTRES.'spip20/',_DIR_PLUGIN_LETTRES,_DIR_PLUGIN_SPIP_BONUX,_DIR_PLUGIN_SKELEDITOR.'spip_210/',_DIR_PLUGIN_MEDIABOX,_DIR_PLUGIN_QUEUE,_DIR_PLUGIN_GRAVATAR,_DIR_PLUGIN_FACTEUR,_DIR_PLUGIN_CFG,_DIR_PLUGIN_BANDO,_DIR_PLUGIN_OPENID.'spip_2_1',_DIR_PLUGIN_OPENID.'./',_DIR_PLUGIN_SAFEHTML,_DIR_PLUGIN_PORTE_PLUME,_DIR_PLUGIN_MSIE_COMPAT,_DIR_PLUGIN_IMAGES)));
Ce qui signifie que les extensions safehtml, porte_plume, msie_compat, images apparaissent bien en dernier dans le path.
Le cas du compresseur qui apparait en premier est lié à une dépendance : il indique qu'il utilise un autre plugin et du coup est ajouté en fin de liste (pas forcèment juste après le plugin qu'il utilise).
Dans les pipelines on a bien quelque chose de cohérent :
// Pipeline autoriser
function execute_pipeline_autoriser(&$val){
if (file_exists($f=_ROOT_EXTENSIONS.'porte_plume/porte_plume_pipelines.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'bandeau/bando_autoriser.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'facteur/inc/facteur_autorisations.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'skeleditor/spip_210/inc/skeleditor_autoriser.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'spip-lettres/inc/lettres_autorisations.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'agenda/agenda_autoriser.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'comments/comments-200/comments_pipelines.php')){include_once($f);}
if (file_exists($f=_ROOT_PLUGINS.'mediatheque/gestdoc_autoriser.php')){include_once($f);}
$val = minipipe('porte_plume_autoriser', $val);
$val = minipipe('bando_autoriser', $val);
$val = minipipe('facteur_autoriser', $val);
$val = minipipe('skeleditor_autoriser', $val);
$val = minipipe('lettres_autoriser', $val);
$val = minipipe('trombi_autoriser', $val);
$val = minipipe('agenda_autoriser', $val);
$val = minipipe('comments_autoriser', $val);
$val = minipipe('gestdoc_autoriser', $val);
$val = minipipe('documentaire_autoriser', $val);
return $val;
}
Donc tout est bon !
Cédric