Overview
  • Namespace
  • Class

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • Collection
      • 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
      • Collection
      • Enum
      • Resource
    • Networking
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
      • Resource
    • Queues
      • Collection
      • Exception
      • Resource
    • Volume
      • Resource

Classes

  • OpenCloud\Volume\Resource\Snapshot
  • OpenCloud\Volume\Resource\Volume
  • OpenCloud\Volume\Resource\VolumeType
  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             $recordsObject = (object) array('records' => array());
228 
229             foreach ($this->records as $record) {
230                 $recordObject = new \stdClass;
231                 foreach ($record->getCreateKeys() as $key) {
232                     if (isset($record->$key)) {
233                         $recordObject->$key = $record->$key;
234                     }
235                 }
236                 $recordsObject->records[] = $recordObject;
237             }
238             $object->domains[0]->recordsList = $recordsObject;
239         }
240 
241         // add subdomains, if any
242         if (count($this->subdomains)) {
243             $subdomainsObject = (object) array('domains' => array());
244 
245             foreach ($this->subdomains as $subdomain) {
246                 $subdomainObject = new \stdClass;
247                 foreach ($subdomain->getCreateKeys() as $key) {
248                     if (isset($subdomain->$key)) {
249                         $subdomainObject->$key = $subdomain->$key;
250                     }
251                 }
252                 $subdomainsObject->domains[] = $subdomainObject;
253             }
254             $object->domains[0]->subdomains = $subdomainsObject;
255         }
256 
257         return $object;
258     }
259 }
260 
API documentation generated by ApiGen