Fix issue where groups were not deleted when "Replace entire addressbook" option on contacts import was used (#1489420)

pull/157/head
Aleksander Machniak 11 years ago
parent e71ceb0c98
commit 18b40c1a32

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix issue where groups were not deleted when "Replace entire addressbook" option on contacts import was used (#1489420)
- Fix unreliable mimetype tests in Installer (#1489453)
- Fix performance of listing writeable folders (#1489451)

@ -311,8 +311,10 @@ abstract class rcube_addressbook
/**
* Mark all records in database as deleted
*
* @param bool $with_groups Remove also groups
*/
function delete_all()
function delete_all($with_groups = false)
{
/* empty for read-only address books */
}

@ -812,16 +812,30 @@ class rcube_contacts extends rcube_addressbook
/**
* Remove all records from the database
*
* @param bool $with_groups Remove also groups
*
* @return int Number of removed records
*/
function delete_all()
function delete_all($with_groups = false)
{
$this->cache = null;
$this->db->query("UPDATE ".$this->db->table_name($this->db_name).
" SET del=1, changed=".$this->db->now().
" WHERE user_id = ?", $this->user_id);
$this->db->query("UPDATE " . $this->db->table_name($this->db_name)
. " SET del = 1, changed = " . $this->db->now()
. " WHERE user_id = ?", $this->user_id);
return $this->db->affected_rows();
$count = $this->db->affected_rows();
if ($with_groups) {
$this->db->query("UPDATE " . $this->db->table_name($this->db_groups)
. " SET del = 1, changed = " . $this->db->now()
. " WHERE user_id = ?", $this->user_id);
$count += $this->db->affected_rows();
}
return $count;
}
@ -860,11 +874,11 @@ class rcube_contacts extends rcube_addressbook
function delete_group($gid)
{
// flag group record as deleted
$sql_result = $this->db->query(
"UPDATE ".$this->db->table_name($this->db_groups).
" SET del=1, changed=".$this->db->now().
" WHERE contactgroup_id=?".
" AND user_id=?",
$this->db->query(
"UPDATE " . $this->db->table_name($this->db_groups)
. " SET del = 1, changed = " . $this->db->now()
. " WHERE contactgroup_id = ?"
. " AND user_id = ?",
$gid, $this->user_id
);
@ -873,7 +887,6 @@ class rcube_contacts extends rcube_addressbook
return $this->db->affected_rows();
}
/**
* Rename a specific contact group
*

@ -1324,8 +1324,10 @@ class rcube_ldap extends rcube_addressbook
/**
* Remove all contact records
*
* @param bool $with_groups Delete also groups if enabled
*/
function delete_all()
function delete_all($with_groups = false)
{
// searching for contact entries
$dn_list = $this->ldap->list_entries($this->base_dn, $this->prop['filter'] ? $this->prop['filter'] : '(objectclass=*)');
@ -1336,6 +1338,16 @@ class rcube_ldap extends rcube_addressbook
}
$this->delete($dn_list);
}
if ($with_groups && $this->groups && ($groups = $this->_fetch_groups()) && count($groups)) {
foreach ($groups as $group) {
$this->ldap->delete($group['dn']);
}
if ($this->cache) {
$this->cache->remove('groups');
}
}
}
/**

@ -249,7 +249,7 @@ if (is_array($_FILES['_file'])) {
$IMPORT_STATS->inserted = $IMPORT_STATS->skipped = $IMPORT_STATS->invalid = $IMPORT_STATS->errors = 0;
if ($replace) {
$CONTACTS->delete_all();
$CONTACTS->delete_all($CONTACTS->groups && $with_groups < 2);
}
if ($with_groups) {

Loading…
Cancel
Save