/**
		 * Update nameservers for domain
		 * @access public
		 * @param Domain $domain Domain
		 * @param IChangelist $changelist nameservers changelist
		 * @return UpdateDomainNameserversResponse 
		 * @version v1000
		 */
		public function UpdateDomainNameservers(Domain $domain, IChangelist $changelist)
		{
			$params = array(
				"name" 	=> $this->MakeNameIDNCompatible($domain->GetHostName()),
				"add" 	=> "",
				"del" 	=> ""
			);
			
			if ($changelist->GetAdded())
				$params['add'] = "<domain:add><domain:ns>".$this->GetNSXML($changelist->GetAdded())."</domain:ns></domain:add>";
				
			if ($changelist->GetRemoved())
				$params['del'] = "<domain:rem><domain:ns>".$this->GetNSXML($changelist->GetRemoved())."</domain:ns></domain:rem>";
			
			$this->BeforeRequest('domain-update-ns', $params, __METHOD__, $domain, $changelist);
			$response = $this->Request("domain-update-ns", $params);
			
			if ($response->Code == RFC3730_RESULT_CODE::OK_PENDING)
			    $status = REGISTRY_RESPONSE_STATUS::PENDING;
			elseif ($response->Succeed)
			    $status = REGISTRY_RESPONSE_STATUS::SUCCESS;
			else
				$status = REGISTRY_RESPONSE_STATUS::FAILED;		
			return new UpdateDomainNameserversResponse($status, $response->ErrMsg, $response->Code);
		}
 /**
  * This method request registry to change namservers list for domain
  * In order to pending operation, response must have status REGISTRY_RESPONSE_STATUS::PENDING 
  * 
  * @param Domain $domain Domain
  * @param IChangelist $changelist nameservers changelist 
  * @return UpdateDomainNameserversResponse
  */
 public function UpdateDomainNameservers(Domain $domain, IChangelist $changelist)
 {
     $hostname = $domain->GetHostName();
     $is_idn = $this->RegistryAccessible->IsIDNHostName($hostname);
     $params = array('name' => $is_idn ? $this->RegistryAccessible->PunycodeEncode($hostname) : $hostname, 'add' => '', 'rem' => '');
     $added = $changelist->GetAdded();
     $removed = $changelist->GetRemoved();
     if ($added) {
         $params['add'] = "<domain:add><domain:ns>" . $this->GetNSXML($added) . "</domain:ns></domain:add>";
     }
     if ($removed) {
         $params['rem'] = "<domain:rem><domain:ns>" . $this->GetNSXML($removed) . "</domain:ns></domain:rem>";
     }
     $response = $this->Request("domain-update-ns", $params);
     if ($response->Code == RFC3730_RESULT_CODE::OK_PENDING) {
         $status = REGISTRY_RESPONSE_STATUS::PENDING;
     } elseif ($response->Succeed) {
         $status = REGISTRY_RESPONSE_STATUS::SUCCESS;
     } else {
         $status = REGISTRY_RESPONSE_STATUS::FAILED;
     }
     $ret = new UpdateDomainNameserversResponse($status, $response->ErrMsg, $response->Code);
     $ret->Result = $status != REGISTRY_RESPONSE_STATUS::FAILED;
     return $ret;
 }
 /**
  * Update nameservers for domain
  * @access public
  * @param Domain $domain Domain
  * @param IChangelist $changelist nameservers changelist
  * @return UpdateDomainNameserversResponse 
  * @version v1000
  */
 public function UpdateDomainNameservers(Domain $domain, IChangelist $changelist)
 {
     $added = $changelist->GetAdded();
     $removed = $changelist->GetRemoved();
     $re = '/The speficied host is not used as a nameserver for this domain. \\[rem: ([^\\]]+)\\]/';
     $br = false;
     do {
         $response = $this->DoUpdateDomainNameservers($domain, $added, $removed);
         if (preg_match($re, $response->ErrMsg, $match) && $removed) {
             $dirty_removed_host = $match[1];
             foreach ($removed as $i => $ns) {
                 if ($ns->HostName == $dirty_removed_host) {
                     unset($removed[$i]);
                     break;
                 }
             }
         } else {
             $br = true;
         }
     } while (!$br);
     $status = $response->Succeed ? REGISTRY_RESPONSE_STATUS::SUCCESS : REGISTRY_RESPONSE_STATUS::FAILED;
     return new UpdateDomainNameserversResponse($status, $response->ErrMsg, $response->Code);
 }
 /**
  * Update nameservers for domain
  * @access public
  * @param Domain $domain Domain
  * @param IChangelist $changelist nameservers changelist
  * @return bool 
  */
 public function UpdateDomainNameservers(Domain $domain, IChangelist $changelist)
 {
     $nameservers = $changelist->GetList();
     foreach ((array) $changelist->GetAdded() as $k => $v) {
         $params["addnameserver{$k}"] = $v->HostName;
     }
     foreach ((array) $changelist->GetRemoved() as $k => $v) {
         $params["delnameserver{$k}"] = $v->HostName;
     }
     $params["domain"] = $this->MakeNameIDNCompatible($domain->GetHostName());
     $response = $this->Request("ModifyDomain", $params);
     $status = $response->Succeed ? REGISTRY_RESPONSE_STATUS::SUCCESS : REGISTRY_RESPONSE_STATUS::FAILED;
     return new UpdateDomainNameserversResponse($status, $response->ErrMsg, $response->Code);
 }
 /**
  * This method request registry to change namservers list for domain
  * In order to pending operation, response must have status REGISTRY_RESPONSE_STATUS::PENDING 
  * 
  * @param Domain $domain Domain
  * @param IChangelist $changelist nameservers changelist 
  * @return UpdateDomainNameserversResponse
  */
 public function UpdateDomainNameservers(Domain $domain, IChangelist $changelist)
 {
     $params = array('name' => $this->MakeNameIDNCompatible($domain->GetHostName()), 'subproduct' => 'dot' . strtoupper($domain->Extension), 'add' => '', 'remove' => '', 'change' => '');
     if ($changelist->GetAdded()) {
         $params['add'] = "<domain:add><domain:ns>" . $this->GetNSXML($changelist->GetAdded()) . "</domain:ns></domain:add>";
         // @see http://webta.net/support/admin/replies_view.php?id=1338
         foreach ($changelist->GetAdded() as $ns) {
             try {
                 if (!preg_match('/(com|net)$/', $ns->HostName)) {
                     if ($ns instanceof NameserverHost) {
                         $this->CreateNameserverHost($ns);
                     } else {
                         $nshost = new NameserverHost($ns->HostName, null);
                         $this->CreateNameserverHost($nshost);
                     }
                 }
             } catch (Exception $ignore) {
             }
         }
     }
     if ($changelist->GetRemoved()) {
         $params['remove'] = "<domain:rem><domain:ns>" . $this->GetNSXML($changelist->GetRemoved()) . "</domain:ns></domain:rem>";
     }
     $response = $this->Request("domain-update", $params);
     if ($response->Code == RFC3730_RESULT_CODE::OK_PENDING) {
         $status = REGISTRY_RESPONSE_STATUS::PENDING;
     } elseif ($response->Succeed) {
         $status = REGISTRY_RESPONSE_STATUS::SUCCESS;
     } else {
         $status = REGISTRY_RESPONSE_STATUS::FAILED;
     }
     return new UpdateDomainNameserversResponse($status, $response->ErrMsg, $response->Code);
 }