Humeurs, trucs, tutos...
Vous êtes ici : Accueil » SPIP » Adapter SPIP Bisous à SPIP 3 » Chapitre 1er : plugin.xml, pipelines, CFG

Adapter Spip Bisous à SPIP 3 - au boulot...

Chapitre 1er : plugin.xml, pipelines, CFG

D 23 mars 2012     H 19:03     A François Rygaert (aka Suske)     C 0 messages


Premier étape du chantier, en regarder les bases : les fichiers situés à la racine du plugin. Je vais regarder, et toucher (mais peu, je ne sais même pas vraiment où je vais). On va donc commencer par les fichiers à la racine : plugin.xml et bisous_pipelines.php

Plugin.xml

SPIP 3 marquera l’abandon progressif de ce fichier de déclaration de plugins, au profit d’un autre nommé paquet.xml. Le plugin « Plugonet » facilite la création de paquet.xml, nous y reviendrons plus tard. Dans l’immédiat, regardons de quoi se compose le plugin.xml de Bisous pour SPIP 2 et voyons ce qu’il y a à y changer.

Commentaires :
- Ligne 5 : le numéro de version du plugin est bien entendu un élément crucial pour la bonne information du webmestre. Jusqu’à l’apparition du plugin STEP pour SPIP 2.1, ce numéro n’était pas utilisé dynamiquement en spip. Dans SPIP 3, l’interface de gestion des plugins fera usage de cette donnée pour gérer les mises à jour, les dépendances, etc. Ce numéro doit avoir la forme X.Y.Z. Si je faisais une évolution du plugin existant, je devrais l’incrémenter en Z, au minimum mais je crois que ce n’est pas nécessaire vu que je crée une version spécifique pour SPIP 3 [1]
- Ligne 6 : le numéro de version de la base doit être incrémenté, en cas de modification de la base de donnée par le plugin. Son incrémentation déclenche les actions ad hoc de SPIP.
- ligne 10 : Outre son utilisation nécessaire dans les noms de fonctions, etc., à partir de SPIP 3, c’est le préfixe qui détermine l’unicité du plugin pour le serveur de plugins.
- lignes 12 à 20 : la mécanique d’installation et de fonctionnement des tables du plugin, c’est pour plus tard peut-être.
- lignes 21 à 24 : le pipeline « afficher_gauche » définit un affichage dans la colonne de gauche de l’espace privé. Comme perso j’aime l’affichage en 3 colonnes du privé et que la droite est souvent oubliée, je vais mettre « afficher_droite ». Par ailleurs, le contenu de cet affichage est défini dans le fichier bisous_pipelines.php, ça tombe bien on ira y jeter un œil tout à l’heure.
- ligne 25 : pour que ce plugin s’installe sous SPIP 3, il faudra adapter ça : je mets <necessite id="SPIP" version="[3.0.0-dev;3.0.99]" />
- ligne 26 : la catégorie est désormais nécessaire pour pouvoir mettre un peu d’ordre dans la gestion des plugins, tant dans SPIP que sur le serveur de plugins

Ajout supplémentaire :
- Il est désormais prévu pour chaque plugin un « slogan » qui définit en quelques mots l’utilité du plugin. J’ajoute une ligne comme ceci, sous le nom : <slogan>Embrassez-vous !</slogan>

Mon plugin.xml pour SPIP 3 ressemble donc désormais à ceci :

Rest à faire : Passer ça en paquet.xml, PlugOnet nous y aidera (plus tard).

Attaquons-nous maintenant à ce fameux bisous_pipelines.php.


bisous_pipelines.php

La version SPIP 2 est la suivante :

Commentaires :
- ligne 2 : cette fonction (la seule du fichier, chouette !) est visiblement une fonction d’affichage. Je veux un affichage à droite en cas d’écran sur 3 colonnes, je déduis que je dois en changer le nom : ce sera function bisous_affiche_droite($flux). Je suppose que le premier terme doit correspondre au préfixe du plugin et les deux suivants au pipeline que j’ai appelé dans plugin.xml .
- lignes 3 et 4 : il y a inclusion de deux fichiers de SPIP que je suppose être chargé de la mise en forme et de la construction de page. Un petit coup d’oeil dans /ecrire (le dossier des fichiers internes de SPIP, en tout cas du privé) me montre que ces deux fichiers existent toujours en SPIP 3. Pour faire bonne mesure, je vais comparer aussi avec un plugin du core : l’extension « organiseur ». Je constate des similitudes et des différences :

Ces deux lignes d’inclusion n’y sont pas présentes. L’inclusion se fait probablement d’office à présent. Je les enlève et croise les doigts ;-). Par ailleurs mon hypothèse pour la ligne 2 est validée, semble-t-il.

