[SPIP Zone] r16378 - in /_plugins_/_stable_/couteau_suisse: cout_options.php cout_utils.php exec/admin2.php inc/description_outil.php plugin.xml

* patfr@ifrance.com tapuscrivait, le 28/10/2007 00:29:

Author: patfr@ifrance.com
Date: Sun Oct 28 00:29:10 2007
New Revision: 16378

Log:
version 1.7.9.01 : gros bug sur version_compare(), donc on abandonne.

Est-ce que tu as fait un ticket pour expliciter ce bug ?

--
RealET

RealET a écrit :

* patfr@ifrance.com tapuscrivait, le

version 1.7.9.01 : gros bug sur version_compare(), donc on abandonne.

Est-ce que tu as fait un ticket pour expliciter ce bug ?

Ah beh non, c'est pas vrai, pff...
Il va falloir se mettre d'accord sur ce qui marche et sur ce qui marche pas là ;), sur comment on doit faire ou non :wink:

Tu peux expliquer ce qu'il se passe Pat ?

D'un autre côté, lire_meta et ecrire_metas() sont dans le bateau maintenant, ça peut être moins dramatique, on a juste à laisser les ecrire_metas() dans tests de version, mais quand même !

MM.

Matthieu Marcillaud a écrit :

RealET a écrit :

* patfr@ifrance.com tapuscrivait, le

version 1.7.9.01 : gros bug sur version_compare(), donc on abandonne.

Est-ce que tu as fait un ticket pour expliciter ce bug ?

Non, je n'ai pas fait de ticket pour l'instant.
version_compare est une fonction PHP et son comportement est peut-être propre à ma version...

Ah beh non, c'est pas vrai, pff...
Il va falloir se mettre d'accord sur ce qui marche et sur ce qui marche pas là ;), sur comment on doit faire ou non :wink:

Tu peux expliquer ce qu'il se passe Pat ?

Le Couteau Suisse tente de reste compatible avec toutes les versions de SPIP 1.9, sans l'aide de compat ou de vieilles_defs.

Voici déjà mes anciens jalons :

if (version_compare($GLOBALS['spip_version_code'],'1.93','>='))
  @define('_SPIP19300', 1);
if (version_compare($GLOBALS['spip_version_code'],'1.92','>='))
  @define('_SPIP19200', 1);
else @define('_SPIP19100', 1);

Bizarrement, ça ne fonctionnait pas. Plein d'erreurs sous SPIP 1.92.
La bonne syntaxe (en tout cas, chez moi...) aurait dû être :

if (version_compare($GLOBALS['spip_version_code'],'1.9300','>='))
  @define('_SPIP19300', 1);
if (version_compare($GLOBALS['spip_version_code'],'1.9200','>='))
  @define('_SPIP19200', 1);
else @define('_SPIP19100', 1);

Un peu circonspect, j'ai abandonné la fonction PHP version_compare et suis revenu à plus simple :

if ($GLOBALS['spip_version_code']>=1.93) @define('_SPIP19300', 1);
if ($GLOBALS['spip_version_code']>=1.92) @define('_SPIP19200', 1);
else @define('_SPIP19100', 1);

Quelques tests :

echo $GLOBALS['spip_version_code'], '-';
echo version_compare($GLOBALS['spip_version_code'],'1.9300','>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],'1.9200','>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],'1.93','>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],'1.92','>=')+1, '-';

résultat sous SPIP1.92 : 1.9207-1-2-2-2-
alors qu'on devrait avoir : 1.9207-1-2-1-2-
résultat sous SPIP1.93, OK par hasard : 1.9300-2-2-2-2-

Si on met a comparaison sur des nombres, c'est encore pire :

echo $GLOBALS['spip_version_code'], '-';
echo version_compare($GLOBALS['spip_version_code'],1.9300,'>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],1.9200,'>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],1.93,'>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],1.92,'>=')+1, '-';

donne sous SPIP 1.92 : 1.9207-2-2-2-2- !!

Pat

Pat

RealET a écrit :

Log:
version 1.7.9.01 : gros bug sur version_compare(), donc on abandonne.

Est-ce que tu as fait un ticket pour expliciter ce bug ?

D'ailleurs, à voir si la ligne :

if (version_compare($GLOBALS['spip_version_code'],'1.92','<')){

dans les différents fichiers de forms&table est erronée ou non.

Pat

Pat a écrit :

Quelques tests :

echo $GLOBALS['spip_version_code'], '-';
echo version_compare($GLOBALS['spip_version_code'],'1.9300','>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],'1.9200','>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],'1.93','>=')+1, '-';
echo version_compare($GLOBALS['spip_version_code'],'1.92','>=')+1, '-';

Si je comprends en fait, version compare compare les nombres entre chaque "."

dans la version spip 1.9207, comparé à 1.93, il compare 1 à 1 puis 9207 à 93...
Si l'écriture était 1.9.2.7 et 1.9.3, c'eut fonctionné.

La bonne méthode est effectivement d'avoir une écriture sur 4 chiffres de 1.9300 : version_compare($GLOBALS['spip_version_code'],'1.9300','>=')

SPIP 2.0 qui lui aura des vraies . partout (2.0.x) (si si, un jour !) ne devrait pas poser de problème si on laisse cette écriture (4 chiffres après le . 9300) car version_compare comparera en premier 2 (de 2.0.x) avec 1 de (1.9300) ...

Petit test pour s'en convaincre :

<?php
function version_test($val,$val2,$op){
  echo "$val $op $val2 : " . (version_compare($val,$val2,$op)?'vrai':'faux') . '<br />';
}

version_test('1.9207','1.93','>=');
version_test('1.9207','1.9300','>=');
version_test('2.0.1','1.9300','>=');
version_test('2.0.1','1.93','>=');
?>

1.9207 >= 1.93 : vrai <--- Pas Bon là !
1.9207 >= 1.9300 : faux
2.0.1 >= 1.9300 : vrai
2.0.1 >= 1.93 : vrai

Conclusion :
Spip version_compare est la solution magique, si on pense bien à mettre 4 chiffres après le . pour SPIP version < 2.x ! (visionnaire moi ?)

Exemple de chose utile jusqu'à peu de temps sur la svn :

version_compare($GLOBALS['spip_version_code'],'1.9300','<') ? ecrire_metas();

Matthieu.