Erreur suite a un changement de fonction

test 3 :


(override avec un param obligatoire)

test 4 :


(comparaison si le param n’est pas obligatoire)

test 5 :


(différence de type pas grave)

et pour finir le cas qui nous intéresse :

1 « J'aime »

Et donc tu a une technique pour géré les 2 version ?

Cdt
Thibaut

non je ne vois pas comment faire…

Super …

Sa va pas être super pour être compatible multi version

Cdt
Thibaut

peut-etre ajouter un troisième argument non obligatoire…

On va test tout cas :slight_smile:

Hello,

J’ai régler tout les erreur, par contre sa risque d’impacter plus de chose que prévu.
Je sait pas si il y a moyen de faire en sorte que le system soit retro compatible ?

Je m’explique, avant on retournais un string avec le html du widget.
Maintenant on doit retourné une array constituer comme cela :

return array('template' => getTemplate('core', 'scenario', 'cmd.sendMsg', 'discordlink'), 'isCoreWidget' => false);

Cordialement
Thibaut

@kiboost Une idée pour moi ?
Ou tu veux que je trouve un moyen de le géré entièrement dans chaque plugin ?

Cdt
Thibaut

Pourque ne pas tester le retour```
if(is_array($Template))

Car c’est pas mon code a moi qui bloque, mais le core n’attend pas le même retours en fonction de la version. Je doit sore va le géré sinon il va falloir détecter la version de Jeedom pour send les bonne data

Cdt
Thibaut

Je vois pas pourquoi, où et quand tu a besoin de faire une telle fonction dans tes plugins donc compliqué de t’aider. Je saisi pas la mecanique là

C’est pour faire c’est propre Template dans un scenario.

Cdt
Thibaut

PS : je fais peux être mal

C’est dans le cadre d’un plugin ? Tu aurai le repo avec un lien vers le code concerné ?

hello,

J’ai le cas aussi avec le plugin Freebox.

Pour l’instant je n’ai fait aucun changement ligne 692.

public function getWidgetTemplateCode($_version = 'dashboard', $_noCustom = false)
	{
		if ($_version != 'scenario') return parent::getWidgetTemplateCode($_version, $_noCustom);
		list($command, $arguments) = explode('?', $this->getConfiguration('request'), 2);
		if ($command == 'wol')
			return getTemplate('core', 'scenario', 'cmd.WakeonLAN', 'Freebox_OS');
		if ($command == 'add_del_mac')
			return getTemplate('core', 'scenario', 'cmd.mac_filter', 'Freebox_OS');
		if ($command == 'add_del_dhcp')
			return getTemplate('core', 'scenario', 'cmd.dhcp', 'Freebox_OS');
		if ($command == 'redir')
			return getTemplate('core', 'scenario', 'cmd.port_forwarding', 'Freebox_OS');
		return parent::getWidgetTemplateCode($_version, $_noCustom);
	}

Le top ce serait que je puisse tester un plugin qui rencontre le cas, avec au moins un équipement de test. Sinon je vais devoir monter un squelette rapide avec çà dedans

OK

Je te prépare un accès privée

Hello,

Je tes rajouter a l’équipe qui contient tout mes plugin, dedans tu a celui de discord avec l’erreur.
Sinon tu a celui de AlexaAPI qui est public.

Ps : Pour avoir a discord il faut que tu accepte l’invitation github @kiboost
Pps : le lien du repo DomotechDiscord/discordlink (github.com)

Cdt
Thibaut

Bon j’ai une solution, mais je réfléchie encore un peu avant de pousser …

En gros:

La class cmd a une fonction getWidgetTemplateCode()

Dans vos plugins vous faites

class Freebox_OSCmd extends cmd {

    public function getWidgetTemplateCode($_version = 'dashboard')
	{
		if ($_version != 'scenario') return parent::getWidgetTemplateCode($_version);
		list($command, $arguments) = explode('?', $this->getConfiguration('request'), 2);
		if ($command == 'wol')
			return getTemplate('core', 'scenario', 'cmd.WakeonLAN', 'Freebox_OS');
		if ($command == 'add_del_mac')
			return getTemplate('core', 'scenario', 'cmd.mac_filter', 'Freebox_OS');
		if ($command == 'add_del_dhcp')
			return getTemplate('core', 'scenario', 'cmd.dhcp', 'Freebox_OS');
		if ($command == 'redir')
			return getTemplate('core', 'scenario', 'cmd.port_forwarding', 'Freebox_OS');
		return parent::getWidgetTemplateCode($_version);
	}

Donc en gros vous écrasez la fonction getWidgetTemplateCode() de la class cmd du Core !

Du coup dans le scénario, la class scenarioExpression fait un cmd->toHtml()
La fonction toHtml() appelle getWidgetTemplateCode() → sauf qu’elle est overidée par votre définition de cmd !! Et çà pète, puisque en effet elles n’ont plus le même nombre d’arguments.

Donc en gros la solution :

Dans la class cmd du Core, je renomme la fonction getWidgetTemplateCode()
Du coup vous ne l’écrasez plus …

Et dans le toHtml, si elle existe, je l’utilise !
if (method_exists($this, 'getWidgetTemplateCode')) {

  • Aucun changements sur vos plugins.
  • J’ai toujours la traduction des widgets tiers, qui est à l’origine du changement de la fonction du Core.

Si un expert php passe par là, et a un avis… Mais le fix reste simple et fonctionne très bien. Et surtout vos plugins seront compatible 4.2 et pré-4.2 !

J’avoue, qql cafés sur ce coup là :face_with_head_bandage: