Afficher/Cacher un menu

Elle se base entre autre sur ce code
Donc tte facon faut reussir a le faire fonctionner :slight_smile:

New try entre 2 courses !

ok bin je teste tout ce que tu veux m’envoyer en code :crazy_face: :crazy_face:

remarque (ou constat) : par le plugin cocher l’option Actif est immédiate dés que tu sauvegardes…

1 « J'aime »

si je lance le scénario et que je vais dans le plugin :
Assistant configuration
->Sauvegarder

le menu (id du scénario) se cache

si ça peut t’aider !!

Evidemment !
C est le fonctionnement qu on attend depuis fort longtemps :wink:

Mais la on est pas du tout dans le meme process donc besoin de faire differemment.

T as testé avec ma derniere modif ?

désolé p’tite pause déjeuner

c’est la petite chose qui manquait…
ça fonctionne direct pas de latence dès la fin du scénario le menu s’efface.
ça fonctionne pour un menu haut ou bas sans souci.

j’ai modifié ton code pour avoir la fonction afficher.

require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnect.class.php';


//************ A CHANGER **********************
$enablePageJC = 24;
$equipmentApiKey = 'abcdefgh1234567890';
//*********************************************

$hasChange = false;

$eqLogicJC = eqLogic::byLogicalId($equipmentApiKey, 'JeedomConnect');
if (!is_object($eqLogicJC)) {
  $scenario->setLog("Cet équipement JC n'existe pas !");
  return;
}

$conf = $eqLogicJC->getConfig();
//$scenario->setLog("conf => " . json_encode($conf));

// check "menu haut"
if (key_exists('payload', $conf) && key_exists('tabs', $conf['payload'])) {
  foreach ($conf['payload']['tabs'] as $key => $menu) {
    if (key_exists('id', $menu) && $menu['id'] == $enablePageIdJC) {
      $menu['enable'] = true;
      $conf['payload']['tabs'][$key] = $menu;
      $hasChange = true;
    }
  }
}

// check "menu bas"
if (key_exists('payload', $conf) && key_exists('sections', $conf['payload'])) {
  foreach ($conf['payload']['sections'] as $key => $menu) {
    if (key_exists('id', $menu) && $menu['id'] == $enablePageIdJC) {
      $menu['enable'] = true;
      $conf['payload']['sections'][$key] = $menu;
      $hasChange = true;
    }
  }
}

if ($hasChange) {
  $configVersion = $conf['payload']['configVersion'] + 1;
  $conf['payload']['configVersion'] =  $configVersion;
  $scenario->setLog("saving new conf => " . json_encode($conf));
  $eqLogicJC->saveConfig($conf);
  $eqLogicJC->setConfiguration('configVersion', $configVersion);
  $eqLogicJC->getConfig(true, true);
  $eqLogicJC->save();
}
else{
  $scenario->setLog("nothing to change...");
}

ça fonctionne, en espérant pas avoir fait de bêtise

Plus simplement, a appeler avec 3 tags :

  • pageId : numero de page a afficher/masquer sur l equipement
  • apiKey : la clé api de l equipement a modifier
  • visible : true pour afficher, false pour masquer
require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnect.class.php';

$tags = $scenario->getTags();

$pageId = $tags['#pageId#'];
$equipmentApiKey = $tags['#apiKey#'];
$setVisible = $tags['#visible#'] == 'true'? true: false;  // true : afficher ; false : masquer

$hasChange = false;

$eqLogicJC = eqLogic::byLogicalId($equipmentApiKey, 'JeedomConnect');
if (!is_object($eqLogicJC)) {
  $scenario->setLog("Cet équipement JC n'existe pas !");
  return;
}

$conf = $eqLogicJC->getConfig();
//$scenario->setLog("conf => " . json_encode($conf));

