[SPIP Zone] Désinstallation automatique de plugin

Bonjour,

en lisant les nouveautés de la 1.9.2, je vois qu'il est possible de prévoir une désinstallation automatique des plugins.
Y a-t-il une doc quelques part à ce sujet ? Ou un exemple ?

Cordialement,

--
_________________________________
        Olivier Gautier
   Professeur de Mathématiques
     Personne Ressource TICE
       Académie de Rouen
Equipe de développement EVA-Web
_________________________________

Olivier Gautier a écrit :

Bonjour,

en lisant les nouveautés de la 1.9.2, je vois qu'il est possible de prévoir une désinstallation automatique des plugins.
Y a-t-il une doc quelques part à ce sujet ? Ou un exemple ?

Cordialement,

dans plugin.xml :

<install>base/xxx_upgrade.php</install>

et dans xxx_uprgrade.php, par exemple :
function xxx_install($action){
    switch ($action){
        case 'test':
            return (isset($GLOBALS['meta']['xxx_base_version']) AND ($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));
            break;
        case 'install':
            xxx_upgrade();
            break;
        case 'uninstall':
            xxx_vider_tables();
            break;
    }
}

En faisant les methodes upgrade et install qui vont bien.

@++

spipcarto a écrit :

Olivier Gautier a écrit :
  

Bonjour,

en lisant les nouveautés de la 1.9.2, je vois qu'il est possible de prévoir une désinstallation automatique des plugins.
Y a-t-il une doc quelques part à ce sujet ? Ou un exemple ?

Cordialement,

dans plugin.xml :

<install>base/xxx_upgrade.php</install>

