mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-06-19 17:38:06 +02:00
Fixed some problems with the etag handling, causing an SQL error on
merging contacts, as reported by Johannes Gorschlüter from Stylite
This commit is contained in:
parent
d884a13521
commit
b69b8085e6
@ -1006,6 +1006,7 @@ class addressbook_bo extends addressbook_so
|
|||||||
case 'tid':
|
case 'tid':
|
||||||
case 'owner':
|
case 'owner':
|
||||||
case 'private':
|
case 'private':
|
||||||
|
case 'etag';
|
||||||
break; // ignored
|
break; // ignored
|
||||||
|
|
||||||
case 'cat_id': // cats are all merged together
|
case 'cat_id': // cats are all merged together
|
||||||
|
@ -625,6 +625,7 @@ class addressbook_sql extends so_sql
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
unset($this->data['etag']);
|
||||||
$new_entry = !$this->data['id'];
|
$new_entry = !$this->data['id'];
|
||||||
if (!($err = parent::save(array('contact_etag=contact_etag+1'))) && $new_entry)
|
if (!($err = parent::save(array('contact_etag=contact_etag+1'))) && $new_entry)
|
||||||
{
|
{
|
||||||
|
@ -422,8 +422,8 @@ class so_sql
|
|||||||
* saves the content of data to the db
|
* saves the content of data to the db
|
||||||
*
|
*
|
||||||
* @param array $keys if given $keys are copied to data before saveing => allows a save as
|
* @param array $keys if given $keys are copied to data before saveing => allows a save as
|
||||||
* @param string|array $extra_where=null extra where clause, eg. to check the etag, returns 'nothing_affected' if not affected rows
|
* @param string|array $extra_where=null extra where clause, eg. to check an etag, returns true if no affected rows!
|
||||||
* @return int 0 on success and errno != 0 else
|
* @return int|boolean 0 on success, or errno != 0 on error, or true if $extra_where is given and no rows affected
|
||||||
*/
|
*/
|
||||||
function save($keys=null,$extra_where=null)
|
function save($keys=null,$extra_where=null)
|
||||||
{
|
{
|
||||||
@ -489,15 +489,23 @@ class so_sql
|
|||||||
$data = $keys;
|
$data = $keys;
|
||||||
$keys = False;
|
$keys = False;
|
||||||
}
|
}
|
||||||
|
if ($this->autoinc_id)
|
||||||
|
{
|
||||||
|
$this->db->update($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app);
|
||||||
|
if (($nothing_affected = !$this->db->Errno && !$this->db->affected_rows()) && $extra_where)
|
||||||
|
{
|
||||||
|
return true; // extra_where not met, eg. etag wrong
|
||||||
|
}
|
||||||
|
}
|
||||||
// always try an insert if we have no autoinc_id, as we dont know if the data exists
|
// always try an insert if we have no autoinc_id, as we dont know if the data exists
|
||||||
if (!$this->autoinc_id || !$this->db->update($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app) || !$this->db->affected_rows())
|
if (!$this->autoinc_id || $nothing_affected)
|
||||||
{
|
{
|
||||||
$this->db->insert($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app);
|
$this->db->insert($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db2data();
|
$this->db2data();
|
||||||
|
|
||||||
return $this->db->Errno ? $this->db->Errno : ($extra_where && !$this->db->affected_rows() ? true : 0);
|
return $this->db->Errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user