Enhance update of 1 extrafield (simple update instead of delete+insert)
This commit is contained in:
parent
d21ad72e4a
commit
572637b726
@ -1321,7 +1321,7 @@ if (empty($reshook))
|
|||||||
if ($ret < 0) $error++;
|
if ($ret < 0) $error++;
|
||||||
if (!$error)
|
if (!$error)
|
||||||
{
|
{
|
||||||
$result = $object->insertExtraFields('PROPAL_MODIFY');
|
$result = $object->updateExtraField(GETPOST('attribute', 'restricthtml'), 'PROPAL_MODIFY', $user);
|
||||||
if ($result < 0)
|
if ($result < 0)
|
||||||
{
|
{
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
|||||||
@ -5195,7 +5195,7 @@ abstract class CommonObject
|
|||||||
$extrafields = new ExtraFields($this->db);
|
$extrafields = new ExtraFields($this->db);
|
||||||
$target_extrafields = $extrafields->fetch_name_optionals_label($this->table_element);
|
$target_extrafields = $extrafields->fetch_name_optionals_label($this->table_element);
|
||||||
|
|
||||||
//Eliminate copied source object extra_fields that do not exist in target object
|
// Eliminate copied source object extra fields that do not exist in target object
|
||||||
$new_array_options = array();
|
$new_array_options = array();
|
||||||
foreach ($this->array_options as $key => $value) {
|
foreach ($this->array_options as $key => $value) {
|
||||||
if (in_array(substr($key, 8), array_keys($target_extrafields))) // We remove the 'options_' from $key for test
|
if (in_array(substr($key, 8), array_keys($target_extrafields))) // We remove the 'options_' from $key for test
|
||||||
@ -5325,11 +5325,10 @@ abstract class CommonObject
|
|||||||
if ($value == '-1') // -1 is key for no defined in combo list of objects
|
if ($value == '-1') // -1 is key for no defined in combo list of objects
|
||||||
{
|
{
|
||||||
$new_array_options[$key] = '';
|
$new_array_options[$key] = '';
|
||||||
} elseif ($value)
|
} elseif ($value) {
|
||||||
{
|
|
||||||
$object = new $InfoFieldList[0]($this->db);
|
$object = new $InfoFieldList[0]($this->db);
|
||||||
if (is_numeric($value)) $res = $object->fetch($value);
|
if (is_numeric($value)) $res = $object->fetch($value); // Common case
|
||||||
else $res = $object->fetch('', $value);
|
else $res = $object->fetch('', $value); // For compatibility
|
||||||
|
|
||||||
if ($res > 0) $new_array_options[$key] = $object->id;
|
if ($res > 0) $new_array_options[$key] = $object->id;
|
||||||
else {
|
else {
|
||||||
@ -5552,7 +5551,7 @@ abstract class CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update an extra field value for the current object.
|
* Update 1 extra field value for the current object. Keep other fields unchanged.
|
||||||
* Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
|
* Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
|
||||||
*
|
*
|
||||||
* @param string $key Key of the extrafield to update (without starting 'options_')
|
* @param string $key Key of the extrafield to update (without starting 'options_')
|
||||||
@ -5630,31 +5629,65 @@ abstract class CommonObject
|
|||||||
case 'datetime':
|
case 'datetime':
|
||||||
$this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]);
|
$this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]);
|
||||||
break;
|
break;
|
||||||
|
/*
|
||||||
case 'link':
|
case 'link':
|
||||||
$param_list = array_keys($attributeParam['options']);
|
$param_list = array_keys($attributeParam['options']);
|
||||||
// 0 : ObjectName
|
// 0 : ObjectName
|
||||||
// 1 : classPath
|
// 1 : classPath
|
||||||
$InfoFieldList = explode(":", $param_list[0]);
|
$InfoFieldList = explode(":", $param_list[0]);
|
||||||
dol_include_once($InfoFieldList[1]);
|
dol_include_once($InfoFieldList[1]);
|
||||||
if ($value)
|
if ($InfoFieldList[0] && class_exists($InfoFieldList[0]))
|
||||||
{
|
{
|
||||||
$object = new $InfoFieldList[0]($this->db);
|
if ($value == '-1') // -1 is key for no defined in combo list of objects
|
||||||
$object->fetch(0, $value);
|
{
|
||||||
$this->array_options["options_".$key] = $object->id;
|
$new_array_options[$key] = '';
|
||||||
|
} elseif ($value) {
|
||||||
|
$object = new $InfoFieldList[0]($this->db);
|
||||||
|
if (is_numeric($value)) $res = $object->fetch($value); // Common case
|
||||||
|
else $res = $object->fetch('', $value); // For compatibility
|
||||||
|
|
||||||
|
if ($res > 0) $new_array_options[$key] = $object->id;
|
||||||
|
else {
|
||||||
|
$this->error = "Id/Ref '".$value."' for object '".$object->element."' not found";
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dol_syslog('Error bad setup of extrafield', LOG_WARNING);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key."='".$this->db->escape($this->array_options["options_".$key])."'";
|
|
||||||
$sql .= " WHERE fk_object = ".$this->id;
|
$linealreadyfound = 0;
|
||||||
|
|
||||||
|
// Check if there is already a line for this object (in most cases, it is, but sometimes it is not, for example when extra field has been created after), so we must keep this overload)
|
||||||
|
$sql .= "SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.$this->table_element."_extrafields WHERE fk_object = ".$this->id;
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
$tmpobj = $this->db->fetch_object($resql);
|
||||||
|
if ($tmpobj) {
|
||||||
|
$linealreadyfound = $tmpobj->nb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($linealreadyfound) {
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key." = '".$this->db->escape($this->array_options["options_".$key])."'";
|
||||||
|
$sql .= " WHERE fk_object = ".$this->id;
|
||||||
|
} else {
|
||||||
|
$result = $this->insertExtraFields('', $user);
|
||||||
|
if ($result < 0) $error++;
|
||||||
|
}
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if (!$resql)
|
if (!$resql)
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
$this->error = $this->db->lasterror();
|
$this->error = $this->db->lasterror();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error && $trigger)
|
if (!$error && $trigger)
|
||||||
{
|
{
|
||||||
// Call trigger
|
// Call trigger
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user