/** * Called when a message has been changed on the mobile. * This functionality is not available for emails. * * @param string $folderid id of the folder * @param string $id id of the message * @param SyncXXX $message the SyncObject containing a message * @param ContentParameters $contentParameters * * @access public * @return array same return value as StatMessage() * @throws StatusException could throw specific SYNC_STATUS_* exceptions */ public function ChangeMessage($folderid, $id, $message, $contentParameters) { ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendCardDAV->ChangeMessage('%s', '%s')", $folderid, $id)); $vcard_text = $this->ParseToVCard($message); if ($vcard_text === false) { ZLog::Write(LOGLEVEL_ERROR, sprintf("BackendCardDAV->ChangeMessage - Error converting message to vCard")); } else { ZLog::Write(LOGLEVEL_WBXML, sprintf("BackendCardDAV->ChangeMessage - vCard\n%s\n", $vcard_text)); $updated = false; if (strlen($id) == 0) { //no id, new vcard try { $addressbookId = $this->getAddressbookFromUrl($this->default_url); if ($addressbookId === false) { $addressbookId = $this->getAddressbookFromUrl($this->addressbooks[0]); $this->server->set_url($this->addressbooks[0]); } else { $this->server->set_url($this->default_url); } $updated = $this->server->add($vcard_text); if ($updated !== false) { $id = $addressbookId . "-" . $updated; } } catch (Exception $ex) { ZLog::Write(LOGLEVEL_ERROR, sprintf("BackendCardDAV->ChangeMessage - Error adding vcard '%s' : %s", $id, $ex->getMessage())); } } else { //id, update vcard $vcardId = $this->getVcardId($id); $addressbookUrl = $this->getAddressbookFromId($this->getAddressbookIdFromVcard($id)); if ($addressbookUrl !== false) { try { $this->server->set_url($addressbookUrl); $updated = $this->server->update($vcard_text, $vcardId); } catch (Exception $ex) { ZLog::Write(LOGLEVEL_ERROR, sprintf("BackendCardDAV->ChangeMessage - Error updating vcard '%s' : %s", $id, $ex->getMessage())); } } } if ($updated !== false) { ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendCardDAV->ChangeMessage - vCard updated")); } else { ZLog::Write(LOGLEVEL_ERROR, sprintf("BackendCardDAV->ChangeMessage - vCard not updated")); } } return $this->StatMessage($folderid, $id); }
/** * Adds a CardDAV server contact * * @param string $vcard vCard * @return boolean */ private function carddav_add($vcard) { $sync = true; if ($this->rc->action == 'copy') { $this->counter++; $cids = get_input_value('_cid', RCUBE_INPUT_POST); $cids = explode(',', $cids); if ($this->counter < count($cids)) { $sync = false; } } $vcard = $this->vcard_check($vcard); $server = current(carddav::get_carddav_server($this->carddav_server_id)); $arr = parse_url($server['url']); $carddav_backend = new carddav_backend($server['url']); if ($this->rc->decrypt($server['password']) == '%p') { $server['password'] = $this->rcpassword; } $carddav_backend->set_auth($server['username'], $this->rc->decrypt($server['password']), $server['authtype']); if ($carddav_backend->check_connection()) { $vcard_id = $carddav_backend->add($vcard); if ($sync && $this->rc->action != 'import') { if ($this->rc->action == 'copy') { $vcard_id = false; } $this->carddav_addressbook_sync($server, false, $vcard_id); $cid = $this->rc->db->insert_id(get_table_name($this->db_name)); return $cid; } else { return true; } } return false; }