/** * Updates a vCard in the CardDAV-Addressbook * * @param array $carddav_content CardDAV contents (vCard id, etag, last modified, etc.) * @return boolean */ private function carddav_addressbook_update($carddav_content) { $vcard = new rcube_vcard(); $vcard->extend_fieldmap(array('uid' => 'UID')); $vcard->load($carddav_content['vcard']); $save_data = $vcard->get_assoc(); if (!isset($save_data['uid'])) { $vcard->set('UID', $carddav_content['vcard_id'], false); } $save_data['vcard'] = $vcard->export(false); $save_data['vcard'] = $vcard->cleanup($save_data['vcard']); $database_column_contents = $this->convert_save_data($save_data); $query = "UPDATE " . get_table_name($this->db_name) . " SET etag=?, last_modified=?, vcard=?, words=?, firstname=?, surname=?, name=?, email=?" . " WHERE vcard_id=? AND carddav_server_id=? AND user_id=?"; $result = $this->rc->db->query($query, $carddav_content['etag'], $carddav_content['last_modified'], $database_column_contents['vcard'], $database_column_contents['words'], $database_column_contents['firstname'], $database_column_contents['surname'], $database_column_contents['name'], $database_column_contents['email'], $carddav_content['vcard_id'], $this->carddav_server_id, $this->rc->user->ID); if ($this->rc->db->affected_rows($result)) { $this->write_log('CardDAV-Contact updated in the local database with the vCard id ' . $carddav_content['vcard_id']); if ($this->rc->action == 'refresh' || $this->rc->action == 'plugin.carddav-server-save') { $this->groups_downstream_sync($carddav_content['vcard_id'], $save_data); } return true; } else { $this->write_log('Couldn\'t update CardDAV-Contact in the local database with the vCard id ' . $carddav_content['vcard_id']); return false; } }