Créer un fichier de désinstallation pour son plugin
Par JcDenis le vendredi 28 août 2009, 16:10 - Help - Lien permanent
Ce billet va vous permettre de créer facilement un fichier de désinstallation pour votre plugin Dotclear 2 en utilisant le plugin dcAdvancedCleaner.
Tout d'abords il faut savoir que seules les plateformes aillant le plugin dcAdvancedCleaner installé pouront bénéficier des fonctions avancées décrites ici.
Afin d'utiliser la désinstallation avancée d'une extension, il suffit créer à la racine de l'extension un fichier _uninstall.php qui ressemble beaucoup au fichier _define.php. Ce fichier contiendra tous les appels aux actions prédéfinies de désinstallation ou aux fonctions de callbacks particulières à une extension.
Les actions "direct" ou "user":
Il y a deux familles d'action:
- les actions dites "direct" seront lancées lors de la suppression d'une extension depuis le menu des extensions.
- les actions dites "user" seront proposées à l'utilisateur depuis l'onglet de désinstallation.
Les fonctions :
Les 4 fonctions à utiliser dans le fichier _uninstall.php sont:
1) "addUserAction" :
Cela permet d'ajouter un action que l'utilisateur peut choisir d'effectuer ou non lors de la désinstallation de l'extension.
2) "addUserCallback" :
Cela permet d'ajouter un fonction de désinstallation propre à l'extension que l'utilisateur peut choisir d'effectuer ou non lors de la désinstallation de l'extension.
3) "addDirectAction" :
Lance automatiquement une action lors de la suppression d'une extension (à travers le menu Extensions de Dotclear)
4) "addDirectCallback" :
Lance automatiquement une fonction lors de la suppression d'une extension (à travers le menu Extensions de Dotclear)
Ceci revient pratiquement à utiliser le behavior "pluginsBeforeDelete".
Les fonctions "Action" sont construites suivant le modèle :
addUserAction( type , action , ns , description );
avec :
- type : un type prédéfinie d'action,
- action : l'action associée à ce type,
- ns : l'espace de nom associer à cette action (par exemple le namespace d'un settings, ou le nom d'une table)
- description : la description de l'action
Les fonctions "Callback" sont construites suivant le modèle :
addUserCallback( callback , description );
avec :
- callback : la fonction à appeler. (cela peut être un table pour la fonction d'une classe)
- description : la description du callback
Les actions :
Il y a 6 types d'action utilisables dans les fonctions "addUserAction" et "addDirectAction" :
1) "settings" :
Concerne les paramètres enregistrés avec $core->blog->settings
Ce type accepte les actions suivantes :
- "delete_global" : pour effacer un espace de nom global,
- "delete_local" : pour effacer un espace de nom local,
- "delete_all" : pour effacer un espace de nom dans son ensemble.
Remarque: Dans sa version 0.1 dcAdvancedCleaner n'efface que les paramètres "global" et du blog en cours avec l'action "delete_all", les paramètres relatif aux autres blogs ne sont pas pris en compte. Dans les versions suivantes "delete_all" efface l'espace de nom pour tous les blogs et en global.
2) "tables" :
Concerne les tables de la base de donnée Dotclear.
Ce type accepte les actions suivantes:
- "delete" : pour supprimer complètement un table,
- "empty" : pour vider un table
3) "plugins" :
Concerne tous les dossiers des repertoires des plugins.
Ce type accepte les actions suivantes:
- "delete" : pour supprimer un dossier et son contenu
- "empty" : pour effacer le contenu d'un dossier (pas très utile?)
4) "themes" :
Concerne tous les dossiers du repertoire de thème (pour l'instant uniquement du blog en cours)
Ce type accepte les mêmes actions que le 3).
5) "caches" :
Concerne tous les dossiers du repertoire concerné dans le repertoire de cache de Dotclear
Ce type accepte les mêmes actions que le 3).
6) "versions" :
Concerne l'enregistrement dans la table version de Dotclear.
Ce type accepte le paramètre "delete".
Les callbacks :
Le paramètre passé aux callbacks est un tableau contenant les informations de l'extension provenant de son fichier _define.php. seules les le valeurs communes aux plugins et aux thèmes sont retransmises : root, name, desc, author, version, root_writable. Bien entendu si le callback est effectué sur la fonction d'une classe, cette fonction doit être "static".
Quelques remarques :
- Si une extension à des actions/callbacks directes alors la fonction de suppression de plugin de Dotclear n'effacera pas les fichiers de cette extension, il faut ajouter la procédure avec addDirectAction('plugins','delete'....) au fichier _unsintall.php
- Ne faites pas appel à une fonction de callback qui se situe dans le repertoire de votre extension après avoir lancé l'effacement des fichiers de l'extension, sinon cela causera une erreur fatal.
- Pour les thèmes et les settings lorsqu'on parle de local, seules les propriétés du blog en cours seront prises en compte.
Exemple de fichier _uninstall.php :
<?php
if (!defined('DC_CONTEXT_ADMIN')){return;}
# Delete settings
$this->addUserAction(
/* type */ 'settings',
/* action */ 'delete_all',
/* ns */ 'monploug',
/* description */ __('delete all settings')
);
# Delete plugin
$this->addUserAction(
/* type */ 'plugins',
/* action */ 'delete',
/* ns */ 'monPloug',
/* description */ __('delete plugin files')
);
# Call function to delete related plop in post table
$this->addUserCallback(
/* func*/ array('libMonPlougUninstaller','removeRelatedPlop'),
/* description */ __('delete all related plop in post table')
);
# Delete settings
$this->addDirectAction(
/* type */ 'settings',
/* action */ 'delete_all',
/* ns */ monploug,
/* description */ __('delete all monploug settings')
);
# Delete plugin
$this->addDirectAction(
/* type */ 'plugins',
/* action */ 'delete',
/* ns */ 'monPloug',
/* description */ __('delete mon ploug files')
);
?>
...
Évaluer ce billet
- Note : 0
- Votes : 0
