Carnet Wiki

migrer plugin spip3

Version 3 — Juin 2011 JLuc

<blockquote class="spip">

- trucs et astuces pour le portage des plugins sous spip 3
-  trucs glanés à partir de l’analyse des commits de la zone qui signalent des adaptations du code pour compatibilité avec spip3.

Cette liste ouverte à tous : reportez y vos trucs et bonnes pratiques de portage des plugins vers spip3

Voir aussi : migrer un plugin vers spip2

</blockquote>

Logs avec niveaux

Le niveau de log doit être concaténé au nom du fichier de log.

exemple avec Dans http://zone.spip.org/trac/spip-zone/changeset/47826 :

<code >
_ spip_log(« ACTION ACTUALISER DEPOT (manuel) : id_depot = ». $id_depot, ’svp’) ;
devient
spip_log(« ACTION ACTUALISER DEPOT (manuel) : id_depot = ». $id_depot, ’svp_actions.’ . _LOG_INFO) ;

spip_log(« Categorie absente dans le paquet issu de <". $insert_paquet[’src_archive’] ."> du depot <" . $insert_paquet[’id_depot’] . ">\n », ’svp_paquets’) ;
devient
spip_log(« Categorie absente dans le paquet issu de <". $insert_paquet[’src_archive’] . "> du depot <" . $insert_paquet[’id_depot’] . ">\n », ’svp_paquets.’ . _LOG_INFO_IMPORTANTE) ;
</code >

Il y a d’autres niveaux de log :
-  
_LOG_ERREUR


http://zone.spip.org/trac/spip-zone/changeset/48226 apporte son lot d’éléments migrateurs :

Paginations  : Dans un fichier squelette du privé,
[<p class='pagination'>(#PAGINATION)</p>]
devient
[<p class='pagination'>(#PAGINATION{prive})</p>]

Nommages CSS  : La classe ’liste_items’ devient ’liste-items’ !!

Boutons du menu de la partie privée

Dans plugin.xml on supprime

<bouton id='corbeille' parent='configuration'> 
<titre>corbeille:corbeille</titre> 
<icone>img_pack/trash-full-24.png</icone> 
</bouton> 


et on ne laisse que

<bouton id='corbeille' parent='bando_administration'> 
<titre>corbeille:corbeille</titre> 
<icone>images/trash-full-16.png</icone> 
<url>corbeille</url> 
</bouton>        

Motclés

En spip3, les motclés sont gérés par une seule table pour tous les objets auxquels ils s’appliquent. Il faut donc transférer les contenus de toutes les tables de spécialisées vers la table générique.

exemple avec http://zone.spip.org/trac/spip-zone/changeset/48879

Lorsqu’un plugin crée un type d’objet qui bénéficie des motclés, ce transfert se traduit :
-  dans les déclarations des tables (une table de jointure spécialisée en moins, 2 déclarations de jointures en moins, une déclaration de table auxiliaire en moins)
Par exemple pour spip-lettre, on supprime :

	$spip_mots_lettres = array( 
	     "id_mot"                => "BIGINT (21) DEFAULT '0' NOT NULL", 
	     "id_lettre"             => "BIGINT (21) DEFAULT '0' NOT NULL" 
	); 
	$spip_mots_lettres_key = array( 
	     "PRIMARY KEY"   => "id_lettre, id_mot", 
	     "KEY id_mot"    => "id_mot" 
	); 

ainsi que

                $interface['tables_jointures']['spip_lettres'][] = 'mots_lettres'; 
                $interface['tables_jointures']['spip_lettres'][] = 'mots'; 

et

                $tables_auxiliaires['spip_mots_lettres'] =  
                        array('field' => &$spip_mots_lettres, 'key' => &$spip_mots_lettres_key); 

- dans la procédure d’upgrade : supprimer les anciennes tables de la nouvelle manière déclarative :

           include_spip('maj/svn10000'); 
           $maj['5.2'] = array( 
                  array('maj_liens','mot','lettre'), 
                  array('sql_drop_table',"spip_mots_lettres"), ...
            );

Auteurs

Il en est de même pour les auteurs que pour les motclés

exemple avec http://zone.spip.org/trac/spip-zone/changeset/48879

Procédure d’upgrade des plugins

Visiblement, un format déclaratif a été créé. Il permet de s’affranchir de faire les tests de versions DANS la fonction d’upgrade : on déclare seulement ce qui doit être fait dans les différents cas.

exemple avec http://zone.spip.org/trac/spip-zone/changeset/48879

On remplit $maj avec diverses fonctions d’upgrade standard ou faites sur mesure :

	$maj['0.1'] = array(  
		array('spip_lettres_update_meta',$version_plugin,$nom_meta_base_versio,$current_version,$version_cible),         
		array('spip_lettres_creer_repertoire_documents'), 
	); 
...
	$maj['3.8'] = array( 
		array('maj_tables',array('spip_lettres')), 
		array('sql_alter',"TABLE spip_lettres DROP idx"),        
		array('sql_drop_table',"spip_documents_lettres",true),
		array('spip_lettres_update_meta',$version_plugin,$nom_meta_base_versio,$current_version,$version_cible),                         
	); 

Ici la fonction ’spip_lettres_creer_repertoire_documents est définie sur mesure peu après :

function spip_lettres_creer_repertoire_documents() { 
	include_spip('inc/getdocument'); 
	creer_repertoire_documents('lettres'); 
} 

et à la fin on appelle

maj_plugin($nom_meta_base_version, $version_cible, $maj);