Skip to content

support all RFC5731 status fields from EPP schema #397

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 2 commits into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 25 additions & 3 deletions Protocols/EPP/eppData/eppDomain.php
Original file line number Diff line number Diff line change
Expand Up @@ -361,18 +361,40 @@ public function getPassword() {

/**
*
* @param string $status
* @param string|eppStatus $status
*/
public function addStatus($status) {
$this->statuses[] = $status;
}

/**
*
* @param bool $fullobject
* @return array
*
*/
public function getStatuses() {
return $this->statuses;
public function getStatuses($fullobjects=false) {
$return_statuses=[];

if ($fullobjects) { // return full eppStatus Objects
foreach ($this->statuses as $status) {
if ($status instanceof eppStatus) {
$return_statuses[]=$status;
} else {
$return_statuses[]=new eppStatus($status);
}
}
} else { // return just a list of statuses
foreach ($this->statuses as $status) {
if ($status instanceof eppStatus) {
$return_statuses[]=$status->getStatusname();
} else {
$return_statuses[]=$status;
}
}
}

return $return_statuses;
}


Expand Down
97 changes: 97 additions & 0 deletions Protocols/EPP/eppData/eppStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<?php
namespace Metaregistrar\EPP;

class eppStatus {
#
# These status values cannot be set, only viewed
#
const STATUS_OK = 'ok';
const STATUS_SERVER_DELETE_PROHIBITED = 'serverDeleteProhibited';
const STATUS_SERVER_UPDATE_PROHIBITED = 'serverUpdateProhibited';
const STATUS_SERVER_RENEW_PROHIBITED = 'serverRenewProhibited';
const STATUS_SERVER_TRANSFER_PROHIBITED = 'serverTransferProhibited';
const STATUS_SERVER_HOLD = 'serverHold';
const STATUS_INACTIVE = 'inactive';
const STATUS_PENDING_CREATE = 'pendingCreate';
const STATUS_PENDING_DELETE = 'pendingDelete';
const STATUS_PENDING_TRANSFER = 'pendingTransfer';
const STATUS_PENDING_UPDATE = 'pendingUpdate';
const STATUS_PENDING_RENEW = 'pendingRenew';

#
# These status values can be set
#
const STATUS_CLIENT_DELETE_PROHIBITED = 'clientDeleteProhibited';
const STATUS_CLIENT_UPDATE_PROHIBITED = 'clientUpdateProhibited';
const STATUS_CLIENT_RENEW_PROHIBITED = 'clientRenewProhibited';
const STATUS_CLIENT_TRANSFER_PROHIBITED = 'clientTransferProhibited';
const STATUS_CLIENT_HOLD = 'clientHold';



/**
* Holds the status name
* @var string
*/
private $statusname;

/**
* Holds the language from the status
* @var string
*/
private $language;

/**
* Holds the status message
* @var string
*/
private $message;

/**
*
* @param string $statusname
* @param ?string $language
* @param ?string $message
*/
public function __construct($statusname, $language = null, $message = null) {
$this->setStatusname($statusname);
if ($language) {
$this->setLanguage($language);
}
if ($message) {
$this->setMessage($message);
}
}

// getters
public function getStatusname() {
return $this->statusname;
}

public function getLanguage() {
return $this->language;
}

public function getMessage() {
return $this->message;
}


// setters
public function setStatusname($statusname) {
if (strlen($statusname) > 0) {
$this->statusname = $statusname;
} else {
throw new eppException("Statusname cannot be empty on eppStatus object");
}
}

public function setLanguage($language) {
$this->language = $language;
}

public function setMessage($message) {
$this->message = $message;
}

}
16 changes: 13 additions & 3 deletions Protocols/EPP/eppRequests/eppUpdateDomainRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ protected function addDomainChanges($element, eppDomain $domain) {
$this->addDomainContact($element, $contact->getContactHandle(), $contact->getContactType());
}
}
$statuses = $domain->getStatuses();
$statuses = $domain->getStatuses(true);
if (is_array($statuses)) {
foreach ($statuses as $status) {
$this->addDomainStatus($element, $status);
Expand All @@ -114,11 +114,21 @@ protected function addDomainChanges($element, eppDomain $domain) {
/**
*
* @param \domElement $element
* @param string $status
* @param string|eppStatus $status
*/
protected function addDomainStatus($element, $status) {
$stat = $this->createElement('domain:status');
$stat->setAttribute('s', $status);

if ($status instanceof eppStatus) {
$stat = $this->createElement('domain:status',$status->getMessage());
$stat->setAttribute('s', $status->getStatusname());
if (!is_null($status->getLanguage())) {
$stat->setAttribute('lang', $status->getLanguage());
}

} else {
$stat->setAttribute('s', $status);
}
$element->appendChild($stat);
}

Expand Down
7 changes: 5 additions & 2 deletions Protocols/EPP/eppResponses/eppInfoDomainResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,12 @@ public function getDomainId() {
public function getDomainStatuses() {
$statuses = null;
$xpath = $this->xPath();
$result = $xpath->query('/epp:epp/epp:response/epp:resData/domain:infData/domain:status/@s');
// $result = $xpath->query('/epp:epp/epp:response/epp:resData/domain:infData/domain:status/@s');
$result = $xpath->query('/epp:epp/epp:response/epp:resData/domain:infData/domain:status');
foreach ($result as $status) {
$statuses[] = $status->nodeValue;
$statuses[] = new eppStatus($status->getAttribute('s'),
$status->getAttribute('lang'),
$status->nodeValue);
}
return $statuses;
}
Expand Down