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.