Hello,
Les équipements d’un plugin sont mis à jour (isEnable = x) à chaque désactivation ou activation du plugin.
Lors de la désactivation du plugin, la mise à jour des équipements provoque l’appel à la fonction postUpdate de l’équipement.
Par contre, la fonction postUpdate des équipements n’est pas appelée lors de l’activation du plugin.
Pour analyse, j’ai modifié
- la function setIsEnable de la classe plugin :
...
} else if ($alreadyActive == 0 && $_state == 1) {
log::add("toto","info","plugin ID " . $this->getId());
foreach (eqLogic::byType($this->getId()) as $eqLogic) {
log::add("toto","info","plugin " . get_class($eqLogic));
try {
$eqLogic->setIsEnable($eqLogic->getConfiguration('previousIsEnable', 1));
$eqLogic->setIsVisible($eqLogic->getConfiguration('previousIsVisible', 1));
$eqLogic->save();
} catch (Exception $e) {
} catch (Error $e) {
}
}
}
...
- La fonction byType de la classe eqLogic :
public static function byType($_eqType_name, $_onlyEnable = false) {
$values = array(
'eqType_name' => $_eqType_name,
);
$sql = 'SELECT ' . DB::buildField(__CLASS__, 'el') . '
FROM eqLogic el
LEFT JOIN object ob ON el.object_id=ob.id
WHERE eqType_name=:eqType_name ';
if ($_onlyEnable) {
$sql .= ' AND isEnable=1';
}
$sql .= ' ORDER BY ob.name,el.name';
log::add("toto","info","eqLogic 1 : " . $_eqType_name);
if (class_exists($_eqType_name)) {
log::add("toto","info","eqLogic 2 : class exists");
return DB::Prepare($sql, $values, DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, $_eqType_name);
}
log::add("toto","info","eqLogic 2 : class not found");
return self::cast(DB::Prepare($sql, $values, DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, __CLASS__));
}
- La function save de la class DB:
...
log::add("toto","info","DB " . get_class($object));
if (!$_direct && method_exists($object, 'postUpdate')) {
$object->postUpdate();
}
...
Les différents log ajoutés ont donné les infos suivantes lorsque j’ai désactivé (à 22:49:34) puis activé (à 22:56:15) mon plugin devolo_cpl:
0000|[2023-08-14 22:49:34][INFO] : eqLogic 1 : devolo_cpl
0001|[2023-08-14 22:49:34][INFO] : eqLogic 2 : class exists
0002|[2023-08-14 22:49:34][INFO] : DB devolo_cpl
0003|[2023-08-14 22:49:34][INFO] : devolo_cpl->postUpdate
0004|[2023-08-14 22:49:34][INFO] : DB devolo_cpl
0005|[2023-08-14 22:49:34][INFO] : devolo_cpl->postUpdate
0006|[2023-08-14 22:49:34][INFO] : DB devolo_cpl
0007|[2023-08-14 22:49:34][INFO] : devolo_cpl->postUpdate
0008|[2023-08-14 22:49:34][INFO] : DB devolo_cpl
0009|[2023-08-14 22:49:34][INFO] : devolo_cpl->postUpdate
0010|[2023-08-14 22:49:34][INFO] : DB devolo_cpl
0011|[2023-08-14 22:49:34][INFO] : devolo_cpl->postUpdate
0012|[2023-08-14 22:56:15][INFO] : plugin ID devolo_cpl
0013|[2023-08-14 22:56:15][INFO] : eqLogic 1 : devolo_cpl
0014|[2023-08-14 22:56:15][INFO] : eqLogic 2 : class not found
0015|[2023-08-14 22:56:15][INFO] : plugin eqLogic
0016|[2023-08-14 22:56:15][INFO] : DB eqLogic
0017|[2023-08-14 22:56:15][INFO] : plugin eqLogic
0018|[2023-08-14 22:56:15][INFO] : DB eqLogic
0019|[2023-08-14 22:56:15][INFO] : plugin eqLogic
0020|[2023-08-14 22:56:15][INFO] : DB eqLogic
0021|[2023-08-14 22:56:15][INFO] : plugin eqLogic
0022|[2023-08-14 22:56:15][INFO] : DB eqLogic
0023|[2023-08-14 22:56:15][INFO] : plugin eqLogic
0024|[2023-08-14 22:56:15][INFO] : DB eqLogic
0025|[2023-08-14 22:56:16][INFO] : eqLogic 1 : devolo_cpl
0026|[2023-08-14 22:56:16][INFO] : eqLogic 2 : class exists
On peut constater que la classe des équipements n’est pas devolo_cpl mais eqLogic car la classe devolo_cpl n’existe pas durant l’exécution de eqLocic->byType