Hello,
J’ai une erreur suite a un changement de fonction dans le core, je voulais donc savoir si c’etait normal.
Et si c’est le cas, il y a un moyen d’être compatible pour les alpha et pour les stable V4 ?
Voici les log de l’erreur :
0000|[Thu Jan 14 01:56:29.810422 2021] [php7:warn] [pid 1017] [client 192.168.1.140:63153] PHP Warning: Declaration of discordlinkCmd::getWidgetTemplateCode($_version = 'dashboard', $_noCustom = false) should be compatible with cmd::getWidgetTemplateCode($_version = 'dashboard', $_clean = true, $_widgetName = '') in /var/www/html/plugins/discordlink/core/class/discordlink.class.php on line 495, referer: http://192.168.1.35/index.php?v=d&p=scenario&id=14
0001|[Thu Jan 14 01:56:49.806180 2021] [php7:warn] [pid 1017] [client 192.168.1.140:63153] PHP Warning: Declaration of discordlinkCmd::getWidgetTemplateCode($_version = 'dashboard', $_noCustom = false) should be compatible with cmd::getWidgetTemplateCode($_version = 'dashboard', $_clean = true, $_widgetName = '') in /var/www/html/plugins/discordlink/core/class/discordlink.class.php on line 495, referer: http://192.168.1.35/index.php?v=d&p=scenario&id=14
Cordialement
Thibaut
1 « J'aime »
Thibaut_T:
$_noCustom
C’est quoi ce param ?? Il est pas en 4.0 ni en 4.1
Et pourquoi redéfinir la même fonction ?
Hello,
Je m’en sert comme plusieurs autre plugin pour faire des actions custom dans les scénarios.
C’est un code que j’ai récupéré auprès des 2 personnes suivantes.
Je sait que @sigalou et @nebz son tu dans le même cas.
Cordialement
Thibaut
Enlève ton 2em param alors, çà ne correspond à rien
nebz
Janvier 14, 2021, 8:10
5
nan pas moi
par contre il existe bien dans le core mais s’appelle $_clean :
return '<em>'.__('Aucune description trouvée pour ce Widget.', __FILE__).'</em>.';
}
}
public function cleanWidgetCode($_template) {
$_template = preg_replace('/<template>[\s\S]+?<\/template>/', '', $_template);
$_template = str_replace(array('<template>', '</template>'), '', $_template);
return $_template;
}
public function getWidgetTemplateCode($_version='dashboard', $_clean=true, $_widgetName='') {
global $JEEDOM_INTERNAL_CONFIG;
$_version = jeedom::versionAlias($_version);
$replace = null;
$widget_template = $JEEDOM_INTERNAL_CONFIG['cmd']['widgets'];
if ($_widgetName == '') {
$widget_name = $this->getTemplate($_version, 'default');
} else {
$widget_name = $_widgetName;
}
c’est le troisième param que vous devez ajouter à vos overrides
Hello, j’ai mis ton nom car c’est dans Alexa api
Cdt
Thibaut
nebz
Janvier 14, 2021, 8:19
7
les widgets c’est la popotte de @sigalou
nebz
Janvier 14, 2021, 8:22
8
mais comme vous appellez parent et que cmd::getWidgetTemplateCode a maintenant une signature à 3 parametres il faut mettre à jour vos fonctions.
Non la fonction du core en 4.0 et 4.1 n’a qu’un seul param version
la 4.2 a deux nouveaux params, définit par default
le $_nocustom ne correspond à rien pour le core 4.x
nebz
Janvier 14, 2021, 8:27
10
pas en alpha
continue;
}
$info['key'] = $key;
if (!isset($groups[$info['family']])) {
$groups[$info['family']][0] = $info;
} else {
array_push($groups[$info['family']], $info);
}
}
ksort($groups);
$optgroup = '';
foreach ($groups as $group) {
usort($group, function ($a, $b) {
return strcmp($a['name'], $b['name']);
});
foreach ($group as $key => $info) {
if ($key == 0) {
$optgroup .= '<optgroup label="' . $info['family'] . '">';
}
$name = $info['name'];
$optgroup .= '<option value="' . $info['key'] . '">' . $name . '</option>';
par contre peu importe le nom du param pour la signature (et son message d’erreur), juste le nombre de param importe.
mais il peut faire un test de version et en fonction que ca soit 4.0 4.1 ou alpha 4.2 faire un call à parent:: différent… mais ca devient lourd
Oui c’est ce que je dis, deux nouveaux params en alpha. mais ils sont settés par default pas besoin de les mettre.
nebz
Janvier 14, 2021, 8:32
12
si, dans le cas d’un override dans la class enfant, la déclaration de la methode doit avoir la même signature
donc difficile de rendre le même code compat 4.0 4.1 et 4.2… (pas de condition pour créer la déclaration de la methode)
Alors pourquoi çà ne pose pas de probleme en 4.0 et 4.1 qui n’ont qu’un seul param sur cette fonction alors que ce plugin l’appel avec deux params ?
nebz
Janvier 14, 2021, 8:34
14
en 3.x (branch master) elle en a 2, ils ont peut-etre pas testé en 4.0 et 4.1
case 'color':
$value = str_replace('#color#', $options['color'], $value);
break;
}
$cmd->event($value);
}
}
return $value;
}
public function getWidgetTemplateCode($_version = 'dashboard', $_noCustom = false) {
$version = jeedom::versionAlias($_version);
$template_name = 'cmd.' . $this->getType() . '.' . $this->getSubType() . '.' . $this->getTemplate($version, 'default');
$template = '';
if (!isset(self::$_templateArray[$version . '::' . $template_name])) {
$template = getTemplate('core', $version, $template_name);
if ($template == '') {
if (config::byKey('active', 'widget') == 1) {
$template = getTemplate('core', $version, $template_name, 'widget');
}
if ($template == '') {
nebz
Janvier 14, 2021, 8:45
17
https://www.php.net/manual/fr/language.oop5.abstract.php
comme en 4.0 et 4.1 il n’y a que 1 param et que eux sont restés à 2 params dont le second n’est pas obligatoire, ca fonctionne.
mais en 4.2 il y en a 3 donc ca ne fonctionne plus
l’exemple trouvé est pour les classes abstract mais je suppose que c’est idem pour les classes normales
C’est pas parce que leur 2em param est nommé autrement que celui qui existe maintenant ? Suis pas expert là dessus.
nebz
Janvier 14, 2021, 8:49
19
non, c’est une question de signature, le nom du param n’importe pas (à la limite son type mais peut-etre pas dans php qui n’est pas fortement typé).