/** * 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); } } }
/** * Some Apple vCard quirks (#1489993) */ function test_parse_six() { $vcard = new rcube_vcard("BEGIN:VCARD\n" . "VERSION:3.0\n" . "N:;;;;\n" . "FN:Apple Computer AG\n" . "ITEM1.ADR;type=WORK;type=pref:;;Birgistrasse 4a;Wallisellen-Zürich;;8304;Switzerland\n" . "PHOTO;ENCODING=B:aHR0cDovL3Rlc3QuY29t\n" . "END:VCARD"); $result = $vcard->get_assoc(); $this->assertCount(1, $result['address:work'], "ITEM1.-prefixed entry"); }
private function convert_db_data($sql_arr) { $record = array(); $record['ID'] = $sql_arr[$this->primary_key]; if ($sql_arr['vcard']) { unset($sql_arr['email']); $vcard = new rcube_vcard($sql_arr['vcard'], RCMAIL_CHARSET, false, $this->vcard_fieldmap); $record += $vcard->get_assoc() + $sql_arr; } else { $record += $sql_arr; $record['email'] = explode(self::SEPARATOR, $record['email']); $record['email'] = array_map('trim', $record['email']); } return $record; }