- ligne 7 : je constate qu’en SPIP 2 les bisous donnés et reçus s’affichent sur la page d’auteur, dans le privé. Cette page s’appelle via ecrire/?exec=auteurs_infos. Il s’agit d’un fichier qui se trouve dans ecrire/exec/auteurs_infos.php.
En SPIP 3, il n’existe plus. La page d’auteur est désormais appelée via ecrire/?exec=infos_perso. Je vais donc à la recherche d’un fichier « infos_perso », et je le trouve dans /prive/squelettes/contenu. Au passage je note que ce qui concerne le squelette de l’espace privé de SPIP semble donc se trouver donc dans /prive/squelettes, vu que j’y retrouve la liste de sous-dossiers habituelle en Zpip ! Pour la ligne 7, je tente donc le remplacement par    if ($flux['args']['exec'] == 'infos_perso').
- lignes 8 à 14 : je détecte des chaînes de langue (_T('bisous...')) et des indications de mise en forme ( les debut_cadre_relief('',true,'',_T('bisous:bisous_donnes')); et fin_cadre_relief). Je suppose qu’il s’agit de la méthode SPIP 2 pour définir les cadres dans le privé. Comme je sais que l’interface privée est « squeletisée », il doit y avoir moyen de faire ça en boucles. Je le note et on verra plus tard. Ce qui m’intéresse ici, c’est que je retrouve bien la fonction recupere_fond et ses arguments. Dans bisous pour SPIP 2, ces fonds se trouvent dans /prive. Je note d’adopter l’organisation SPIP 3 mais je ne touche à rien pour l’instant. Je reviendrai quand j’aurai avancé sur ces fameux squelettes du privé.

Mon fichier ressemble désormais à ceci :

<?php
function bisous_affiche_droite($flux){

   if ($flux['args']['exec'] == 'infos_perso'){
       $flux['data'] .= debut_cadre_relief('',true,'',_T('bisous:bisous_donnes'));
       $flux['data'] .= recuperer_fond('prive/bisous_donnes',array('id_auteur'=>$flux['args']['id_auteur']));
       $flux['data'] .= fin_cadre_relief(true);
       
       $flux['data'] .= debut_cadre_relief('',true,'',_T('bisous:bisous_recus'));
       $flux['data'] .= recuperer_fond('prive/bisous_recus',array('id_auteur'=>$flux['args']['id_auteur']));
       $flux['data'] .= fin_cadre_relief(true);
   }
   return $flux;
}
?>

J’enregistre le tout et constate que j’ai désormais bien des boites « Bisous donnés » et « Bisous reçus » sur ma page d’auteur. Cool :-)

Reste à faire :
- remplacer les debut_cadre_relief par le système SPIP 3
- déplacer les fonds dans prive/squelettes/inclure/ ET reporter ici la modification.
- ajouter la ligne « sécurité » qui vérifie inc-version (je me souviens avoir vu ça passe sur toute la zone il y a peu mais elle ne se trouve pas sur spip-bisous)


Un petit supplément pour la route...

CFG a été intégré à SPIP 3

Dernière étape : dans le privé je ne vois pas d’entrée pour la configuration de SPIP-Bisous. Cela semble normal : j’ai lu que la plupart des fonctionnalités de base de CFG ont été intégrées à SPIP 3 et j’ai constaté qu’un logo de configuration vient à présent se poser dans la page d’administration des plugins, en regard des plugins à configurer.

Par comparaison avec d’autres plugins, je déduis que le fichier fonds/cfg_bisous.html doit être déplacé vers prive/exec/configurer_bisous.html pour être pris en compte.

Un commit plus tard, je constate qu’en effet, la page de configuration est désormais prise en compte. J’y ajoute un         <div class="formulaire_spip"> pour que cela soit un rien mieux intégré. J’ignore si la configuration est prise en compte par contre :-), ce sera pour plus tard... Par contre, je vois que ce formulaire n’utilise pas le mécanisme CVT de SPIP. Ce sera à adapter...

Reste à faire :
- vérifier si la configuration est enregistrée
- passer le form de configuration en CVT.


Pour la suite...

Voilà tout pour aujourd’hui. Outre les « Reste à faire ci-dessus », je constate encore que le plugin n’est pas fonctionnel à ce stade : un test de bisou sur une page auteur me renvoie une superbe page blanche :-)

Ce n’est pas une surprise, il va falloir descendre dans les entrailles du plugin.

A suivre...


[1A noter que plusieurs plugins ont une compatibilité qui s’étale à plusieurs versions de SPIP : 2.0, 2.1, 3.0 . Je suis trop ignorant pour gérer ça, ayant toujours reculé devant la création de pages privées dans SPIP 2.