// check "menu haut"
if (key_exists('payload', $conf) && key_exists('tabs', $conf['payload'])) {
  foreach ($conf['payload']['tabs'] as $key => $menu) {
    if (key_exists('id', $menu) && $menu['id'] == $pageId) {
      $menu['enable'] = $setVisible;
      $conf['payload']['tabs'][$key] = $menu;
      $hasChange = true;
    }
  }
}

// check "menu bas"
if (key_exists('payload', $conf) && key_exists('sections', $conf['payload'])) {
  foreach ($conf['payload']['sections'] as $key => $menu) {
    if (key_exists('id', $menu) && $menu['id'] == $pageId) {
      $menu['enable'] = $setVisible ;
      $conf['payload']['sections'][$key] = $menu;
      $hasChange = true ;
    }
  }
}

if ($hasChange) {
  $configVersion = $conf['payload']['configVersion'] + 1;
  $conf['payload']['configVersion'] =  $configVersion;
  $scenario->setLog("saving new conf => " . json_encode($conf));
  $eqLogicJC->saveConfig($conf);
  $eqLogicJC->setConfiguration('configVersion', $configVersion);
  $eqLogicJC->getConfig(true, true);
  $eqLogicJC->save();
}
else{
  $scenario->setLog("nothing to change...");
}

on pourrait même mettre des tags dans la partie à changer afin de le rendre générique :smile:

//************ A CHANGER **********************
$disablePageIdJC = 24;
$equipmentApiKey = 'abcdefgh1234567890';
$setVisible = true ;  // true : afficher ; false : masquer
//*********************************************

et juste pour que ça soit plus cosmétique au lieu de disablePageIdJC, je mettrai changePageIdJC ou truefalsePageIdJC ou quelque chose de ce genre :joy:

C est modifié :wink:

super merci…

heu autre question : tu fais le café ??

1 « J'aime »

Rien que l odeur me degoute ! :nauseated_face:

Je bois des cocktails ou du (bon!) vin par contre :slight_smile:

:joy: :joy:

merci pour le code…

yop yop,
j’ai un comportement bizarre avec les tags… j’en ai testé un à la fois pour être sûr de la connerie…

quand je passe le tag visible à false
→ le scénario se lance et se termine normalement mais dans l’appli le menu ne disparait pas!

quand je fais l’inverse (avec désactivation du menu via le plugin)
→ le scénario se lance et se termine et le menu réapparait bien !

par contre si tu utilises les autres tags mais en mettant directement la valeur setVisible à false dans le scénario ça fonctionne… :thinking: :thinking:

Jai rien compris
Dans tous les cas, les 3 tags sont a indiquer systématiquement

je reprends ça marche pas avec les tags enfin à moitié…

1 « J'aime »

plus sérieusement :

masquer menu
ltags renseignés en action avant le code
tag → pageId → 84
tag → apikey → 0123456789
tag → visible → false

exécution du scénario → ok
log du scénario → je vois bien qu’il désactive l’Id demandé mais dans l’appli le menu est toujours là !


afficher menu
si je désactive via scénario (ancien code) ou via le plugin le menu que je veux cacher et que :

tags renseignés en action avant le code
tag → pageId → 84
tag → apikey → 0123456789
tag → visible → true

exécution du scénario → ok
log du scénario → je vois bien qu’il désactive l’Id demandé et dans l’appli le menu n’est plus là !


Si je veux masquer le menu via le scénario (tag)
masquer menu sans le tag visible
tags renseignés en action avant le code
tag → pageId → 84
tag → apikey → 0123456789

exécution du scénario → ok
log du scénario → je vois bien qu’il désactive l’Id demandé et dans l’appli le menu n’est plus là !


c’est comme si il ne prenait pas le tag visible en compte !

J ai fait une modif, tente

ça fonctionne nickel…
tu as fais si c’est pas true c’est automatiquement false et tu forces la réponse.

J ai surtout transformé une chaine de caractere (recu par le tag!) en booleen :slight_smile:
"true" n’est pas identique a true

c’est marrant qu’il reconnaisse l’un et pas l’autre en tag