/**
 * make contact update call 
 * 
 * @param array $params array containigs whmcs data
 * 
 * @return mixed array containig error message will return if error was ocurred, 'success' string in other case
 */
function stregistry_SaveContactDetails($params)
{
    // init connection
    if (($status = __initConnectionAndAuthorize($params)) !== true) {
        return __errorArray($status);
    }
    $mapping = array('registrant' => 'Registrant', 'admin' => 'Admin', 'tech' => 'Technical', 'billing' => 'Billing');
    // fetch domain
    $json = STRegistry::Domains()->query($params['domainname']);
    if (!ResponseHelper::isSuccess($json)) {
        return __errorArray(ResponseHelper::fromJSON($json)->message);
    }
    $domain = Domain::fromJSON($json);
    $updatedContacts = array();
    // udpate contacts
    foreach ($domain->getContacts() as $type => $contactId) {
        if (empty($contactId) || in_array($contactId, $updatedContacts)) {
            continue;
        }
        if (!empty($params['contactdetails'][$mapping[$type]])) {
            $data = $params['contactdetails'][$mapping[$type]];
            $contact = new Contact($contactId);
            $contact->setPhoneNumber($data['Phone Number'])->setFaxNumber($data['Fax'])->setEmail($data['Email'])->setName($data['Name'] ?: $data['Full Name'])->setOrganization($data['Organization'] ?: $data['Organisation Name'])->setCity($data['City'])->setPostalCode($data['Postal Code'] ?: $data['Postalcode'])->setCountryCode($data['Country'])->setState($data['State'])->setAddress($data['Street1'] ?: $data['Address 1'], $data['Street2'] ?: $data['Address 2'], isset($data['Street3']) ? $data['Street3'] : '');
            $json = STRegistry::Contacts()->update($contact);
            if (!ResponseHelper::isSuccess($json)) {
                return __errorArray(sprintf(ResponseHelper::fromJSON($json)->message . " in %s contact", $mapping[$type]));
            }
            $updatedContacts[] = $contact->getContactId();
        }
    }
    return 'success';
}
 /**
  * Performs remote object validation
  * 
  * @return boolean
  */
 public function validate()
 {
     // clean up errors
     parent::validate();
     $response = ResponseHelper::fromJSON(STRegistry::Contacts()->validate($this));
     if ($response->code != 1000) {
         $this->setValidationErrorCode($response->code)->setValidationErrorMessage($response->message);
         return false;
     }
     return true;
 }