Ajout de fonction php DANS fichier user.function.class.php

Bonjour,
Afin d’avoir 2 décimales en retour de la fonction lastBetween
J’ai dupliqué la fonction d’origine lastBetween en MylastBetween en modifiant le retour de fonction
return round($historyStatistique[‹ last ›], 1); par return round($historyStatistique[‹ last ›], 2);

cela donne le code suivant :
public static function MylastBetween($_cmd_id, $_startDate, $_endDate) {
$cmd = cmd::byId(trim(str_replace(’#’, ‹  ›, $_cmd_id)));
if (!is_object($cmd) || $cmd->getIsHistorized() == 0) {
return ‹  ›;
}
$_startDate = date(‹ Y-m-d H:i:s ›, strtotime(self::setTags($_startDate)));
$_endDate = date(‹ Y-m-d H:i:s ›, strtotime(self::setTags($_endDate)));
$historyStatistique = $cmd->getStatistique($_startDate, $_endDate);
if(!$historyStatistique[‹ last ›]){
return ‹  ›;
}
return round($historyStatistique[‹ last ›], 2);
}
Cette fonction fonctionne correctement dans le fichier
core / class / scenarioExpression.class.php
mais la même dans le fichier user.function.class.php donne une erreur 500 a l’exécution !
les lignes provocant l’erreur sont :
$_startDate = date(‹ Y-m-d H:i:s ›, strtotime(self::setTags($_startDate)));
$_endDate = date(‹ Y-m-d H:i:s ›, strtotime(self::setTags($_endDate)));

Quelqu’un aurait une explication ou une piste ?

Salut,

As-tu essayé ça à la place

$_startDate = date(‘Y-m-d H:i:s’, strtotime($_startDate));
$_endDate = date(‘Y-m-d H:i:s’, strtotime($_endDate));

Ce sont des paramètres de ta fonction, pas des attributs de ta classe…

je viens de faire l’essai erreur idem
Mais ma fonction marche correctement dans le fichier :
core / class / scenarioExpression.class.php
mais je dois à chaque nouvelle version de jeedom la recréer

Il y a aussi des quotes bizarres dans ton code ‘ et ’ à la place de ’
Essaye ça ça donne pas d’erreur chez moi

public static function MylastBetween($_cmd_id, $_startDate, $_endDate) {
	$cmd = cmd::byId(trim(str_replace('#', '', $_cmd_id)));
	if (!is_object($cmd) || $cmd->getIsHistorized() == 0) {
		return '';
	}
	$_startDate = date('Y-m-d H:i:s', strtotime($_startDate));
	$_endDate = date('Y-m-d H:i:s', strtotime($_endDate));
	$historyStatistique = $cmd->getStatistique($_startDate, $_endDate);
	if(!$historyStatistique['last']){
		return '';
	}
	return round($historyStatistique['last'], 2);
}

ça marche :blush:
Merci beaucoup.
Ce qui est curieux c’est que ce code (copié/collé)
$_startDate = date(‹ Y-m-d H:i:s ›, strtotime(self::setTags($_startDate)));
$_endDate = date(‹ Y-m-d H:i:s ›, strtotime(self::setTags($_endDate)));
issue de la fonction d’origine jeedom lastBetween fonctionne dans le fichier
core / class / scenarioExpression.class.php
et qu’il ne fonctionne pas dans le fichier user.function.class.php !
Va savoir ?
Bonne Journée et encore merci

C’est lié en fait à SetTags qui est une fonction définie dans core / class / scenarioExpression.class.php
Si vous enlever ce code, cela fonctionne.
Par exemple, cette ligne :
$_startDate = date(‘Y-m-d H:i:s’, strtotime(self::setTags($_startDate)));
doit devenir:
$_startDate = date(‘Y-m-d H:i:s’, strtotime($_startDate));

Ou

$_startDate = date(‘Y-m-d H:i:s’, strtotime(scenarioExpression::setTags($_startDate)));

Pour avoir toujours le bénéfice de la commande setTags (la commande setTags permet d’utiliser n’importe quel type de paramètre (une commande info, un chaîne de caractère …))

1 « J'aime »

Clairement nettement mieux. Merci beaucoup.

Bonjour,

Merci d’avoir repris le fil.
:slightly_smiling_face: