diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php
index 18dd686367b..6e0651568a1 100644
--- a/htdocs/core/class/extrafields.class.php
+++ b/htdocs/core/class/extrafields.class.php
@@ -43,7 +43,7 @@ class ExtraFields
public $db;
/**
- * @var string type of element (for what object is the extrafield)
+ * @var array Array with type of element (for what object is the extrafield)
* @deprecated
*/
public $attribute_elementtype;
diff --git a/htdocs/core/class/extralanguages.class.php b/htdocs/core/class/extralanguages.class.php
index 71a6fa8c1aa..48f2e94936a 100644
--- a/htdocs/core/class/extralanguages.class.php
+++ b/htdocs/core/class/extralanguages.class.php
@@ -18,7 +18,7 @@
/**
* \file htdocs/core/class/extralanguages.class.php
* \ingroup core
- * \brief File of class to manage extra fields
+ * \brief File of class to manage extra languages for some fields
*/
@@ -69,7 +69,8 @@ class ExtraLanguages
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
- * Load array this->attributes with list of fields per object that need an alternate translation.
+ * Load array this->attributes with list of fields per object that need an alternate translation. The object and field must be managed with
+ * the widgetForTranslation() method.
* You can set variable MAIN_USE_ALTERNATE_TRANSLATION_FOR=elementA:fieldname,fieldname2;elementB:...
* Example: MAIN_USE_ALTERNATE_TRANSLATION_FOR=societe:name,town;contact:firstname,lastname
*
@@ -119,16 +120,16 @@ class ExtraLanguages
*
* @param string $key Key of attribute
* @param string $value Preselected value to show (for date type it must be in timestamp format, for amount or price it must be a php numeric value)
+ * @param string $extrafieldsobjectkey If defined (for example $object->table_element), use the new method to get extrafields data
* @param string $moreparam To add more parametes on html input tag
* @param string $keysuffix Prefix string to add after name and id of field (can be used to avoid duplicate names)
* @param string $keyprefix Suffix string to add before name and id of field (can be used to avoid duplicate names)
* @param string $morecss More css (to defined size of field. Old behaviour: may also be a numeric)
* @param int $objectid Current object id
- * @param string $extrafieldsobjectkey If defined (for example $object->table_element), use the new method to get extrafields data
* @param string $mode 1=Used for search filters
* @return string
*/
- public function showInputField($key, $value, $moreparam = '', $keysuffix = '', $keyprefix = '', $morecss = '', $objectid = 0, $extrafieldsobjectkey = '', $mode = 0)
+ public function showInputField($key, $value, $extrafieldsobjectkey, $moreparam = '', $keysuffix = '', $keyprefix = '', $morecss = '', $objectid = 0, $mode = 0)
{
global $conf, $langs, $form;
@@ -145,601 +146,7 @@ class ExtraLanguages
$keyprefix = $keyprefix.'options_';
}
- if (!empty($extrafieldsobjectkey))
- {
- $label = $this->attributes[$extrafieldsobjectkey]['label'][$key];
- $type = $this->attributes[$extrafieldsobjectkey]['type'][$key];
- $size = $this->attributes[$extrafieldsobjectkey]['size'][$key];
- $default = $this->attributes[$extrafieldsobjectkey]['default'][$key];
- $computed = $this->attributes[$extrafieldsobjectkey]['computed'][$key];
- $unique = $this->attributes[$extrafieldsobjectkey]['unique'][$key];
- $required = $this->attributes[$extrafieldsobjectkey]['required'][$key];
- $param = $this->attributes[$extrafieldsobjectkey]['param'][$key];
- $perms = dol_eval($this->attributes[$extrafieldsobjectkey]['perms'][$key], 1);
- $langfile = $this->attributes[$extrafieldsobjectkey]['langfile'][$key];
- $list = dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1);
- $totalizable = $this->attributes[$extrafieldsobjectkey]['totalizable'][$key];
- $help = $this->attributes[$extrafieldsobjectkey]['help'][$key];
- $hidden = (empty($list) ? 1 : 0); // If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
- }
- else // Old usage
- {
- $label = $this->attribute_label[$key];
- $type = $this->attribute_type[$key];
- $size = $this->attribute_size[$key];
- $elementtype = $this->attribute_elementtype[$key]; // Seems not used
- $default = $this->attribute_default[$key];
- $computed = $this->attribute_computed[$key];
- $unique = $this->attribute_unique[$key];
- $required = $this->attribute_required[$key];
- $param = $this->attribute_param[$key];
- $langfile = $this->attribute_langfile[$key];
- $list = $this->attribute_list[$key];
- $totalizable = $this->attribute_totalizable[$key];
- $hidden = (empty($list) ? 1 : 0); // If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
- }
- if ($computed)
- {
- if (!preg_match('/^search_/', $keyprefix)) return ''.$langs->trans("AutomaticallyCalculated").'';
- else return '';
- }
-
- if (empty($morecss))
- {
- if ($type == 'date')
- {
- $morecss = 'minwidth100imp';
- }
- elseif ($type == 'datetime' || $type == 'link')
- {
- $morecss = 'minwidth200imp';
- }
- elseif (in_array($type, array('int', 'integer', 'double', 'price')))
- {
- $morecss = 'maxwidth75';
- }
- elseif ($type == 'password')
- {
- $morecss = 'maxwidth100';
- }
- elseif ($type == 'url')
- {
- $morecss = 'minwidth400';
- }
- elseif ($type == 'boolean')
- {
- $morecss = '';
- }
- else
- {
- if (round($size) < 12)
- {
- $morecss = 'minwidth100';
- }
- elseif (round($size) <= 48)
- {
- $morecss = 'minwidth200';
- }
- else
- {
- $morecss = 'minwidth400';
- }
- }
- }
-
- if (in_array($type, array('date', 'datetime')))
- {
- $tmp = explode(',', $size);
- $newsize = $tmp[0];
-
- $showtime = in_array($type, array('datetime')) ? 1 : 0;
-
- // Do not show current date when field not required (see selectDate() method)
- if (!$required && $value == '') $value = '-1';
-
- // TODO Must also support $moreparam
- $out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
- }
- elseif (in_array($type, array('int', 'integer')))
- {
- $tmp = explode(',', $size);
- $newsize = $tmp[0];
- $out = '';
- }
- elseif (preg_match('/varchar/', $type))
- {
- $out = '';
- }
- elseif (in_array($type, array('mail', 'phone', 'url')))
- {
- $out = '';
- }
- elseif ($type == 'text')
- {
- if (!preg_match('/search_/', $keyprefix)) // If keyprefix is search_ or search_options_, we must just use a simple text field
- {
- require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
- $doleditor = new DolEditor($keyprefix.$key.$keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, false, ROWS_5, '90%');
- $out = $doleditor->Create(1);
- }
- else
- {
- $out = '';
- }
- }
- elseif ($type == 'html')
- {
- if (!preg_match('/search_/', $keyprefix)) // If keyprefix is search_ or search_options_, we must just use a simple text field
- {
- require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
- $doleditor = new DolEditor($keyprefix.$key.$keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty($conf->fckeditor->enabled) && $conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
- $out = $doleditor->Create(1);
- }
- else
- {
- $out = '';
- }
- }
- elseif ($type == 'boolean')
- {
- if (empty($mode))
- {
- $checked = '';
- if (!empty($value)) {
- $checked = ' checked value="1" ';
- } else {
- $checked = ' value="1" ';
- }
- $out = '';
- }
- else
- {
- $out .= $form->selectyesno($keyprefix.$key.$keysuffix, $value, 1, false, 1);
- }
- }
- elseif ($type == 'price')
- {
- if (!empty($value)) { // $value in memory is a php numeric, we format it into user number format.
- $value = price($value);
- }
- $out = ' '.$langs->getCurrencySymbol($conf->currency);
- }
- elseif ($type == 'double')
- {
- if (!empty($value)) { // $value in memory is a php numeric, we format it into user number format.
- $value = price($value);
- }
- $out = ' ';
- }
- elseif ($type == 'select')
- {
- $out = '';
- if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_EXTRAFIELDS_USE_SELECT2))
- {
- include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
- $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
- }
-
- $out .= '';
- }
- elseif ($type == 'sellist')
- {
- $out = '';
- if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_EXTRAFIELDS_USE_SELECT2))
- {
- include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
- $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
- }
-
- $out .= '';
- }
- elseif ($type == 'checkbox')
- {
- $value_arr = explode(',', $value);
- $out = $form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options']) ?null:$param['options']), $value_arr, '', 0, '', 0, '100%');
- }
- elseif ($type == 'radio')
- {
- $out = '';
- foreach ($param['options'] as $keyopt => $val)
- {
- $out .= ''.$val.'
';
- }
- }
- elseif ($type == 'chkbxlst')
- {
- if (is_array($value)) {
- $value_arr = $value;
- }
- else {
- $value_arr = explode(',', $value);
- }
-
- if (is_array($param['options'])) {
- $param_list = array_keys($param['options']);
- $InfoFieldList = explode(":", $param_list[0]);
- $parentName = '';
- $parentField = '';
- // 0 : tableName
- // 1 : label field name
- // 2 : key fields name (if differ of rowid)
- // 3 : key field parent (for dependent lists)
- // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
- // 5 : id category type
- // 6 : ids categories list separated by comma for category root
- $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2].' as rowid');
-
- if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3])) {
- list ($parentName, $parentField) = explode('|', $InfoFieldList[3]);
- $keyList .= ', '.$parentField;
- }
- if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
- if (strpos($InfoFieldList[4], 'extra.') !== false) {
- $keyList = 'main.'.$InfoFieldList[2].' as rowid';
- } else {
- $keyList = $InfoFieldList[2].' as rowid';
- }
- }
-
- $filter_categorie = false;
- if (count($InfoFieldList) > 5) {
- if ($InfoFieldList[0] == 'categorie') {
- $filter_categorie = true;
- }
- }
-
- if ($filter_categorie === false) {
- $fields_label = explode('|', $InfoFieldList[1]);
- if (is_array($fields_label)) {
- $keyList .= ', ';
- $keyList .= implode(', ', $fields_label);
- }
-
- $sqlwhere = '';
- $sql = 'SELECT '.$keyList;
- $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
- if (!empty($InfoFieldList[4])) {
- // can use SELECT request
- if (strpos($InfoFieldList[4], '$SEL$') !== false) {
- $InfoFieldList[4] = str_replace('$SEL$', 'SELECT', $InfoFieldList[4]);
- }
-
- // current object id can be use into filter
- if (strpos($InfoFieldList[4], '$ID$') !== false && !empty($objectid)) {
- $InfoFieldList[4] = str_replace('$ID$', $objectid, $InfoFieldList[4]);
- } elseif (preg_match("#^.*list.php$#", $_SERVER["PHP_SELF"])) {
- // Pattern for word=$ID$
- $word = '\b[a-zA-Z0-9-\.-_]+\b=\$ID\$';
-
- // Removing space arount =, ( and )
- $InfoFieldList[4] = preg_replace('# *(=|\(|\)) *#', '$1', $InfoFieldList[4]);
-
- $nbPreg = 1;
- // While we have parenthesis
- while ($nbPreg != 0) {
- // Init des compteurs
- $nbPregRepl = $nbPregSel = 0;
- // On retire toutes les parenthèses sans = avant
- $InfoFieldList[4] = preg_replace('#([^=])(\([^)^(]*('.$word.')[^)^(]*\))#', '$1 $3 ', $InfoFieldList[4], -1, $nbPregRepl);
- // On retire les espaces autour des = et parenthèses
- $InfoFieldList[4] = preg_replace('# *(=|\(|\)) *#', '$1', $InfoFieldList[4]);
- // On retire toutes les parenthèses avec = avant
- $InfoFieldList[4] = preg_replace('#\b[a-zA-Z0-9-\.-_]+\b=\([^)^(]*('.$word.')[^)^(]*\)#', '$1 ', $InfoFieldList[4], -1, $nbPregSel);
- // On retire les espaces autour des = et parenthèses
- $InfoFieldList[4] = preg_replace('# *(=|\(|\)) *#', '$1', $InfoFieldList[4]);
-
- // Calcul du compteur général pour la boucle
- $nbPreg = $nbPregRepl + $nbPregSel;
- }
-
- // Si l'on a un AND ou un OR, avant ou après
- preg_match('#(AND|OR|) *('.$word.') *(AND|OR|)#', $InfoFieldList[4], $matchCondition);
- while (!empty($matchCondition[0])) {
- // If the two sides differ but are not empty
- if (!empty($matchCondition[1]) && !empty($matchCondition[3]) && $matchCondition[1] != $matchCondition[3]) {
- // Nobody sain would do that without parentheses
- $InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]);
- } else {
- if (!empty($matchCondition[1])) {
- $boolCond = (($matchCondition[1] == "AND") ? ' AND TRUE ' : ' OR FALSE ');
- $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond.$matchCondition[3], $InfoFieldList[4]);
- } elseif (!empty($matchCondition[3])) {
- $boolCond = (($matchCondition[3] == "AND") ? ' TRUE AND ' : ' FALSE OR');
- $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond, $InfoFieldList[4]);
- } else {
- $InfoFieldList[4] = " TRUE ";
- }
- }
-
- // Si l'on a un AND ou un OR, avant ou après
- preg_match('#(AND|OR|) *('.$word.') *(AND|OR|)#', $InfoFieldList[4], $matchCondition);
- }
- } else {
- $InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]);
- }
-
- // We have to join on extrafield table
- if (strpos($InfoFieldList[4], 'extra.') !== false) {
- $sql .= ' as main, '.MAIN_DB_PREFIX.$InfoFieldList[0].'_extrafields as extra';
- $sqlwhere .= ' WHERE extra.fk_object=main.'.$InfoFieldList[2].' AND '.$InfoFieldList[4];
- } else {
- $sqlwhere .= ' WHERE '.$InfoFieldList[4];
- }
- } else {
- $sqlwhere .= ' WHERE 1=1';
- }
- // Some tables may have field, some other not. For the moment we disable it.
- if (in_array($InfoFieldList[0], array('tablewithentity'))) {
- $sqlwhere .= ' AND entity = '.$conf->entity;
- }
- // $sql.=preg_replace('/^ AND /','',$sqlwhere);
- // print $sql;
-
- $sql .= $sqlwhere;
- dol_syslog(get_class($this).'::showInputField type=chkbxlst', LOG_DEBUG);
- $resql = $this->db->query($sql);
- if ($resql) {
- $num = $this->db->num_rows($resql);
- $i = 0;
-
- $data = array();
-
- while ($i < $num) {
- $labeltoshow = '';
- $obj = $this->db->fetch_object($resql);
-
- $notrans = false;
- // Several field into label (eq table:code|libelle:rowid)
- $fields_label = explode('|', $InfoFieldList[1]);
- if (is_array($fields_label)) {
- $notrans = true;
- foreach ($fields_label as $field_toshow) {
- $labeltoshow .= $obj->$field_toshow.' ';
- }
- } else {
- $labeltoshow = $obj->{$InfoFieldList[1]};
- }
- $labeltoshow = dol_trunc($labeltoshow, 45);
-
- if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
- foreach ($fields_label as $field_toshow) {
- $translabel = $langs->trans($obj->$field_toshow);
- if ($translabel != $obj->$field_toshow) {
- $labeltoshow = dol_trunc($translabel, 18).' ';
- } else {
- $labeltoshow = dol_trunc($obj->$field_toshow, 18).' ';
- }
- }
-
- $data[$obj->rowid] = $labeltoshow;
- } else {
- if (!$notrans) {
- $translabel = $langs->trans($obj->{$InfoFieldList[1]});
- if ($translabel != $obj->{$InfoFieldList[1]}) {
- $labeltoshow = dol_trunc($translabel, 18);
- } else {
- $labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18);
- }
- }
- if (empty($labeltoshow))
- $labeltoshow = '(not defined)';
-
- if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
- $data[$obj->rowid] = $labeltoshow;
- }
-
- if (!empty($InfoFieldList[3]) && $parentField) {
- $parent = $parentName.':'.$obj->{$parentField};
- }
-
- $data[$obj->rowid] = $labeltoshow;
- }
-
- $i++;
- }
- $this->db->free($resql);
-
- $out = $form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
- } else {
- print 'Error in request '.$sql.' '.$this->db->lasterror().'. Check setup of extra parameters.
';
- }
- } else {
- require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
- $data = $form->select_all_categories(Categorie::$MAP_ID_TO_CODE[$InfoFieldList[5]], '', 'parent', 64, $InfoFieldList[6], 1, 1);
- $out = $form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
- }
- }
- }
- elseif ($type == 'link')
- {
- $param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
- $showempty = (($required && $default != '') ? 0 : 1);
- $out = $form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty, '', '', $morecss);
- }
- elseif ($type == 'password')
- {
- // If prefix is 'search_', field is used as a filter, we use a common text field.
- $out = ''; // Hidden field to reduce impact of evil Google Chrome autopopulate bug.
- $out .= '';
- }
- if (!empty($hidden)) {
- $out = '';
- }
- /* Add comments
- if ($type == 'date') $out.=' (YYYY-MM-DD)';
- elseif ($type == 'datetime') $out.=' (YYYY-MM-DD HH:MM:SS)';
- */
- /*if (! empty($help) && $keyprefix != 'search_options_') {
- $out .= $form->textwithpicto('', $help, 1, 'help', '', 0, 3);
- }*/
return $out;
}
@@ -749,601 +156,16 @@ class ExtraLanguages
*
* @param string $key Key of attribute
* @param string $value Value to show
- * @param string $moreparam To add more parameters on html input tag (only checkbox use html input for output rendering)
* @param string $extrafieldsobjectkey If defined (for example $object->table_element), function uses the new method to get extrafields data
+ * @param string $moreparam To add more parameters on html input tag (only checkbox use html input for output rendering)
* @return string Formated value
*/
- public function showOutputField($key, $value, $moreparam = '', $extrafieldsobjectkey = '')
+ public function showOutputField($key, $value, $extrafieldsobjectkey, $moreparam = '')
{
global $conf, $langs;
- if (!empty($extrafieldsobjectkey))
- {
- $label = $this->attributes[$extrafieldsobjectkey]['label'][$key];
- $type = $this->attributes[$extrafieldsobjectkey]['type'][$key];
- $size = $this->attributes[$extrafieldsobjectkey]['size'][$key];
- $default = $this->attributes[$extrafieldsobjectkey]['default'][$key];
- $computed = $this->attributes[$extrafieldsobjectkey]['computed'][$key];
- $unique = $this->attributes[$extrafieldsobjectkey]['unique'][$key];
- $required = $this->attributes[$extrafieldsobjectkey]['required'][$key];
- $param = $this->attributes[$extrafieldsobjectkey]['param'][$key];
- $perms = dol_eval($this->attributes[$extrafieldsobjectkey]['perms'][$key], 1);
- $langfile = $this->attributes[$extrafieldsobjectkey]['langfile'][$key];
- $list = dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1);
- $help = $this->attributes[$extrafieldsobjectkey]['help'][$key];
- $hidden = (empty($list) ? 1 : 0); // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
- }
- else // Old usage
- {
- //dol_syslog("Warning: parameter 'extrafieldsobjectkey' is missing", LOG_WARNING);
- $label = $this->attribute_label[$key];
- $type = $this->attribute_type[$key];
- $size = $this->attribute_size[$key];
- $default = $this->attribute_default[$key];
- $computed = $this->attribute_computed[$key];
- $unique = $this->attribute_unique[$key];
- $required = $this->attribute_required[$key];
- $param = $this->attribute_param[$key];
- $perms = dol_eval($this->attribute_perms[$key], 1);
- $langfile = $this->attribute_langfile[$key];
- $list = dol_eval($this->attribute_list[$key], 1);
- $help = ''; // Not supported with old syntax
- $hidden = (empty($list) ? 1 : 0); // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
- }
-
- if ($hidden) return ''; // This is a protection. If field is hidden, we should just not call this method.
-
- //if ($computed) $value = // $value is already calculated into $value before calling this method
-
- $showsize = 0;
- if ($type == 'date')
- {
- $showsize = 10;
- $value = dol_print_date($value, 'day');
- }
- elseif ($type == 'datetime')
- {
- $showsize = 19;
- $value = dol_print_date($value, 'dayhour');
- }
- elseif ($type == 'int')
- {
- $showsize = 10;
- }
- elseif ($type == 'double')
- {
- if (!empty($value)) {
- //$value=price($value);
- $sizeparts = explode(",", $size);
- $number_decimals = $sizeparts[1];
- $value = price($value, 0, $langs, 0, 0, $number_decimals, '');
- }
- }
- elseif ($type == 'boolean')
- {
- $checked = '';
- if (!empty($value)) {
- $checked = ' checked ';
- }
- $value = '';
- }
- elseif ($type == 'mail')
- {
- $value = dol_print_email($value, 0, 0, 0, 64, 1, 1);
- }
- elseif ($type == 'url')
- {
- $value = dol_print_url($value, '_blank', 32, 1);
- }
- elseif ($type == 'phone')
- {
- $value = dol_print_phone($value, '', 0, 0, '', ' ', 'phone');
- }
- elseif ($type == 'price')
- {
- $value = price($value, 0, $langs, 0, 0, -1, $conf->currency);
- }
- elseif ($type == 'select')
- {
- if ($langfile && $param['options'][$value]) $value = $langs->trans($param['options'][$value]);
- else $value = $param['options'][$value];
- }
- elseif ($type == 'sellist')
- {
- $param_list = array_keys($param['options']);
- $InfoFieldList = explode(":", $param_list[0]);
-
- $selectkey = "rowid";
- $keyList = 'rowid';
-
- if (count($InfoFieldList) >= 3)
- {
- $selectkey = $InfoFieldList[2];
- $keyList = $InfoFieldList[2].' as rowid';
- }
-
- $fields_label = explode('|', $InfoFieldList[1]);
- if (is_array($fields_label)) {
- $keyList .= ', ';
- $keyList .= implode(', ', $fields_label);
- }
-
- $sql = 'SELECT '.$keyList;
- $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
- if (strpos($InfoFieldList[4], 'extra') !== false)
- {
- $sql .= ' as main';
- }
- if ($selectkey == 'rowid' && empty($value)) {
- $sql .= " WHERE ".$selectkey."=0";
- } elseif ($selectkey == 'rowid') {
- $sql .= " WHERE ".$selectkey."=".$this->db->escape($value);
- } else {
- $sql .= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
- }
-
- //$sql.= ' AND entity = '.$conf->entity;
-
- dol_syslog(get_class($this).':showOutputField:$type=sellist', LOG_DEBUG);
- $resql = $this->db->query($sql);
- if ($resql)
- {
- $value = ''; // value was used, so now we reste it to use it to build final output
-
- $obj = $this->db->fetch_object($resql);
-
- // Several field into label (eq table:code|libelle:rowid)
- $fields_label = explode('|', $InfoFieldList[1]);
-
- if (is_array($fields_label) && count($fields_label) > 1)
- {
- foreach ($fields_label as $field_toshow)
- {
- $translabel = '';
- if (!empty($obj->$field_toshow)) {
- $translabel = $langs->trans($obj->$field_toshow);
- }
- if ($translabel != $field_toshow) {
- $value .= dol_trunc($translabel, 18).' ';
- } else {
- $value .= $obj->$field_toshow.' ';
- }
- }
- }
- else
- {
- $translabel = '';
- if (!empty($obj->{$InfoFieldList[1]})) {
- $translabel = $langs->trans($obj->{$InfoFieldList[1]});
- }
- if ($translabel != $obj->{$InfoFieldList[1]}) {
- $value = dol_trunc($translabel, 18);
- } else {
- $value = $obj->{$InfoFieldList[1]};
- }
- }
- }
- else dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
- }
- elseif ($type == 'radio')
- {
- $value = $param['options'][$value];
- }
- elseif ($type == 'checkbox')
- {
- $value_arr = explode(',', $value);
- $value = '';
- $toprint = array();
- if (is_array($value_arr))
- {
- foreach ($value_arr as $keyval=>$valueval) {
- $toprint[] = '