FIX Can't insert if there is extrafields mandatory on another entity.
This commit is contained in:
parent
b11403103b
commit
4c85068a85
@ -4979,8 +4979,9 @@ abstract class CommonObject
|
||||
$table_element = $this->table_element;
|
||||
if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
|
||||
|
||||
dol_syslog(get_class($this)."::insertExtraFields delete then insert", LOG_DEBUG);
|
||||
|
||||
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
|
||||
dol_syslog(get_class($this)."::insertExtraFields delete", LOG_DEBUG);
|
||||
$this->db->query($sql_del);
|
||||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX.$table_element."_extrafields (fk_object";
|
||||
@ -4991,6 +4992,11 @@ abstract class CommonObject
|
||||
if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator
|
||||
$sql.=",".$attributeKey;
|
||||
}
|
||||
// We must insert a default value for fields for other entities that are mandatory to avoid not null error
|
||||
foreach($extrafields->attributes[$this->table_element]['mandatoryfieldsofotherentities'] as $tmpkey => $tmpval)
|
||||
{
|
||||
$sql.=",".$tmpkey;
|
||||
}
|
||||
$sql .= ") VALUES (".$this->id;
|
||||
|
||||
foreach($new_array_options as $key => $value)
|
||||
@ -5009,10 +5015,17 @@ abstract class CommonObject
|
||||
}
|
||||
}
|
||||
}
|
||||
// We must insert a default value for fields for other entities that are mandatory to avoid not null error
|
||||
foreach($extrafields->attributes[$this->table_element]['mandatoryfieldsofotherentities'] as $tmpkey => $tmpval)
|
||||
{
|
||||
if (in_array($tmpval, array('int', 'double'))) $sql.=", 0";
|
||||
else $sql.=", ''";
|
||||
}
|
||||
|
||||
$sql.=")";
|
||||
|
||||
dol_syslog(get_class($this)."::insertExtraFields insert", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
|
||||
if (! $resql)
|
||||
{
|
||||
$this->error=$this->db->lasterror();
|
||||
|
||||
@ -747,7 +747,7 @@ class ExtraFields
|
||||
* @param boolean $forceload Force load of extra fields whatever is option MAIN_EXTRAFIELDS_DISABLED. Deprecated. Should not be required.
|
||||
* @return array Array of attributes keys+label for all extra fields.
|
||||
*/
|
||||
function fetch_name_optionals_label($elementtype,$forceload=false)
|
||||
function fetch_name_optionals_label($elementtype, $forceload=false)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
@ -783,8 +783,8 @@ class ExtraFields
|
||||
|
||||
$sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,langs,list,fielddefault,fieldcomputed,entity,enabled";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."extrafields";
|
||||
$sql.= " WHERE entity IN (0,".$conf->entity.")";
|
||||
if ($elementtype) $sql.= " AND elementtype = '".$elementtype."'"; // Filed with object->table_element
|
||||
//$sql.= " WHERE entity IN (0,".$conf->entity.")"; // Filter is done later
|
||||
if ($elementtype) $sql.= " WHERE elementtype = '".$elementtype."'"; // Filed with object->table_element
|
||||
$sql.= " ORDER BY pos";
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
@ -794,6 +794,16 @@ class ExtraFields
|
||||
{
|
||||
while ($tab = $this->db->fetch_object($resql))
|
||||
{
|
||||
if ($tab->entity != 0 && $tab->entity != $conf->entity)
|
||||
{
|
||||
// This field is not in current entity. We discard but before we save it into the array of mandatory fields if it is a mandatory field
|
||||
if ($tab->fieldrequired)
|
||||
{
|
||||
$this->attributes[$tab->elementtype]['mandatoryfieldsofotherentities'][$tab->name]=$tab->type;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// We can add this attribute to object. TODO Remove this and return $this->attributes[$elementtype]['label']
|
||||
if ($tab->type != 'separate')
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user