diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 719bc347069..72b2b2d2ed8 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -157,9 +157,10 @@ class ExtraFields * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is a measure. Must show a total on lists * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>Css on list, 'cssview'=>...) * @return int <=0 if KO, >0 if OK */ - public function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + public function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { if (empty($attrname)) { return -1; @@ -183,12 +184,12 @@ class ExtraFields // Create field into database except for separator type which is not stored in database if ($type != 'separate') { - $result = $this->create($attrname, $type, $size, $elementtype, $unique, $required, $default_value, $param, $perms, $list, $computed, $help); + $result = $this->create($attrname, $type, $size, $elementtype, $unique, $required, $default_value, $param, $perms, $list, $computed, $help, $moreparams); } $err1 = $this->errno; if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' || $type == 'separate') { // Add declaration of field into table - $result2 = $this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled, $totalizable, $printable); + $result2 = $this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled, $totalizable, $printable, $moreparams); $err2 = $this->errno; if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS')) { $this->error = ''; @@ -218,9 +219,10 @@ class ExtraFields * @param string $list Into list view by default * @param string $computed Computed value * @param string $help Help on tooltip + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int <=0 if KO, >0 if OK */ - private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '', $help = '') + private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '', $help = '', $moreparams = array()) { if ($elementtype == 'thirdparty') { $elementtype = 'societe'; @@ -316,11 +318,12 @@ class ExtraFields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is a measure. Must show a total on lists - * @param int $printable Is extrafield displayed on PDF + * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int <=0 if KO, >0 if OK * @throws Exception */ - private function create_label($attrname, $label = '', $type = '', $pos = 0, $size = 0, $elementtype = 'member', $unique = 0, $required = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + private function create_label($attrname, $label = '', $type = '', $pos = 0, $size = 0, $elementtype = 'member', $unique = 0, $required = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { // phpcs:enable global $conf, $user; @@ -355,6 +358,19 @@ class ExtraFields $totalizable = 0; } + $css = ''; + if (!empty($moreparams) && !empty($moreparams['css'])) { + $css = $moreparams['css']; + } + $csslist = ''; + if (!empty($moreparams) && !empty($moreparams['csslist'])) { + $csslist = $moreparams['csslist']; + } + $cssview = ''; + if (!empty($moreparams) && !empty($moreparams['cssview'])) { + $cssview = $moreparams['cssview']; + } + if (!empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname) && !is_numeric($attrname)) { if (is_array($param) && count($param) > 0) { $params = serialize($param); @@ -387,7 +403,10 @@ class ExtraFields $sql .= " datec,"; $sql .= " enabled,"; $sql .= " help,"; - $sql .= " totalizable"; + $sql .= " totalizable,"; + $sql .= " css,"; + $sql .= " csslist,"; + $sql .= " cssview"; $sql .= " )"; $sql .= " VALUES('".$this->db->escape($attrname)."',"; $sql .= " '".$this->db->escape($label)."',"; @@ -411,7 +430,10 @@ class ExtraFields $sql .= "'".$this->db->idate(dol_now())."',"; $sql .= " ".($enabled ? "'".$this->db->escape($enabled)."'" : "1").","; $sql .= " ".($help ? "'".$this->db->escape($help)."'" : "null").","; - $sql .= " ".($totalizable ? 'TRUE' : 'FALSE'); + $sql .= " ".($totalizable ? 'TRUE' : 'FALSE').","; + $sql .= " ".($css ? "'".$this->db->escape($css)."'" : "null").","; + $sql .= " ".($csslist ? "'".$this->db->escape($csslist)."'" : "null").","; + $sql .= " ".($cssview ? "'".$this->db->escape($cssview)."'" : "null"); $sql .= ')'; dol_syslog(get_class($this)."::create_label", LOG_DEBUG); @@ -543,11 +565,12 @@ class ExtraFields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is extrafield totalizable on list - * @param int $printable Is extrafield displayed on PDF + * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int >0 if OK, <=0 if KO * @throws Exception */ - public function update($attrname, $label, $type, $length, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + public function update($attrname, $label, $type, $length, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { global $hookmanager; @@ -612,7 +635,7 @@ class ExtraFields } if ($result > 0 || $type == 'separate') { if ($label) { - $result = $this->update_label($attrname, $label, $type, $length, $elementtype, $unique, $required, $pos, $param, $alwayseditable, $perms, $list, $help, $default, $computed, $entity, $langfile, $enabled, $totalizable, $printable); + $result = $this->update_label($attrname, $label, $type, $length, $elementtype, $unique, $required, $pos, $param, $alwayseditable, $perms, $list, $help, $default, $computed, $entity, $langfile, $enabled, $totalizable, $printable, $moreparams); } if ($result > 0) { $sql = ''; @@ -664,11 +687,12 @@ class ExtraFields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not * @param int $totalizable Is extrafield totalizable on list - * @param int $printable Is extrafield displayed on PDF + * @param int $printable Is extrafield displayed on PDF + * @param array $moreparams More parameters. Example: array('css'=>, 'csslist'=>, 'cssview'=>...) * @return int <=0 if KO, >0 if OK * @throws Exception */ - private function update_label($attrname, $label, $type, $size, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '0', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0) + private function update_label($attrname, $label, $type, $size, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '0', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array()) { // phpcs:enable global $conf, $user; @@ -701,6 +725,19 @@ class ExtraFields $alwayseditable = 0; } + $css = ''; + if (!empty($moreparams) && !empty($moreparams['css'])) { + $css = $moreparams['css']; + } + $csslist = ''; + if (!empty($moreparams) && !empty($moreparams['csslist'])) { + $csslist = $moreparams['csslist']; + } + $cssview = ''; + if (!empty($moreparams) && !empty($moreparams['cssview'])) { + $cssview = $moreparams['cssview']; + } + if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname)) { $this->db->begin(); @@ -750,7 +787,10 @@ class ExtraFields $sql .= " fk_user_modif,"; $sql .= " datec,"; $sql .= " enabled,"; - $sql .= " help"; + $sql .= " help,"; + $sql .= " css,"; + $sql .= " csslist,"; + $sql .= " cssview"; $sql .= ") VALUES ("; $sql .= "'".$this->db->escape($attrname)."',"; $sql .= " ".($entity === '' ? $conf->entity : $entity).","; @@ -774,7 +814,10 @@ class ExtraFields $sql .= " ".$user->id.","; $sql .= "'".$this->db->idate(dol_now())."',"; $sql .= "'".$this->db->escape($enabled)."',"; - $sql .= " ".($help ? "'".$this->db->escape($help)."'" : "null"); + $sql .= " ".($help ? "'".$this->db->escape($help)."'" : "null").","; + $sql .= " ".($css ? "'".$this->db->escape($css)."'" : "null").","; + $sql .= " ".($csslist ? "'".$this->db->escape($csslist)."'" : "null").","; + $sql .= " ".($cssview ? "'".$this->db->escape($cssview)."'" : "null"); $sql .= ")"; $resql2 = $this->db->query($sql); @@ -953,7 +996,10 @@ class ExtraFields } } + // + // 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'cssview'=>'wordbreak', 'csslist'=>'tdoverflowmax200' if (empty($morecss)) { + // Add automatic css if ($type == 'date') { $morecss = 'minwidth100imp'; } elseif ($type == 'datetime' || $type == 'link') { @@ -977,6 +1023,10 @@ class ExtraFields $morecss = 'minwidth400'; } } + // If css forced in attribute, we use this one + if (!empty($this->attributes[$extrafieldsobjectkey]['css'][$key])) { + $morecss = $this->attributes[$extrafieldsobjectkey]['css'][$key]; + } } if (in_array($type, array('date'))) {