[framework SC] Bug sur variable par defaut?

Bonjour à tous,

Est ce que le comportement suivant est issu d’un bug ? je suis avec le core 4.0.54

Dans la doc :

variable(plop,10)
Renvoie la valeur de la variable plop ou 10 si elle est vide ou n’existe pas

Car le premier caractère après la virgule n’est pas renvoyé, avec cet exemple cette expression me retourne 0. Je veux bien rajouter un espace avant mais pas trop envie de reprendre tous mes scénarios pour une prochaine MAJ du core :slight_smile: merci


Pour info, ce code fonctionne et me renvoie bien la valeur de defaultHueColor avec le premier caractère.
variable(current_color_lampadaire,variable(defaultHueColor))

– Re edit,
avec le code ci dessus, le testeur d’expression me renvoie bien la bonne valeur, mais dans l’utilisation de mon scénario avec le plugin Hue pour mettre une couleur il manque le #…

Personne pour confirmer ?

Ce bug est présent sur mon jeedom v4 principal (ex v3) mais pas sur mon slave qui est en v4 natif

@flopp26
Dans la table dataStore, avez-vous des lignes bizarres.
Sur la page http://jeedom/index.php?v=d&p=database tapez SELECT * from dataStore

Le code de la fonction variable dans core/class/scenarioExpression.class.php:

	public static function variable($_name, $_default = '') {
		$_name = trim(trim(trim($_name), '"'));
		$dataStore = dataStore::byTypeLinkIdKey('scenario', -1, trim($_name));
		if (is_object($dataStore)) {
			$value = $dataStore->getValue($_default);
			return $value;
		}
		return $_default;
	}

Il vous reste à mettre des messages à différents endroits dans la fonction pour voir les valeurs.

log::add('scenario','error', "Name: $_name Defaut: $_default");

Le code de byTypeLinkIdKey est dans core/class/dataStore.class.php
Il n’y a rien dans le code qui ne prend la valeur par defaut qu’à partir du 2ème caractère.

j’ai fais un SELECT CONCAT(‹ DEBUG ›,value,‹ DEBUG ›) from dataStore pour être sur qu’il n’y a pas d’espace dans la db et c’est tout bon.

Pour l’équivalent de la fonction sur un tag c’est bon ça fonctionne correctement.

Le testeur d’expression utilise cette fonction aussi ? car comme elle est dans scenarioExpression ?
je vais regarder un peu

Sinon la fonction qui appelle variable() est execute() dans le même fichier.

@jpty , @Jeandhom , @dJuL

Le retour de $_default est modifié par le framework sc que j’utilise

/**
		 * Framework SC
		 */
		$_default = ($_default) ? substr($_default, 1) : ''; //fix bug space added
		if ($_scenario && class_exists('sc', false) && $_scenario->getFramework_sc()) {
			return $_scenario->getFramework_sc()->getVar($_name, $_default);
		}
		/**
		 * Fin Framework sc
		 */

Merci pour ton aide au debug @jpty
@dJuL est ce que c’est un comportement normal ? car j’utlise ton framework pour certains morceaux

Mes excuses, j’avais oublié l’utilisation de cette surcouche.

Vous ne nous aviez pas dit que vous utilisiez le framework SC
@Jeandhom vous l’utilisez aussi ?

Oui, je confirme l’utilisation du framework SC de @dJuL.

Oui j’avais complétement oublié, j’avais désactivé tous mes plugins non officiels, mais j’ai zappé le framework, :innocent:

Du coup il faut changer les tags des 2 discussions puisque le core de Jeedom n’y est pour rien. :thinking:

l’autre discussion je peux rien changé, j’avais ouvert un ticket
je ne trouve pas de tag pour le framework…

$_default = ltrim($_default); doit faire mieux pour corriger un espace en trop au début.

Merci jpty, j’avais mis un trim tout court car je veux pas d’espace ni à droite ni à gauche, mais cette modif disparaîtra à la prochaine maj de Jeedom (je relance l’installation de sc). J’aimerais connaître l’avis du dev du framework. En tout cas merci, j’ai pu finir mes scénarios en suspens :wink:

Il attend un heureux évènement, nous allons attendre tranquillement son retour.
Peut être décocher la case solution pour que le sujet ne se ferme pas.

Je vais regardé,
A l’époque cela corrigeait un bug que j’avais constaté dans le core de Jeedom, mais vrai que c’est vieux, ça doit dater de la version 2 de Jeedom.
Depuis il a peut être et surement été corrigé, c’est vrai que j’utilise pas la valeur par défaut dans mes scénarios donc je n’ai jamais rechecké…
Je vais regardé ça, et le virer si ce n’est plus nécessaire.

Curieux je n’arrive pas à reproduire le pb sans avoir rien modifié dans le core… (Framework installé)

image

Je vais investigué un peu plus…

edit:

si je vire la ligne du framework, j’ai bien encore le bug (espace indésirable ajouté) :

image

edit2:

Ok j’ai compris, ça viens de l’espace après la virgule, pas de soucis avec
variable(plop,10)
mais soucis avec
variable(plop, 10)
et comme j’ai l’habitude de toujours mettre un espace après une virgule, cela explique pourquoi je retirais systématiquement le 1er caractère…
Je vais corriger ça.

Ok c’est corrigé :

2 « J'aime »

Merci pour la correction. :slightly_smiling_face:

@dJuL merci pour la correction, du coup tu a viré la ligne ou remplacé par un ltrim, trim, perso un ltrim ca me va, j’ai aussi cette habitue de mettre un espace après une virgule…

Et si j’ai bien compris, toutes mes félicitations, ou à venir :wink: