/**
  * 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;
     }
 }