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.

    pour suivre...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

 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. // http://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 existant depuis 2007, et compatible avec toutes les versions de SPIP depuis la première version introduisant les plugins (la 1.9.2 pour mémoire) 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


Merci de nous signaler les coquilles 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 visibles seulement pour les inscrits.
    pour suivre...

Article publié le 7 mars 2015, et actualisé en avril 2015 .

Répondre à cet article