bug sur la fct showinputtype de l'obj commonobject

Bonjour,

Dans la fonction showInputField de l’objet commonobject (fichier /code/class/commonobject.class.php)

la variable $val passé en paramètre est écrasé dans les 1ere ligne et remplacé par $this->fields[$key]. De plus dans la suite il est certaine fois utilisé $val , d’autres fois il est utilisé $this->fields[$key].

Si $val passé en paramètre est déjà égale à $this->fields[$key] (je pense dans la grande majorité des cas) ça pose pas de problème. Mais ça ferme à une variation de $val par rapport à $this->fields[$key].

Et dans ce cas, pourquoi mettre en entré $val ??

Perso, je faisait une modification de $val avant affichage du input pour ajouter l’info d’un choix par défaut conseillé suivant certain paramètres.

Serai-il possible de ne pas écraser $val et de l’utiliser au lieux de $this->fields[$key] ?? d’autant que çà porte à confusion…

Extrait de la fonction:

function showInputField($val, $key, $value, $moreparam=’’, $keysuffix=’’, $keyprefix=’’, $morecss=0)
{
global $conf,$langs,$form;

	if (! is_object($form))
	{
		require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
		$form=new Form($this-\>db);
	}

	[b]$val=$this-\>fields[$key];[/b]

	$out='';
    $type='';
    $param = array();
    $param['options']=array();
    $size =[b][color=#ff0000]$this-\>fields[$key]['size'];[/color][/b]
    // Because we work on extrafields
    if(preg_match('/^integer:unhappy:.*):unhappy:.*)/i', [color=#008800]$val['type'][/color], $reg)){
        $param['options']=array($reg[1].':'.$reg[2]=\>'N');
        $type ='link';
    } elseif(preg_match('/^link:unhappy:.*):unhappy:.*)/i', [color=#008800]$val['type'][/color], $reg)) {
        $param['options']=array($reg[1].':'.$reg[2]=\>'N');
        $type ='link';
    } elseif(preg_match('/^sellist:unhappy:.*):unhappy:.*):unhappy:.*):unhappy:.*)/i', [color=#008800]$val['type'][/color], $reg)) {
        $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=\>'N');
        $type ='sellist';
    } elseif(preg_match('/varchar\((\d+)\)/', [color=#008800]$val['type'][/color],$reg)) {
        $param['options']=array();
        $type ='varchar';
        $size=$reg[1];
     } elseif(preg_match('/varchar/', [color=#008800]$val['type'][/color])) {
        $param['options']=array();
        $type ='varchar';
    } elseif(is_array([color=#ff0000][b]$this-\>fields[$key][/b][/color]['arrayofkeyval'])) {
        $param['options']=[b][color=#ff0000]$this-\>fields[$key][/color][/b]['arrayofkeyval'];
        $type ='select';
    } else {
        $param['options']=array();
        $type =[b][color=#ff0000]$this-\>fields[$key][/color][/b]['type'];

Bonjour,

Pour le code source, tout se passe sur GitHub.
Ouvrez une issue : https://github.com/Dolibarr/dolibarr/issues

Bonjour
J’ajoute que lorsque vous postez du code, utilisez les balises code pour ça,
On aura moins de smileys et ce sera plus lisible.
Rdv sur Github
@+

Bonjour,

Merci d’avoir remonté :https://github.com/Dolibarr/dolibarr/issues/11104