diff options
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/rcube_contacts.php | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php index 5553a23ad..698378ad7 100644 --- a/program/include/rcube_contacts.php +++ b/program/include/rcube_contacts.php @@ -564,28 +564,32 @@ class rcube_contacts extends rcube_addressbook $ids = explode(',', $ids); $added = 0; + $exists = array(); + + // get existing assignments ... + $sql_result = $this->db->query( + "SELECT contact_id FROM ".get_table_name($this->db_groupmembers). + " WHERE contactgroup_id=?". + " AND contact_id IN (".$this->db->array2list($ids, 'integer').")", + $group_id + ); + while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) { + $exists[] = $sql_arr['contact_id']; + } + // ... and remove them from the list + $ids = array_diff($ids, $exists); foreach ($ids as $contact_id) { - $sql_result = $this->db->query( - "SELECT 1 FROM ".get_table_name($this->db_groupmembers). - " WHERE contactgroup_id=?". - " AND contact_id=?", + $this->db->query( + "INSERT INTO ".get_table_name($this->db_groupmembers). + " (contactgroup_id, contact_id, created)". + " VALUES (?, ?, ".$this->db->now().")", $group_id, $contact_id ); - if (!$this->db->num_rows($sql_result)) { - $this->db->query( - "INSERT INTO ".get_table_name($this->db_groupmembers). - " (contactgroup_id, contact_id, created)". - " VALUES (?, ?, ".$this->db->now().")", - $group_id, - $contact_id - ); - - if (!$this->db->db_error) - $added++; - } + if (!$this->db->db_error) + $added++; } return $added; |