Skip to content

Conversation

@pifou25
Copy link

@pifou25 pifou25 commented Sep 13, 2025

Hello @kwizer15
Je fais suite à cette discussion sur une PR du core jeedom#2910

Mon but était initialement d'utiliser l'autoloader de composer, et de là j'ai ajouté le chargement automatique des fichiers de configuration. Mais j'ai eu le problème avec core/config/jeedom.config.php qui invoque la traduction au travers de __() et donc la db pour avoir la configuration. Donc évidemment problème pour PHPStan.

J'ai fait sans ce fichier dans la PR initiale mais j'ai essayé de le corriger de mon côté. Pour cela j'ai remplacé cette fonction par un objet Trad mais ça n'a pas marché non plus. Il semble que PHPStan introspecte l'objet et donc invoque le __toString() dès le chargement.
Pourtant j'ai testé Trad en ligne ici https://onlinephp.io/c/f7229 et ça fait bien ce que je veux.

J'ai donc été obligé d'ajouter une condition dans le code pour sauter cette valeur lors des test avec une constante PHPSTAN_RUNNING déclarée dans le bootstrap du PhpStan

        if (defined('PHPSTAN_RUNNING')) {
            return '__PHPSTAN_PLACEHOLDER__';
        }

C'est lourd et au final ça ne me convient pas. En plus, remplacer la fonction __() par new Trad() c'était assez lourd ça touche +100 fichiers.
Du coup je te soumet la PR sur ton fork pour continuer l'étude :) Tu pense que ça marcherait mieux avec l'interface ArrayAccess ?

PS: en plus sur le upstream ça fait 1 an qu'ils ne mergent plus rien en attente du passage en stable je suppose, on ferait aussi bien de préparer la next 4.6 de notre coté!

@kwizer15
Copy link
Owner

Hello
Je pense avoir trouvé une solution, j’ai juste poussé ton idée.
regarde surtout le dernier commit de cette PR #8

@kwizer15
Copy link
Owner

@pifou25 je t’ai refais des commentaire dans la PR en question. Ça doit régler le soucis de façon plus élégante que ce que j’avais pensé au départ.

@pifou25 pifou25 force-pushed the feat/object_config branch 3 times, most recently from b4b474b to c6e5e1f Compare September 14, 2025 16:42
@pifou25
Copy link
Author

pifou25 commented Sep 14, 2025

Hello Je pense avoir trouvé une solution, j’ai juste poussé ton idée. regarde surtout le dernier commit de cette PR #8

Bravo, c'est exactement ce que je voulais faire :D je ne vois pas bien la différence entre ton objet translate et mon objet Trad mais voila j'ai copié ton code et en effet ça marche bien aussi :)

Je pense faire une nouvelle PR pour jeedom, pour ne pas mélanger avec celle sur le namespace.

@kwizer15
Copy link
Owner

Hello Je pense avoir trouvé une solution, j’ai juste poussé ton idée. regarde surtout le dernier commit de cette PR #8

Bravo, c'est exactement ce que je voulais faire :D je ne vois pas bien la différence entre ton objet translate et mon objet Trad mais voila j'ai copié ton code et en effet ça marche bien aussi :)

Je pense faire une nouvelle PR pour jeedom, pour ne pas mélanger avec celle sur le namespace.

J'ai pas regardé en détail, mais je pense que ce qui change c'est que j'ai eliminé les concatenations dans la config (donc appel a toString).

Par contre, pour etre bien clair, cet objet (pour le moment en tout cas) est uniquement destiné a jeedom.config.php
C'est une surcouche du translate existant, rien de plus.

'unfoundScenario' => array('txt' => new Trad( 'Action sur scénario impossible. Scénario introuvable - Vérifiez l\'id :', __FILE__) . ' ', 'replace' => '<label class="danger">::</label>'),
'disableScenario' => array('txt' => new Trad( 'Impossible d\'exécuter le scénario :', __FILE__) . ' ', 'replace' => '<label class="danger">::</label>'),
'invalidExpr' => array('txt' => new Trad( 'Expression non valide :', __FILE__) . ' ', 'replace' => '<label class="danger">::</label>'),
'invalidDuration' => array('txt' => new Trad( 'Aucune durée trouvée pour l\'action sleep ou la durée n\'est pas valide :', __FILE__) . ' ', 'replace' => '<label class="danger">::</label>'),
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pifou25
Typiquement là, on crée l'objet, mais il est directement concatené avec .' '. Donc ca déclenche __toString() et on en reviens au meme probleme :

  • appel de translate -> bdd

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c'est quoi le but de concaténer avec .' ' à quel moment on a décidé de faire ça c'est juste pour déclencher le calcul de la traduction ou bien ? Si c'est que des espaces je vais tous les virer ça va être vite vu 👯‍♀️

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'en sais rien. C'est surement pour intégrer les espaces, y a forcément eu une raison et j'avoue, j'ai pas envie de chercher 😅

@pifou25 pifou25 force-pushed the feat/object_config branch 2 times, most recently from 45a52e5 to a53934f Compare October 3, 2025 20:03
@pifou25
Copy link
Author

pifou25 commented Oct 3, 2025

Par contre, pour etre bien clair, cet objet (pour le moment en tout cas) est uniquement destiné a jeedom.config.php
C'est une surcouche du translate existant, rien de plus.

certes c'est juste une surcouche du translate, mais non moi je l'ai appliqué partout en remplacement de la fonction __() je veux supprimer cette fonction (!) 1841 remplacements dans 96 fichiers 🥇

remplace la méthode globale __(x)
@pifou25 pifou25 force-pushed the feat/object_config branch from a53934f to 6127534 Compare October 3, 2025 20:12
@kwizer15
Copy link
Owner

kwizer15 commented Oct 3, 2025

Par contre, pour etre bien clair, cet objet (pour le moment en tout cas) est uniquement destiné a jeedom.config.php
C'est une surcouche du translate existant, rien de plus.

certes c'est juste une surcouche du translate, mais non moi je l'ai appliqué partout en remplacement de la fonction __() je veux supprimer cette fonction (!) 1841 remplacements dans 96 fichiers 🥇

Pourquoi la supprimer ? Si on fait ca, ca va casser tout les plugins...
Par contre tu peux la modifier legèrement du temps que la signature bouge pas.

@pifou25
Copy link
Author

pifou25 commented Oct 4, 2025

Oui ok alors on devra la laisser au moins pour les quelques plugins qui l'utilisent... Mais au moins le core sera propre.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants