Création d’un nouveau plugin

Préambule

Le mécanisme de plugins est jeune dans l’histoire de MedShakeEHR. Il a été introduit dans la version 6.6.0.
Le but est double :
 ne plus distribuer systématiquement des fonctionnalités qui ne seraient pas utiles à tous
 versionner ces composants spécifiques

Il est susceptible d’évoluer encore pour répondre à de nouveaux besoins.

Nom du plugin

Le plugin doit être désigné en interne par un nom court suffixé par Plugin, sans lettre accentuée ou caractère spécifique ( ce qui peut être résumé ainsi [a-zA-Z0-9]{1,20}Plugin ).

Ce nom ne doit pas être redondant avec un autre et être le plus informatif possible sur le contenu du plugin.

Distribution pour installation automatisée

Le plugin doit être distribué sous forme d’un fichier zip.

Arborescence des fichiers du plugin

Il convient de s’inspirer des repositories existants pour déterminer l’arborescence à mettre en place pour le plugin.

Fichiers de base

/config/plugins/nomDuPlugin/aboutPluginNomduplugin.yml
/config/plugins/nomDuPlugin/sqlInstall.sql
/COPYING.txt
/.pluginMedShakeEHR

/config/plugins/nomDuPlugin/aboutPluginNomduplugin.yml

Ce fichier en yaml comporte les informations sur le plugin.

version: v0.0.3
nom: 'Fake Plugin'
auteurs:
  'Bertrand Boutillier': 'https://www.medshake.net/membre/1/'
licence: 'GPL v3'
description: 'Pseudo plugin pour démo'
documentation: 'https://www.logiciel-cabinet-medical.fr/'
sources: 'https://github.com/MedShake/MedShakeEHR-base'

Ce fichier doit être rempli le plus complètement possible. Le numéro de version est indispensable ainsi que le nom.

/config/plugins/nomDuPlugin/sqlInstall.sql

C’est un dump SQL qui comprend l’intégralité des données en base nécessaire à l’installation du plugin et à son exécution.

Son contenu minimal comporte la ligne d’enregistrement du plugin dans le système

INSERT IGNORE INTO <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+c3lzdGVtPC9jb2RlPg=="></span> (<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bmFtZTwvY29kZT4="></span>, <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+Z3JvdXBlPC9jb2RlPg=="></span>, <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+dmFsdWU8L2NvZGU+"></span>) VALUES
('FakePlugin', 'plugin', 'v0.0.1');

/.pluginMedShakeEHR

Fichier caché qui permet d’identifier un zip valide au moment de l’installation du module par glisser-déposer. Il doit contenir impérativement le nom du plugin (cf plus haut sur le choix du nom) sur sa première ligne et uniquement cela.

/COPYING.txt

Copie de la licence de distribution, a priori GPL v3.

Autres fichiers

Les autres fichiers sont à déployer suivant les besoins et selon les recommandations de l’article Base, modules et plugins : principes et fonctionnement.

Mise à jour du plugin

Quand le plugin est mis à jour, les composantes de base doivent être ajustées pour refléter la version courante (numéro de version dans le fichier about, fichier sql d’installation ...). Ces composantes seront utilisées si l’installation sur laquelle le plugin est déployé ne comporte pas encore de version antérieure.

Si une version antérieure est détectée, les fichiers de cette version seront remplacés en intégralité par le jeu de fichiers du zip.
Par contre le fichier sql d’installation ne sera pas rejoué.
C’est un fichier du type /config/plugins/nomDuPlugin/sqlUpgrade_v0.0.1_v0.0.2.sql qui devra être présent pour assurer les ajustements sql nécessaires. Parfois cela sera uniquement pour mettre à jour le numéro de version du plugin en base.

Notez que si le plugin n’a pas été mis à jour et qu’il existe des versions intermédiaires entre la version en place et celle fournie par le fichier zip, tous les fichiers sql des mises à jour intermédiaires seront joués les uns après les autres, dans l’ordre ascendant des versions.

Contenu minimal d’un fichier d’upgrade de version :

UPDATE <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+c3lzdGVtPC9jb2RlPg=="></span> SET <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+dmFsdWU8L2NvZGU+"></span>='v0.0.2' WHERE <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bmFtZTwvY29kZT4="></span>='fakePlugin' and <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+Z3JvdXBlPC9jb2RlPg=="></span>='plugin';
 

Article précédent

 

Article suivant

Réponses à quelques problèmes

F.A.Q. installation