Overview
Artifact ID: | 5879f3d96e0b8c51cce7f7f882d654ea18235a10 |
---|---|
Page Name: | Plugins |
Date: | 2014-01-15 18:39:32 |
Original User: | bohwaz |
Parent: | cebec06382adb5796b6aa7c4257596a5560b2aaf (diff) |
Next | 162a9638cfd8be9ee17fa84711ad008a0cd57a1f |
Content
Idées sur une implémentation de plugins dans Garradin
- Chaque plugin est une archive PHAR
- Il a accès à l'intégralité des objets et classes de Garradin, et notamment DB
- Il n'a pas le droit de patcher les fichiers de Garradin ou d'autres plugins
- Lors de l'installation on va chercher dans l'archive PHAR un fichier install.php
- A accès à un objet Plugin pour lui faciliter la vie
- Pas de stockage de données autre que dans la DB du plugin
- Ajout de signaux ?
Objet Plugin
- Possibilité d'ajouter des éléments au menu principal (mais pas ses sous-menus ?)
- Possibilité de se brancher sur des signaux envoyés par les événements de Garradin genre ajout de membre etc. ?
- Renvoie un objet SQLite3 donnant sur une DB spécifique au plugin
Exemples de plugins possibles
- Export dans un format spécifique
- Création PDF de cartes d'adhérent
- Gestion de stock
- Point de vente (caisse)
- Import depuis un format spécifique
Structure archive PHAR
- icon.png : icône taille 16x16
- infos.ini : informations sur le plugin
- index.php : affiché quand on clique sur le plugin
- install.php (optionnel) : appelé lors de l'installation du plugin
- upgrade.php (optionnel) : appelé lors de la mise à jour du plugin, qu'elle soit une mise à jour vers une version supérieure ou inférieure (downgrade)
- uninstall.php (optionnel) : appelé lors de la suppression du plugin
- signals.php (optionnel) : appelé quand un signal enregistré est activé
Contenu de infos.ini
nom="Nom du plugin" description="Description courte du plugin" auteur="Nom de l'auteur" url="URL du site du plugin" version="Numéro de version" menu=0 ; ou 1 pour qu'une sous-entrée apparaisse dans le menu des plugins
Ces informations sont enregistrées dans la base de données de l'association
Méthodes de l'objet \Garradin\Plugin
- __construct()
- setConfig(string $key, string $value) : enregistre la configuration du plugin, si $value est null alors cette clé est effacée de la configuration
- getConfig(string $key) : récupère la valeur de la clé $key pour la configuration du plugin
- getInfos() : renvoie les informations enregistrées sur le plugin
Règles de base à respecter par les plugins
Sur l'installation des plugins :
- L'intégrité d'un plugin est vérifié en comparant son empreinte SHA-1 à celle contenue dans la liste fournie par le site de Garradin dans la liste des plugins officiels
- Si le plugin figure dans la liste mais son intégrité n'est pas correcte il ne sera pas possible d'installer le plugin
- Si le plugin ne figure pas dans la liste un message d'alerte et de demande de confirmation sera affiché avant installation (plugin non-officiel)
Sur les interactions avec la base de données :
- Un plugin peut créer une nouvelle table dans la base de données de Garradin à l'installation, mais il doit alors la supprimer à la désinstallation
- Un plugin ne peut pas créer de table en dehors de l'installation
- Un plugin peut lire les données des tables de Garradin
- Un plugin n'a pas le droit de modifier directement les tables de Garradin, seulement sa table propre
- Un plugin peut lire, modifier et supprimer les données de la base Garradin via les méthodes de Garradin
Sur les fichiers :
- Un plugin ne peut pas créer, éditer ou supprimer de fichier autre que temporaire
- Pour créer et gérer des fichiers un plugin doit utiliser la gestion de documents de Garradin
Sur la communication à l'extérieur :
- Un plugin ne devrait pas contacter un serveur distant sauf besoin spécifique.
- Un plugin ne doit pas contacter un serveur distant à des fins statistiques.
- Un plugin ne doit pas transmettre des informations sur la base de données ou son contenu, sauf cas spécifique.