Les constantes de versions de SPIP

  Et les fonctions utiles pour s’en servir

SPIP est un produit vivant, initié au siècle dernier [1] qui a déjà de nombreuses additions : certaines fonctionnalités techniques doivent parfois être testées dans les squelettes et plus souvent dans le code php des plugins.

Article publié le 7 mars 2015, et actualisé en novembre 2021

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Attention, cette page est encore en  

Rappelons d’abord que la distribution de SPIP téléchargée contient toujours à sa racine un petit fichier texte svn.version contenant les indications de date, revision et version titrée utilisées, mais que la variable php faisant foi et affichée dans le pied de l’espace privé est définie dans ./ecrire/inc_version.php[290..] avec deux indications, par exemple :

  • $spip_version_code = 17873;
  • $spip_version_code = 17873 ;

Nota Bene : ne pas confondre avec la ligne de définition que vous avez déjà vue sans doute, if (!defined('_ECRIRE_INC_VERSION')) return; qui sert essentiellement à garantir et sécuriser les bonnes initialisations de SPIP.
Noter qu’il existe également un numéro de version pour identifier les niveaux de schéma de La structure de base de données de SPIP 3 !

 Une fonction de test officielle

Comme les fonctions du core peuvent voir apparaître des nouveautés, ou de vieilles_definitions, les "devs" de la "Team" offrent une fonction ’officielle’ pour gérer ces soucis de compatibilité, avec (malheureusement) deux implantation successives : un exemple d’appel sera assez explicite :

  1.         include_spip('plugins/installer'); // spip_version_compare dans SPIP 3.x
  2. include_spip('inc/plugin'); // spip_version_compare dans SPIP 2.x
  3. //  https://doc.spip.org/@spip_version_compare (n'exsiste pas!)
  4. if (spip_version_compare($GLOBALS['spip_version_branche'], '3.0.', '>=')) {
  5.                 define('_SPIP3', true);
  6. } else {
  7.                 define('_SPIP3', false);
  8. }

Télécharger

La documentation se trouve dans le source

/**
* Compare 2 numeros de version entre elles.
*
* Cette fonction est identique (arguments et retours) a la fonction PHP
* version_compare() qu'elle appelle. Cependant, cette fonction reformate
* les numeros de versions pour améliorer certains usages dans SPIP ou bugs
* dans PHP. On permet ainsi de comparer 3.0.4 a  3.0.* par exemple.
*
* @param string $v1
*         Numero de version servant de base a la comparaison.
*         Ce numero ne peut pas comporter d'etoile.
* @param string $v2
*         Numero de version a comparer.
*         Il peut posseder des etoiles tel que 3.0.*
* @param string $op
*         Un operateur eventuel (<, >, <=, >=, =, == ...)
* @return int|bool
*         Sans operateur : int. -1 pour inferieur, 0 pour egal, 1 pour superieur
*         Avec operateur : bool.
**/

 Définition du CS

Le Couteau suisse existe depuis 2007, et reste compatible avec toutes les versions de SPIP depuis la première version introduisant les plugins (la 1.9.2 pour mémoire) ; il est forcé de gérer les compatibilités depuis l’origine des plugins : avant l’introduction du système ci-dessus, il définit donc diverses constantes dans sa fonction d’options :

  1. // constantes de compatibilite
  2. // (pour info : SPIP 2.0 => 12691, SPIP 2.1 => 15133, SPIP 2.2 => ??, , SPIP 3.0 => 17743)
  3. if ($GLOBALS['spip_version_code']>=17743)
  4.         { @define('_SPIP30000', 1); @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
  5. elseif (!strncmp($GLOBALS['spip_version_affichee'],'2.2',3))
  6.         { @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
  7. elseif ($GLOBALS['spip_version_code']>=15133)
  8.         { @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
  9. elseif (version_compare($GLOBALS['spip_version_code'],'1.9300','>='))
  10.         { @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
  11. elseif (version_compare($GLOBALS['spip_version_code'],'1.9200','>=')) {
  12.         @define('_SPIP19200', 1);
  13.         if(!function_exists('test_espace_prive')) {
  14.                 function test_espace_prive() { return defined('_DIR_RESTREINT') ? !_DIR_RESTREINT : false; }
  15.         }
  16. } else @define('_SPIP19100', 1);

D’autres plugins auront pu suivre cette pratique (parfois utilisant les mêmes constantes sans définition identique, ce qui peut poser problème.. cf.le cas de SpipBB) ; pour les nouvelles écritures, il sera préférable de revenir à la ’norme officielle’ !

 A l’usage dans un squelette

La balise #SPIP_VERSION permet déjà d’afficher dans vos squelettes la version de branche SPIP utilisée ; si vous voulez conditionner une partie de vos squelettes (pour un thème ou un plugin, par exemple) à un niveau de version minimal, vous devriez pouvoir utiliser le filtre [2]
spip_version_compare comme suit :
[ SPIP 3 (#SPIP_VERSION|spip_version_compare{ '3.0.', '>='}|oui)  OK ]
mais SPIP n’accède pas à la fonction, car normalement il n’en a pas besoin pour compiler les squelettes ; un contournement possible, rajouter les deux lignes d’appel dans un fichier mes_fonctions :

  1. <?php
  2.  
  3. // pour utiliser   spip_version_compare
  4.         include_spip('plugins/installer'); // spip_version_compare dans SPIP 3.x
  5.        include_spip('inc/plugin'); // spip_version_compare dans SPIP 2.x
  6. ?>

Télécharger

Et rappelez-vous plus généralement, pour utiliser une constante définie sous Php dans un squelette, la balise #EVAL est votre amie, comme cet exemple :
        [(#SET{dir_squelettes_dist,[(#EVAL{_DIR_SQUELETTES_DIST})]})]


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1un millénaire passé, le siècle dernier, même en informatique ;-)

[2Un squelette peut, après une Balise SPIP faire appel à toute fonction définie dans php, son premier argument étant fourni par la balise de champ.

[3un millénaire passé, le siècle dernier, même en informatique ;-)


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 7 mars 2015, et actualisé en novembre 2021 technique .

Répondre à cet article