diff --git a/addressbook/inc/class.addressbook_so.inc.php b/addressbook/inc/class.addressbook_so.inc.php index 2fe0efbbec..73f1f3e3a3 100755 --- a/addressbook/inc/class.addressbook_so.inc.php +++ b/addressbook/inc/class.addressbook_so.inc.php @@ -791,20 +791,17 @@ class addressbook_so if (!$new_owner) { - $this->somain->delete(array('owner' => $account_id)); - if(!($this->somain instanceof addressbook_sql)) + $this->somain->delete(array('owner' => $account_id)); // so_sql_cf::delete() takes care of cfs too + + if(method_exists($this->somain, 'get_lists')) { - $this->soextra->delete_customfields(array($this->extra_owner => $account_id)); + $lists = $this->somain->get_lists($account_id); + $this->somain->delete_list(array_keys($lists)); } } else { $this->somain->change_owner($account_id,$new_owner); - $this->db->update($this->soextra->table_name,array( - $this->extra_owner => $new_owner - ),array( - $this->extra_owner => $account_id - ),__LINE__,__FILE__); } } diff --git a/addressbook/inc/class.addressbook_sql.inc.php b/addressbook/inc/class.addressbook_sql.inc.php index a6c914d82e..e234dcb5c1 100644 --- a/addressbook/inc/class.addressbook_sql.inc.php +++ b/addressbook/inc/class.addressbook_sql.inc.php @@ -54,6 +54,8 @@ class addressbook_sql extends so_sql_cf */ var $ab2list_table = 'egw_addressbook2list'; + const EXTRA_TABLE = 'egw_addressbook_extra'; + /** * Constructor * @@ -61,7 +63,7 @@ class addressbook_sql extends so_sql_cf */ function __construct(egw_db $db=null) { - parent::__construct('phpgwapi','egw_addressbook','egw_addressbook_extra','contact_', + parent::__construct('phpgwapi', 'egw_addressbook', self::EXTRA_TABLE, 'contact_', $extra_key='_name',$extra_value='_value',$extra_id='_id',$db); // Get custom fields from addressbook instead of phpgwapi @@ -454,7 +456,7 @@ class addressbook_sql extends so_sql_cf } /** - * Change the ownership of contacts owned by a given account + * Change the ownership of contacts and distribution-lists owned by a given account * * @param int $account_id account-id of the old owner * @param int $new_owner account-id of the new owner @@ -463,13 +465,28 @@ class addressbook_sql extends so_sql_cf { if (!$new_owner) // otherwise we would create an account (contact_owner==0) { - die("socontacts_sql::change_owner($account_id,$new_owner) new owner must not be 0"); + throw egw_exception_wrong_parameter(__METHOD__."($account_id, $new_owner) new owner must not be 0!"); } + // contacts $this->db->update($this->table_name,array( 'contact_owner' => $new_owner, ),array( 'contact_owner' => $account_id, ),__LINE__,__FILE__); + + // cfs + $this->db->update(self::EXTRA_TABLE, array( + 'contact_owner' => $new_owner + ),array( + 'contact_owner' => $account_id + ), __LINE__, __FILE__); + + // lists + $this->db->update($this->lists_table, array( + 'list_owner' => $new_owner, + ),array( + 'list_owner' => $account_id, + ),__LINE__,__FILE__); } /**