Overview

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • Exception
      • Resource
    • Common
      • Collection
      • Constants
      • Exceptions
      • Http
        • Message
      • Log
      • Resource
      • Service
    • Compute
      • Constants
      • Exception
      • Resource
    • Database
      • Resource
    • DNS
      • Collection
      • Resource
    • Identity
      • Constants
      • Resource
    • Image
      • Enum
      • Resource
        • JsonPatch
        • Schema
    • LoadBalancer
      • Enum
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
    • Queues
      • Exception
      • Resource
    • Volume
      • Resource
  • PHP

Classes

  • AbstractResource
  • AsyncResponse
  • Domain
  • PtrRecord
  • Record
  • Subdomain

Interfaces

  • HasPtrRecordsInterface
  • Overview
  • Namespace
  • Class
  • Tree
  • Download
  1: <?php
  2: /**
  3:  * Copyright 2012-2014 Rackspace US, Inc.
  4:  *
  5:  * Licensed under the Apache License, Version 2.0 (the "License");
  6:  * you may not use this file except in compliance with the License.
  7:  * You may obtain a copy of the License at
  8:  *
  9:  * http://www.apache.org/licenses/LICENSE-2.0
 10:  *
 11:  * Unless required by applicable law or agreed to in writing, software
 12:  * distributed under the License is distributed on an "AS IS" BASIS,
 13:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14:  * See the License for the specific language governing permissions and
 15:  * limitations under the License.
 16:  */
 17: 
 18: namespace OpenCloud\DNS\Resource;
 19: 
 20: use OpenCloud\Common\Http\Message\Formatter;
 21: 
 22: /**
 23:  * The Domain class represents a single domain
 24:  *
 25:  * Note that the `Subdomain` class is defined in this same file because of
 26:  * mutual dependencies.
 27:  */
 28: class Domain extends AbstractResource
 29: {
 30:     public $id;
 31:     public $accountId;
 32:     public $ttl;
 33:     public $updated;
 34:     public $emailAddress;
 35:     public $created;
 36:     public $name;
 37:     public $comment;
 38: 
 39:     protected static $json_name = false;
 40:     protected static $json_collection_name = 'domains';
 41:     protected static $url_resource = 'domains';
 42: 
 43:     protected $createKeys = array(
 44:         'name',
 45:         'emailAddress',
 46:         'ttl',
 47:         'comment'
 48:     );
 49: 
 50:     protected $updateKeys = array(
 51:         'emailAddress',
 52:         'ttl',
 53:         'comment'
 54:     );
 55: 
 56:     private $records = array();
 57:     private $subdomains = array();
 58: 
 59:     /**
 60:      * returns a Record object
 61:      *
 62:      * Note that this method is available at the DNS level, but only for
 63:      * PTR records.
 64:      *
 65:      * @return Record
 66:      */
 67:     public function record($info = null)
 68:     {
 69:         $resource = new Record($this->getService());
 70:         $resource->setParent($this)->populate($info);
 71: 
 72:         return $resource;
 73:     }
 74: 
 75:     /**
 76:      * returns a Collection of Record objects
 77:      *
 78:      * @param array $filter query-string parameters
 79:      * @return \OpenCloud\Collection
 80:      */
 81:     public function recordList($filter = array())
 82:     {
 83:         $url = $this->getUrl(Record::resourceName(), $filter);
 84: 
 85:         return $this->getParent()->collection(
 86:             'OpenCloud\DNS\Resource\Record', $url, $this
 87:         );
 88:     }
 89: 
 90:     /**
 91:      * returns a Subdomain object (child of current domain)
 92:      *
 93:      */
 94:     public function subdomain($info = array())
 95:     {
 96:         $resource = new Subdomain($this->getService());
 97:         $resource->setParent($this)->populate($info);
 98: 
 99:         return $resource;
100:     }
101: 
102:     /**
103:      * returns a Collection of subdomains
104:      *
105:      * The subdomains are all `DNS:Domain` objects that are children of
106:      * the current domain.
107:      *
108:      * @param array $filter key/value pairs for query string parameters
109:      *                      return \OpenCloud\Collection
110:      */
111:     public function subdomainList($filter = array())
112:     {
113:         $url = $this->getUrl(Subdomain::resourceName(), $filter);
114: 
115:         return $this->getParent()->collection(
116:             'OpenCloud\DNS\Resource\Subdomain', $url, $this
117:         );
118:     }
119: 
120:     /**
121:      * Adds a new record to the list (for multiple record creation)
122:      *
123:      * @api
124:      * @param Record $rec the record to add
125:      * @return integer the number of records
126:      */
127:     public function addRecord(Record $record)
128:     {
129:         $this->records[] = $record;
130: 
131:         return count($this->records);
132:     }
133: 
134:     /**
135:      * adds a new subdomain (for multiple subdomain creation)
136:      *
137:      * @api
138:      * @param Subdomain $subd the subdomain to add
139:      * @return integer the number of subdomains
140:      */
141:     public function addSubdomain(Subdomain $subdomain)
142:     {
143:         $this->subdomains[] = $subdomain;
144: 
145:         return count($this->subdomains);
146:     }
147: 
148:     /**
149:      * returns changes since a specified date/time
150:      *
151:      * @param string $since the date or time
152:      * @return DNS\Changes
153:      */
154:     public function changes($since = null)
155:     {
156:         $url = clone $this->getUrl();
157:         $url->addPath('changes');
158: 
159:         if ($since) {
160:             $url->setQuery(array('since' => $since));
161:         }
162: 
163:         $response = $this->getService()
164:             ->getClient()
165:             ->get($url)
166:             ->send();
167: 
168:         return Formatter::decode($response);
169:     }
170: 
171:     /**
172:      * exports the domain
173:      *
174:      * @return AsyncResponse
175:      */
176:     public function export()
177:     {
178:         return $this->getService()->asyncRequest($this->getUrl('export'));
179:     }
180: 
181:     /**
182:      * clones the domain to the specified target domain
183:      *
184:      * @param string  $newdomain the new domain to create from this domain
185:      * @param boolean $sub       to clone subdomains as well
186:      * @param boolean $comments  Replace occurrences of the reference domain
187:      *                           name with the new domain name in comments
188:      * @param boolean $email     Replace occurrences of the reference domain
189:      *                           name with the new domain name in email addresses on the cloned
190:      *                           (new) domain.
191:      * @param boolean $records   Replace occurrences of the reference domain
192:      *                           name with the new domain name in data fields (of records) on the
193:      *                           cloned (new) domain. Does not affect NS records.
194:      * @return AsyncResponse
195:      */
196:     public function cloneDomain(
197:         $newDomainName,
198:         $subdomains = true,
199:         $comments = true,
200:         $email = true,
201:         $records = true
202:     ) {
203:         $url = $this->getUrl();
204:         $url->addPath('clone');
205:         $url->setQuery(array(
206:             'cloneName'          => $newDomainName,
207:             'cloneSubdomains'    => $subdomains,
208:             'modifyComment'      => $comments,
209:             'modifyEmailAddress' => $email,
210:             'modifyRecordData'   => $records
211:         ));
212: 
213:         return $this->getService()->asyncRequest($url, 'POST');
214:     }
215: 
216:     /**
217:      * handles creation of multiple records at Create()
218:      *
219:      * @return \stdClass
220:      */
221:     protected function createJson()
222:     {
223:         $object = parent::createJson();
224: 
225:         // add records, if any
226:         if (count($this->records)) {
227: 
228:             $recordsObject = (object) array('records' => array());
229: 
230:             foreach ($this->records as $record) {
231:                 $recordObject = new \stdClass;
232:                 foreach ($record->getCreateKeys() as $key) {
233:                     if (isset($record->$key)) {
234:                         $recordObject->$key = $record->$key;
235:                     }
236:                 }
237:                 $recordsObject->records[] = $recordObject;
238:             }
239:             $object->domains[0]->recordsList = $recordsObject;
240:         }
241: 
242:         // add subdomains, if any
243:         if (count($this->subdomains)) {
244: 
245:             $subdomainsObject = (object) array('domains' => array());
246: 
247:             foreach ($this->subdomains as $subdomain) {
248:                 $subdomainObject = new \stdClass;
249:                 foreach ($subdomain->getCreateKeys() as $key) {
250:                     if (isset($subdomain->$key)) {
251:                         $subdomainObject->$key = $subdomain->$key;
252:                     }
253:                 }
254:                 $subdomainsObject->domains[] = $subdomainObject;
255:             }
256:             $object->domains[0]->subdomains = $subdomainsObject;
257:         }
258: 
259:         return $object;
260:     }
261: }
262: 
PHP OpenCloud API API documentation generated by ApiGen 2.8.0