Telnyx/lib/Collection.php
a92694d2
 <?php
 
 namespace Telnyx;
 
 /**
  * Class Collection
  *
  * @property string $object
  * @property string $url
  * @property bool $has_more
  * @property mixed $data
  *
  * @package Telnyx
  */
 class Collection extends TelnyxObject implements \IteratorAggregate
 {
     const OBJECT_NAME = "list";
 
     use ApiOperations\Request;
 
     protected $_requestParams = [];
 
     /**
      * @return string The base URL for the given class.
      */
     public static function baseUrl()
     {
         return Telnyx::$apiBase;
     }
 
     public function setRequestParams($params)
     {
         $this->_requestParams = $params;
     }
 
     public function all($params = null, $opts = null)
     {
         list($url, $params) = $this->extractPathAndUpdateParams($params);
 
         list($response, $opts) = $this->_request('get', $url, $params, $opts);
         $this->_requestParams = $params;
         return Util\Util::convertToTelnyxObject($response, $opts);
     }
 
     public function create($params = null, $opts = null)
     {
         list($url, $params) = $this->extractPathAndUpdateParams($params);
 
         list($response, $opts) = $this->_request('post', $url, $params, $opts);
         $this->_requestParams = $params;
         return Util\Util::convertToTelnyxObject($response, $opts);
     }
 
     public function retrieve($id, $params = null, $opts = null)
     {
         list($url, $params) = $this->extractPathAndUpdateParams($params);
 
         $id = Util\Util::utf8($id);
         $extn = urlencode($id);
         list($response, $opts) = $this->_request(
             'get',
             "$url/$extn",
             $params,
             $opts
         );
         $this->_requestParams = $params;
         return Util\Util::convertToTelnyxObject($response, $opts);
     }
 
     /**
      * @return \ArrayIterator An iterator that can be used to iterate
      *    across objects in the current page.
      */
     public function getIterator()
     {
         return new \ArrayIterator($this->data);
     }
 
     /**
      * @return Util\AutoPagingIterator An iterator that can be used to iterate
      *    across all objects across all pages. As page boundaries are
      *    encountered, the next page will be fetched automatically for
      *    continued iteration.
      */
     public function autoPagingIterator()
     {
         return new Util\AutoPagingIterator($this, $this->_requestParams);
     }
 
     private function extractPathAndUpdateParams($params)
     {
         $url = parse_url($this->url);
         if (!isset($url['path'])) {
             throw new Error\Api("Could not parse list url into parts: $url");
         }
 
         if (isset($url['query'])) {
             // If the URL contains a query param, parse it out into $params so they
             // don't interact weirdly with each other.
             $query = [];
             parse_str($url['query'], $query);
             $params = array_merge($params ?: [], $query);
         }
 
         return [$url['path'], $params];
     }
 }