Ok, habe das mal in Version 18.x versucht und ich bekomme dann den gleichen Fehler
Debug-Output ist:
String(350) "Bad string syntax to evaluate (dot char is forbidden): (($result = $db->query('select pe.punkte as punkte, p.cost_price as cost_price from llx_product_extrafields pe LEFT JOIN llx_product p ON pe.fk_object = p.rowid WHERE pe.fk_object = '.$object->id.' AND punkte = 1')) && ($row = $db->fetch_object($result))) ? round($row->cost_price*0.82,2) : ''"
Problem ist das die Syntaxüberprüfung in der Funktion dol_eval in der Datei htdocs/core/lib/functions.lib.php keine „.“ zwischen chars erlaubt.
if (preg_match('/[^0-9]+\.[^0-9]+/', $s)) { // We refuse . if not between 2 numbers
Man könnte nun die Syntaxüberprüfung modifizieren, was aber evtl. sicherheitstechnisch nicht empfehlenswert ist.
Besser wäre imho den entsprechenden Aufruf bzw. dem 4. Paramter von dol_eval(…) zu modifizieren
$this->array_options['options_' . $key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, 3);
und dann in dol_eval() die obige Syntaxüberprüfung nur für diesen Aufruf zu deaktivieren
if (preg_match('/[(a-z]+\.[)a-z]+/', $s) && $onlysimplestring != '3') { // We refuse . if not between 2 numbers
Aber ich denke das ganze ist ein Fall für einen Bug-Report…