function hook_stregistrar_ShoppingCartValidateDomainsConfig($params)
{
    $errors = array();
    foreach ($_SESSION['cart']['domains'] as $key => $domain) {
        // check premium domain registration
        if ($domain['type'] == 'register') {
            $config = __getSTRegistrarModuleConfig();
            if (__domainIsPremium($domain['domain']) && $config['allowPremium'] !== 'on') {
                return $errors[] = "Registration of premium domains is disabled by server configuration";
            }
        }
        if ($domain['type'] == 'transfer') {
            // init api connection
            if (($status = __initConnectionAndAuthorize(__getSTRegistrarModuleConfig())) === false) {
                return $errors[] = $status;
            }
            // try to query domain using specified auth code
            $json = STRegistry::Domains()->query($domain['domain'], $domain['eppcode']);
            if (!ResponseHelper::isSuccess($json)) {
                $status = ResponseHelper::fromJSON($json);
                if ($status->code == 2202) {
                    $errors[] = sprintf('EPP Code is invalid for domain: %s', $domain['domain']);
                } else {
                    $errors[] = $status->message;
                }
            }
            $domainObj = Domain::fromJSON($json);
            // check status prohibitions
            if (in_array(Domain::STATUS_TRANSFER_PROHIBITED, $domainObj->getStatuses()) || in_array('serverTransferProhibited', $domainObj->getStatuses())) {
                $errors[] = sprintf('Domain %s is not eligible for transfer. Please contact current domain registrar for assistance', $domain['domain']);
            }
        }
        if (!count($errors)) {
            __storeDomainEppCode($domain['domain'], $domain['eppcode']);
        }
    }
    return count($errors) ? $errors : '';
}
function stregistry_Sync($params)
{
    // init connection
    if (($status = __initConnectionAndAuthorize($params)) !== true) {
        return __errorArray($status);
    }
    // fetch domain
    $json = STRegistry::Domains()->query($params['domain']);
    if (!ResponseHelper::isSuccess($json)) {
        $response = ResponseHelper::fromJSON($json);
        if ($response->code == 2303 || $response->code == 2203) {
            // domain does not already exists or not own by current registarar
            __markWHMCSDomainCancelled($params['domainid']);
            return array('active' => false, 'expired' => false);
        } else {
            return __errorArray($response->message);
        }
    }
    $domain = Domain::fromJSON($json);
    if ($domain->getDateExpire() < time()) {
        return array('expired' => true);
    }
    return array('active' => true, 'expired' => false, 'expirydate' => $domain->getDateExpire('Y-m-d'));
}
 /**
  * 
  */
 public function getRequestDataForUpdate(Domain $domain)
 {
     $data = array();
     $json = STRegistry::Domains()->query($domain->getName());
     $currentDomain = Domain::fromJSON($json);
     if ($currentDomain->getAuthCode() != $domain->getAuthCode()) {
         if (!isset($data['chg'])) {
             $data['chg'] = array();
         }
         $data['chg']['authInfo'] = array('pw' => $domain->getAuthCode());
     }
     foreach ($currentDomain->getContacts() as $type => $contact) {
         $newContacts = $domain->getContacts();
         if ($newContacts[$type] !== false && $newContacts[$type] != $contact) {
             if (!isset($data['rem']['contact'])) {
                 $data['rem']['contact'] = array();
             }
             if (!isset($data['add']['contact'])) {
                 $data['add']['contact'] = array();
             }
             $data['rem']['contact'][] = array($type => $contact);
             if (!empty($newContacts[$type])) {
                 $data['add']['contact'][] = array($type => $newContacts[$type]);
             }
         }
     }
     foreach ($domain->getNameServers() as $nameserver => $ips) {
         if (!in_array($nameserver, array_keys($currentDomain->getNameServers()))) {
             if (!isset($data['add']['ns'])) {
                 $data['add']['ns'] = array();
             }
             $upd = array('name' => $nameserver);
             if (count($ips)) {
                 $upd['addr'] = array();
                 foreach ($ips as $ip) {
                     $upd['addr'][] = array(CommonFunctions::detectIPType($ip) => $ip);
                 }
             }
             $data['add']['ns'][] = $upd;
         }
     }
     foreach ($currentDomain->getNameServers() as $nameserver => $ips) {
         if (!in_array($nameserver, array_keys($domain->getNameServers()))) {
             if (!isset($data['rem']['ns'])) {
                 $data['rem']['ns'] = array();
             }
             $data['rem']['ns'][] = $nameserver;
         }
     }
     foreach ($domain->getStatuses() as $status) {
         if (!in_array($status, array(Domain::STATUS_HOLD, Domain::STATUS_DELETE_PROHIBITED, Domain::STATUS_RENEW_PROHIBITED, Domain::STATUS_TRANSFER_PROHIBITED, Domain::STATUS_UPDATE_PROHIBITED))) {
             continue;
         }
         if (!in_array($status, $currentDomain->getStatuses())) {
             if (!isset($data['add']['status'])) {
                 $data['add']['status'] = array();
             }
             $data['add']['status'][] = $status;
         }
     }
     foreach ($currentDomain->getStatuses() as $status) {
         if (!in_array($status, array(Domain::STATUS_HOLD, Domain::STATUS_DELETE_PROHIBITED, Domain::STATUS_RENEW_PROHIBITED, Domain::STATUS_TRANSFER_PROHIBITED, Domain::STATUS_UPDATE_PROHIBITED))) {
             continue;
         }
         if (!in_array($status, $domain->getStatuses())) {
             if (!isset($data['rem']['status'])) {
                 $data['rem']['status'] = array();
             }
             $data['rem']['status'][] = $status;
         }
     }
     return $data;
 }