Bonjour,
Je souhaiterais avoir une méthode de « post installation » de mes plugins, donc juste après le download et le move des fichiers, que ce soit après une première installation ou une mise à jour.
Un premier cas d’usage, mais il y en aura peut-être d’autres: installer les dépendances composer.
Je sais que cela peut aussi être fait via le core et le packages.json mais dans mon cas ca n’est pas possible notamment car je veux créer une venv python même sous debian 11 ce qui n’est pas possible avec le core donc j’utilise exclusivement la méthode « install_apt.sh » (et c’est une hypothèse de base qui ne changera pas).
Une deuxième raison c’est que je ne veux pas que le composer.lock soit touché, les dépendances doivent être installées tels que défini dans le composer.lock.
Pour répondre à ce besoin:
-
j’ai essayé avec la fonction
[plugin]_install()
deplugin_info\install.php
mais c’est trop tard car le core charge déjà la class et si les fichiers requis ne sont pas là, ca crash jeedom (http 500 et il est mort); étrangement sous php8 ca passe. -
J’ai testé la fonction
[plugin]_pre_update()
deplugin_info\pre_install.php
mais ca ne convient pas car cette fonction ne s’exécute que lors de mise à jour et exécute l’ancienne version de la fonction.
D’ailleurs le sujet a déjà été abordé, mais je ne vois pas comment cette fonction peut-être utilisée même lors de mise à jour puisque le problème est qu’elle exécute le code de la version précédente du plugin car les nouveaux fichiers n’ont pas encore été déplacé à la destination finale. -
du coup j’ai créé (sur ma dev) une méthode
[plugin]_post_install()
:
- appelée vers la fin de
update::postInstallUpdate()
- qui pour l’instant se trouve dans le fichier
plugin_info\pre_install.php
(la logique que j’ai appliquée est que ce fichier contient des fonctions qui s’exécutent avant les fonctions deplugin_info\install.php
) mais à valider si emplacement ok? - je vous accorde que donc au final on aura « quelque part » une fonction qui se nomme
[plugin]_post_install()
qui en fait va s’exécuter avant la fonction[plugin]_install()
(qui devrait être renommée[plugin]_activate()
je trouve)
j’ai hésité quelques secondes avec des noms tel que « post_pre_install » ou « pre_post_install »… on va encore voir des devs râler, c’est certain
Donc ma requête à tous et particulièrement à @Loic : est-ce que dans les grandes lignes ca vous semble un besoin valide dans un premier temps?
et coté solution, est-ce que je fais un PR pour que vous puissiez visualiser l’implémentation? ou quelqu’un a-t-il déjà fait autrement ou a une autre idée?
une meilleur idée de nom de fonction et/ou d’emplacement de celle-ci?
Si pas… je n’ai pas de solution pour mes installs et je reste avec ce dossier vendor dans mes plugins … au moins jusqu’à ce que tout le monde soit sous php8.