C’est pas ça non, il n’y était pas dans la définition $listener et en cherchant sur Community j’ai vu que Flobul (me semble) avait mis intval donc j’ai essayé mais dans plus de succès.
Bon j’ai un peu triché pour la simulation, mais c’est équivalent je pense.
j’ai fait la modif dans le cronDaily de solcast que je déclenche par scénario pour effectuer le test :
/* Fonction exécutée automatiquement tous les jours par Jeedom */
public static function cronDaily() {
foreach (eqLogic::byType('solcast') as $solcast) {
$solcast->testBison(1655);
break; // only first for test
}
}
/* test - call by cronDaily */
public function testBison($id) {
log::add('solcast', 'debug', '┌──:fg-success: testBison :/fg:──');
$info = cmd::byId($id);
if (is_object($info)) {
//listener::removeByClassFunctionAndEvent('solcast', 'solcast_event', '["#1655#"]'); // for delete listener test
$listener = listener::byClassAndFunction('solcast', 'solcast_event', array('solcast_id' => $this->getId()));
if (!is_object($listener)) {
log::add('solcast', 'debug', '| Création du Listener');
$listener = new listener();
$listener->setClass('solcast');
$listener->setFunction('solcast_event');
$listener->emptyEvent();
$listener->addEvent($info->getId());
$listener->setOption(array('solcast_id' => $this->getId()));
$listener->save();
} else {
log::add('solcast', 'debug', '| Listener existant');
}
}
log::add('solcast', 'debug', '└────────────────────');
}
Ton 1er listener n’aura pas été set en php7 ?
php7 → $this->getId() → renvoi un string → bdd {"solcast_id":"95"}
php8 → $this->getId() → renvoi un integer → bdd {"solcast_id":95}
facile a confirmer, au bout de la 3ème execution, le listener doit être trouvé.
Normalement en supp les listener il ne devrait plus avoir ce soucis, mais tu as soulevé un point important qu’il faudra prendre en compte lorsque le core basculera en Deb12.
En effet merci pour la remarque. J’ai pensé la même chose que toi du coup au moment de corriger avec les (string) mais comme à la base on voit des doubles quote quand on était en php7, je me suis dit qu’il fallait mieux conserver ce même principe.
Le mieux pour une bonne transition php7->php8, c’est d’utiliser le intval dans le byClassAndFunction et setOption.
Puis faire une fonction dans le plugin install pour transformer les listeners existants de type string.
function solcast_update() {
log::add('solcast', 'debug', '┌──:fg-success: Typing of listeners :/fg:──');
$listeners = listener::searchClassFunctionOption('solcast', 'solcast_event');
foreach ($listeners as $listener) {
$solcast_id = $listener->getOption('solcast_id');
if (gettype($solcast_id) === 'string') {
log::add('solcast', 'debug', '| force intval for listener ' . $listener->getId());
$listener->setOption(array('solcast_id' => intval($solcast_id)));
$listener->save();
}
}
log::add('solcast', 'debug', '└────────────────────');
}