comparer les numéros de versions

Bonjour

Dans mon plugin escal, je voudrais pouvoir afficher si on a la dernière version ou s’il y a une version disponible plus récente.

Sachant que pour une version 4.4.11

#PLUGIN{escal, version}
affiche 4.4.11

#VERSION
affiche 004.004.011

[(#VERSION|replace{0})]
affiche 4.4.11

[(#VAL{/.0*/}|preg_replace{’.’,#VERSION}|ltrim{0})]
affiche 4.4.11

Avec beaucoup d’aide je suis arrivé à ça

<BOUCLE_version(spip_paquets){prefixe=ESCAL}{!par version}{0,1}>

[(#VERSION|replace{0}|>{#PLUGIN{escal, version}}|oui)

<:escal:version_maj:> [(#VAL{/\.0*/}|preg_replace{'.',#VERSION}|ltrim{0})]
] [(#VERSION|replace{0}|>{#PLUGIN{escal, version}}|non)
<:escal:version_ok:>
]

Mais avec ce code la version 4.4.8 est considérée comme supérieure à la 4.4.11

Donc quelques questions :

  • comment faire pour que la 4.4.11 soit bien vue comme supérieure à la 4.4.8 ?

  • quelle différence entre [(#VERSION|replace{0})] et [(#VAL{/.0*/}|preg_replace{’.’,#VERSION}|ltrim{0})] ?

  • ne serait-ce pas plus simple de transformer #PLUGIN{escal, version} de 4.4.11 et 004.004.011 pour la comparaison ensuite (mais avec quelle regex ?) ?

Merci pour l’aide

JC

Bonjour,

A mon avis tu prends le pb à l’envers. Si tu veux faire du tri numérique, il ne faut pas supprimer les 0 à gauche mais au contraire ajouter ceux qui manquent pour que tout soit au format

#VERSION
affiche 004.004.011

De la sorte tu auras

#VERSION
affiche 004.004.008 < 004.004.011

myAvatar-60x60.png

C’était bien le sens de ma dernière question JC

myAvatar-60x60.png

Ce qui signifie que tu dois trouver la méthode en SPIP pour l’équivalent

  1. $tab=explode(#VERSION, ‹ . ›);

  2. $a = $tab[0]; $b = $tab[1]; $c = $tab[c];

  3. #VERSION = CONCATENATE("[%03$a]",".","[%03$b]",".","[%03$c]");

myAvatar-60x60.png

Erreur de ma part en votre faveur.

Recevez la bonne équation :wink:

myAvatar-60x60.png

Il faut utiliser les fonctions prévues pour :
- version_compare de php
- ou mieux : spip_version_compare de spip
https://code.spip.net/autodoc/tree/ecrire/plugins/installer.php.html#function_spip_version_compare

JL

Hmm j’ai essayé de rajouter ça dans ma page

<?php $tab=explode(#VERSION, '.'); $a = $tab[0]; $b = $tab[1]; $c = $tab[2]; #VERSION = CONCATENATE("[%03$a]",".","[%03$b]",".","[%03$c]"); ?>

version : #VERSION

mais plus rien ne s’affiche du coup
Pas de souci avec

<?php echo "

bonjour monde

"; ?>

version : #VERSION

Il doit donc y avoir un problème dans ton code, non ?
Je dirais que #VERSION ne siginifie rien en php mais bon, je suis nul en php

JC

myAvatar-60x60.png

Ben oui, je m’a gouré

pour explode, c’est impérativement le séparateur en 1°. :grimacing:

donc

$tab=explode(’.’, #VERSION);
$a = $tab[0]; $b = $tab[1]; $c = $tab[2];

$array = ("[%03$a]","[%03$b]","[%03$c]");

#VERSION = implode(".",$array);

myAvatar-60x60.png

hmm la première ligne fait ecore tout péter.

Et attention, moi ce que je voudrais c’est plutôt transformer #PLUGIN{escal, version} de 4.4.11 et 004.004.011

et pas #VERSION qui s’affiche déjà en 004.004.011

JC

myAvatar-60x60.png

Bonjour,

STOP !
JLuc a donné la réponse.

Merci pour la liste

--
RealET

Bon,

JLuc t’a donné les fonctions compare_version, je pense que ce sera plus efficace que mes bricolages de php vs SPIP…

myAvatar-60x60.png

ok mais comment l'utilise-t-on dans un squelette ?

JC

Le 17/04/2021 à 12:16, JLuc a écrit :

Il faut utiliser les fonctions prévues pour :
- version_compare de php
- ou mieux : spip_version_compare de spip
https://code.spip.net/autodoc/tree/ecrire/plugins/installer.php.html#function_spip_version_compare

JL

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Je pense que c'est bon avec

<BOUCLE_version(spip_paquets){prefixe=ESCAL}{!par version}{0,1}>
[(#PLUGIN{escal, version}|spip_version_compare{#VERSION, '>='}|non)
<h5><:escal:version_maj:> [(#VERSION|replace{0})] </h5>
]
[(#PLUGIN{escal, version}|spip_version_compare{#VERSION, '>='}|oui)
<h5><:escal:version_ok:></h5>
]
</BOUCLE_version>

Quelqu'un pour confirmer ?

JC

Le 17/04/2021 à 16:03, Jean-Christophe Villeneuve a écrit :

ok mais comment l'utilise-t-on dans un squelette ?

JC

Le 17/04/2021 à 12:16, JLuc a écrit :

Il faut utiliser les fonctions prévues pour :
- version_compare de php
- ou mieux : spip_version_compare de spip
https://code.spip.net/autodoc/tree/ecrire/plugins/installer.php.html#function_spip_version_compare

JL

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc