public function updateContact(Contact $contact) { $isdk = $this->getIsdk(); try { $remote = $this->loadContact($contact->getId()); if (is_string($remote)) { $contact->setErrorMessage($remote); $contact->setIsFailed(); } else { if ($remote->uniqueHash() == $contact->uniqueHash()) { $contact->setIsSkipped(); } else { $response = $isdk->updateCon($contact->getId(), $contact->getData()); if (is_string($response)) { $messsage = 'Add failed. Error:' . $response; $contact->setErrorMessage($messsage); $contact->setIsFailed(); } else { $contact->setId($response); $contact->setIsUpdated(); $remoteTags = $remote->getTags(); $tags = $contact->getTags(); $diff = array_diff($tags, $remoteTags); foreach ($diff as $d) { $response1 = $isdk->grpAssign($contact->getId(), $d); if (is_string($response1)) { $messsage1 = 'Add Tag failed. Error:' . $response1; $isdk->updateCon($contact->getId(), $remote->getData()); $contact->setErrorMessage($messsage1); $contact->setIsFailed(); break; } } $diffRemote = array_diff($remoteTags, $tags); foreach ($diffRemote as $dr) { $response2 = $isdk->grpRemove($contact->getId(), $dr); if (is_string($response2)) { $messsage1 = 'Delete Tag failed. Error:' . $response2; $isdk->updateCon($contact->getId(), $remote->getData()); $contact->setErrorMessage($messsage2); $contact->setIsFailed(); break; } } } } } } catch (Exception $e) { $contact->setErrorMessage($e->getMessage()); $contact->setIsFailed(); } return $contact; }