Le passage de la version stable à bêta du plugin-mymodbus est conséquent et nécessite de supprimer des fichiers dans le répertoire du plugin.
J’ai pensé que la suppression pouvait être faite dans les scripts php sous plugin_info/install.php, notamment dans les script <pluginid>_install et <pluginid>_update dans lesquels un appel vers une fonction déclarée dans ce même fichier est fait. Cependant, ça ne fonctionne pas… Ni au moment du passage de version vers bêta ni en cas de réinstallation du plugin via le centre de mise à jour.
J’ai du louper un truc mais je ne trouve pas quoi.
Il n’y a rien dans les log http.error ni nulle part qui pourrait faire penser à une erreur de syntaxe ou autre.
Si quelqu’un avait une idée de solution, ce serait sympa de m’orienter.
Comme la liste des fichiers est longue, je passe par un array et un boucle avec un unlink() sur chaque élément. Rien de grandiose… J’ai aussi une fonction deltree qui supprime un répertoire et son contenu.
Je crois que je vais faire des messages de debug pour voir si tout est exécuté. J’ai l’impression que les fonctions ne sont même pas appelées.
Au moins, le principe est bon… ça manque de debug.
Bon je viens de réessayer plusieurs fois sans succès.
A moins que les class log et message ne fonctionnent pas dans ce fichier, les fonctions ne sont pas appelées. J’ai mis ces lignes en début de chaque fonctions :
<?php
include_once('install.php');
if (PHP_SAPI === 'cli') {
echo "Tout va bien" . "\n";
}
?>
Et il se trouve que l’exécution en ligne de commande à renvoyé ceci :
root@Jeedom-dev:/var/www/html/plugins/mymodbus/plugin_info# php indirect.php
PHP Parse error: syntax error, unexpected 'private' (T_PRIVATE), expecting end of file in /var/www/html/plugins/mymodbus/plugin_info/install.php on line 21
Donc erreur de ma part : on ne peut pas déclarer une fonction classique (pas une fonction de classe) comme private. C’est corrigé et ça fonctionne → OUF
Par contre cette erreur n’est pas remontée vers http.error ce qui est dommage.
Je fais une issue sur le github du core avec un lien vers ce fil de discussion.
Je te laisse fermer l’issue github car il n’y a strictement aucun problème à ce niveau, j’entends que ces fonctions ne font même pas partie d’une classe, elles sont par nature forcément appelées par le core et se doivent donc d’être accessibles publiquement par définition. Sans compter les exemples de la doc, du plugin template, des autres plugins, etc…
Ce que je voulais pointer n’est pas juste ce cas particulier (qui est de mon fait) mais si cette erreur de syntaxe n’est pas remontée, sans doute que d’autres ne sont pas remontées et peut-être même toutes les erreurs de syntaxe ?
Ce qui serait pratique pour du debug serait de renvoyer les erreurs de l’interpréteur php vers http.error.
100% d’accord avec toi sur cette erreur particulière. encore une fois, c’est entièrement de ma faute et je ne reviens pas sur le fait qu’il s’agit d’une incompétence de ma part (ce n’est pas mon métier ni mon langage de prédilection).
Quid d’un oubli de ;, d’une parenthèse manquante ou en trop ? Ces erreurs sont renvoyées vers http.error pour les fichiers de classe php. Pourquoi pas ce fichier ?
Je ne suis pas d’accord, c’est d’autant plus grave de ne pas avoir cette erreur reporté dans les logs du core que c’est une erreur grossière, justement, ça devrait être systématiquement remonté ce genre de problème.
On passe des heures à tourner en rond à rechercher la cause de nos dysfonctionements, moi personnellement j’ai renoncé. Alors qu’il serait si simple de rajouter une fonction générique pour catcher / logguer toutes ces erreurs non gérées.
Surtout que c’est si simple, il suffit de rajouter un log sur l’autoloader
(désolé d’arriver après la bataille mais je tenais à le dire)
(je le dis parce que j’avais déjà tenté de le faire à l’époque mais ça a été revert… sans commentaire)
et puis ça ne veut rien dire ta phrase, je l’ai sans doute mal comprise tu pourrais détailler ? … en gros « s’il n’y a pas d’erreur ça ne fait aucun doute que toute erreur serait remontée comme attendu »
Sérieux c’est insupportable de devoir toujours se justifier de tout perpétuellement… toujours quelque chose à redire, ça ne convient jamais.
Je le répète souvent mais jeedom n’a pas vocation à apprendre à développer… d’ailleurs un simple linter dans l’ide et il n’y a plus de sujet.
Bref on va pas passer 3 semaines sur le fait de déclarer une fonction standard en private hors de toute classe
PS:
Oui c’est tout a fait ce que j’ai ecrit… effectivement si déjà une simple phrase comme ça est interprétée n’importe comment je comprend mieux pourquoi demander à anticiper toutes les erreurs de code tiers.