Le contrôleur d'un crayon est TOUJOURS appellé depuis l'espace public, même
pour un crayon de l'espace privé. Cf. crayons.js :
// le prototype configuration de Crayons
$.prototype.cfgCrayons = function (options) {
this.url_crayons_html = options['dir_racine']+'spip.php?action=crayons_html';
En conséquence, le contrôleur ne peut pas savoir s'il va renvoyer du html à un
appel Ajax d'un crayon "public" ou d'un crayon "privé", ce qui pose un
sérieux problème à tout contrôleur qui a besoin d'accéder à une ressource
fichier (image, dossier, fichier, ...).
Il y a deux solutions :
1) Modif mineure :de crayons.js, ligne 118
'self': configCrayons.self,
+ 'dir_racine' : configCrayons.dir_racine
};
2) Modif de crayons.js, ligne 8 :
//this.url_crayons_html =
options['dir_racine']+'spip.php?action=crayons_html';
this.url_crayons_html = '?action=crayons_html';
La solution 2 me semble plus propre, mieux adaptée pour étendre
progressivement les crayons dans la partie privée. Tout contrôleur qui
utilise ensuite des mécanismes standards de spip peut ensuite utiliser des
variables telles que _DIR_RACINE ou _DIR_RESTREINT pour accéder à des
ressources spécifiques. Tout contrôleur bien écrit pourra alors être
compatible espace privé et public à la fois.
Inconvénient : si un contrôleur a défini des chemins en dur depuis l'espace
public, il ne marchera plus.
La solution 1 est plus légère, sans risque d'effets de bord, mais ne sera
adaptée qu'à des contrôleurs spécifiques exploitant ce nouveau paramètre.
Qu'en pensez-vous ?