/** * Sync groups upstream * * @param integer $gid (group id) * @return void */ function groups_upstream_sync($gid) { $sql = 'SELECT * FROM ' . get_table_name($this->db_groupmembers) . ' WHERE contactgroup_id=?'; $res = $this->db->query($sql, $gid); while ($member = $this->db->fetch_assoc($res)) { $members[] = $member; } if (is_array($members)) { foreach ($members as $member) { $sql = 'SELECT * FROM ' . get_table_name($this->db_name) . ' WHERE user_id=? AND carddav_contact_id=?'; $res = $this->db->query($sql, $this->rc->user->ID, $member['contact_id']); $contact = $this->db->fetch_assoc($res); $vcard = new rcube_vcard(); $vcard->load($contact['vcard']); $save_data = $vcard->get_assoc(); $save_data['groups'][0] = array(); $sql = 'SELECT contactgroup_id FROM ' . get_table_name($this->db_groupmembers) . ' WHERE contact_id=?'; $res = $this->db->query($sql, $member['contact_id']); while ($group_id = $this->rc->db->fetch_assoc($res)) { $group_ids[] = $group_id; } if (!empty($group_ids)) { $categories = array(); foreach ($group_ids as $group_id) { $sql = 'SELECT name FROM ' . get_table_name($this->db_groups) . ' WHERE contactgroup_id=? AND del=?'; $res = $this->db->query($sql, $group_id['contactgroup_id'], 0); if ($category = $this->rc->db->fetch_assoc($res)) { if ($category['name']) { $categories[$category['name']] = $category['name']; } } } if (!empty($categories)) { $save_data['groups'] = implode(',', $categories); } } $this->update($member['contact_id'], $save_data); } } }