et dans xxx_uprgrade.php, par exemple :
function xxx_install($action){
    switch ($action){
  
        case 'test':
            return (isset($GLOBALS['meta']['xxx_base_version']) AND ($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));
            break;
  

Désolé, mais j'suis un peu largé là :

(isset($GLOBALS['meta']['xxx_base_version']) AND ($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));

C'est quoi l'idée ? ou encore, elle correspondent à quoi ces variables globales et où sont-elles définies ?

        case 'install':
            xxx_upgrade();
            break;
        case 'uninstall':
            xxx_vider_tables();
            break;
  

Là je vois, pas de problème.

En tout cas, merci pour la réponse, cordialement,

--
_________________________________
        Olivier Gautier
   Professeur de Mathématiques
     Personne Ressource TICE
       Académie de Rouen
Equipe de développement EVA-Web
_________________________________

On 2/27/07, Olivier Gautier <olivier.gautier@ac-rouen.fr> wrote:

> case 'test':
Désolé, mais j'suis un peu largé là :

(isset($GLOBALS['meta']['xxx_base_version']) AND
($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));

C'est quoi l'idée ? ou encore, elle correspondent à quoi ces variables globales et où sont-elles définies ?

Si j'ai bien interpreté la chose, c'est un test pour voir si la
version des fichiers installés est compatibles avec la version des
données déjà existantes. Pour tester s'il y a besoin de faire un
upgrade de la base ou pas.

donc, xxx_base_version serait un meta mis en place à la dernière
installation/mise à jour par ton plugin pour savoir quelle version de
la base est installée. Comme cela, si le schéma a changé entre 2
versions du plugin, alors tu sais qu'il faut faire une mise à jour de
la base aussi.
Et ça doit être à ce moment que le cas upgrade est appelé.

Tout cela reste à verifier dans les plugins d'exemples qui
implêmentent déjà cela (lesquels?)

-------------

Sur la fonctions de desinstall, je me pose une question: on vide la
base ou pas? et si on la vide, est-ce qu'il y a moyen d'offrir à
l'utilisateur l'opportunité de faire un backup des données du plugins
avant leur effacement (i.e. les fonctions de backup de spip sont-elles
facilement accessible)?

Pierre

--
Pierre Andrews
Ph.D. Student, The University of York
Ing.info.dipl. EPFL
pierre.andrews@a3.epfl.ch
http://www.cs.york.ac.uk/~pandrews

Spip peut prendre en charge la fonction _install si elle est pas definie, et que la version_base est definie dans plugin.xml
Ceci conduit a un code encore plus simple cote plugin,
cf ls plugins cheklink ou acces_restreint dans leurs dernieres versions pour des exemples complets
Cedric

Olivier Gautier a écrit :

spipcarto a écrit :
  

Olivier Gautier a écrit :
  

Bonjour,

en lisant les nouveautés de la 1.9.2, je vois qu'il est possible de prévoir une désinstallation automatique des plugins.
Y a-t-il une doc quelques part à ce sujet ? Ou un exemple ?

Cordialement,

dans plugin.xml :

<install>base/xxx_upgrade.php</install>

et dans xxx_uprgrade.php, par exemple :
function xxx_install($action){
    switch ($action){
  
        case 'test':
            return (isset($GLOBALS['meta']['xxx_base_version']) AND ($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));
            break;
  

Désolé, mais j'suis un peu largé là :

(isset($GLOBALS['meta']['xxx_base_version']) AND ($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));

C'est quoi l'idée ? ou encore, elle correspondent à quoi ces variables globales et où sont-elles définies ?

        case 'install':
            xxx_upgrade();
            break;
        case 'uninstall':
            xxx_vider_tables();
            break;
  

Là je vois, pas de problème.

En tout cas, merci pour la réponse, cordialement,

Sur la fonctions de desinstall, je me pose une question: on vide la
base ou pas? et si on la vide, est-ce qu'il y a moyen d'offrir à
l'utilisateur l'opportunité de faire un backup des données du plugins
avant leur effacement (i.e. les fonctions de backup de spip sont-elles
facilement accessible)?
  

La desactivation ne provoque pas l'appel a la desinstallation. Par defaut, quand on decoche un plugin, ca ne touche pas a la base.
Pour desinstaller, il faut cliquer sur le paquet a droite des plugins qui supportent la deinstallation, puis sur le 'Effacer TOUT' qui apparait (et qui porte bien son nom).

Sinon, le backup de SPIP sauvegarde toutes les tables des plugins actifs (y compris les meta dorenavant).
Cedric

Pierre Andrews a écrit :

On 2/27/07, Olivier Gautier <olivier.gautier@ac-rouen.fr> wrote:
  

        case 'test':
      

Désolé, mais j'suis un peu largé là :

(isset($GLOBALS['meta']['xxx_base_version']) AND
($GLOBALS['meta']['xxx_base_version']>=$xxx_base_version));

C'est quoi l'idée ? ou encore, elle correspondent à quoi ces variables globales et où sont-elles définies ?
    
Si j'ai bien interpreté la chose, c'est un test pour voir si la
version des fichiers installés est compatibles avec la version des
données déjà existantes. Pour tester s'il y a besoin de faire un
upgrade de la base ou pas.
  

pour faire court :
Si il y a une directive install dans plugin.xml, Spip utilisera la fonction xxx_install dans le fichier specifié.
A l'activation du plugin, elle est appelée avec le parametre "install" et le petit icone à droite dans la page admin_plugins fait apparaitre un lien désinstaller tout.
Lorsqu'on clique sur ce lien, la fonction xxx_install est appelée avec le parametre "uninstall".

A toi de gerer ce que tu veux derriere.

Cedric gere dans ses plugins une version de base de données, ca me parait tres bien, donc je fais en general pareil (enfin, quand il y a des trucs à mettre en base de données).

donc, xxx_base_version serait un meta mis en place à la dernière
installation/mise à jour par ton plugin pour savoir quelle version de
la base est installée. Comme cela, si le schéma a changé entre 2
versions du plugin, alors tu sais qu'il faut faire une mise à jour de
la base aussi.
  

oui

Et ça doit être à ce moment que le cas upgrade est appelé.
  

à l'installation aussi => l'upgrade depuis rien etant le premier cas.

Tout cela reste à verifier dans les plugins d'exemples qui
implêmentent déjà cela (lesquels?)
  

Forms&table, spip-listes et agenda doivent utiliser ce systeme

-------------

Sur la fonctions de desinstall, je me pose une question: on vide la
base ou pas?

oui, c'est le principe : suppression complete.
Si tu veux désactiver sans detruire, tu désactives simplement le plugin.

et si on la vide, est-ce qu'il y a moyen d'offrir à
l'utilisateur l'opportunité de faire un backup des données du plugins
avant leur effacement (i.e. les fonctions de backup de spip sont-elles
facilement accessible)?
  

Les données sont toutes dans le backup si les tables sont bien déclarées dans Spip.
Il faut donc veiller à activer les plugins avant d'importer les données quand on veut restaurer une base sur une installation vierge.

@++

Tout d"abord, merci pour cette réponse.

spipcarto a écrit :

Les données sont toutes dans le backup si les tables sont bien déclarées dans Spip.
  

Une question supplémentaire : comment fait-on pour déclarer une table supplémentaire dans la base de données à SPIP ?

Cordialement,

--
_________________________________
        Olivier Gautier
   Professeur de Mathématiques
     Personne Ressource TICE
       Académie de Rouen
Equipe de développement EVA-Web
_________________________________

Olivier Gautier a écrit :

Tout d"abord, merci pour cette réponse.

spipcarto a écrit :

Les données sont toutes dans le backup si les tables sont bien déclarées dans Spip.
  

Une question supplémentaire : comment fait-on pour déclarer une table supplémentaire dans la base de données à SPIP ?

regarde dans les /base/ des plugins.
par exemple :

(sauf choses_possibles => c'est pour mots_partout)

@++