Viewing file: Collection.php (6.31 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Telnyx;
/** * Class Collection * * @property string $object * @property string $url * @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;
// This is needed for nextPage() and previousPage() $response['url'] = $url;
$obj = Util\Util::convertToTelnyxObject($response, $opts); $obj->setRequestParams($params);
return $obj; }
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); }
/** * Returns an empty collection. This is returned from {@see nextPage()} * when we know that there isn't a next page in order to replicate the * behavior of the API when it attempts to return a page beyond the last. * * @param array|string|null $opts * @return Collection */ public static function emptyCollection($opts = null) { return Collection::constructFrom(['data' => []], $opts); }
/** * Returns true if the page object contains no element. * * @return boolean */ public function isEmpty() { return empty($this->data); }
/** * See if there are more results * * @return boolean */ public function hasMore() { if (isset($this->meta)) { if ($this->meta['page_number'] < $this->meta['total_pages']) { return true; } } return false; }
/** * See if there are previous results * * @return boolean */ public function hasPrev() { if (isset($this->meta)) { if ($this->meta['page_number'] > 1) { return true; } } return false; }
/** * Fetches the next page in the resource list (if there is one). * * This method will try to respect the limit of the current page. If none * was given, the default limit will be fetched again. * * @param array|null $params * @param array|string|null $opts * @return Collection */ public function nextPage($params = null, $opts = null) { if (!$this->hasMore()) { return static::emptyCollection($opts); }
$params = array_merge( $this->_requestParams, $params ?: [] );
// Remove page number from the next request. Detect both syntaxes if (isset($params['page']) && isset($params['page']['number'])) { unset($params['page']['number']); } elseif (isset($params['page[number]'])) { unset($params['page[number]']); }
// Set a new page number $params['page[number]'] = $this->meta['page_number'] + 1;
return $this->all($params, $opts); }
/** * Fetches the previous page in the resource list (if there is one). * * This method will try to respect the limit of the current page. If none * was given, the default limit will be fetched again. * * @param array|null $params * @param array|string|null $opts * @return Collection */ public function previousPage($params = null, $opts = null) { if (!$this->hasPrev()) { return static::emptyCollection($opts); }
$params = array_merge( $this->_requestParams, $params ?: [] );
// Remove page number from the next request. Detect both syntaxes if (isset($params['page']) && isset($params['page']['number'])) { unset($params['page']['number']); } elseif (isset($params['page[number]'])) { unset($params['page[number]']); }
// Set a new page number $params['page[number]'] = $this->meta['page_number'] - 1;
return $this->all($params, $opts); }
private function extractPathAndUpdateParams($params) { $url = parse_url($this->url); if (!isset($url['path'])) { throw new Exception\UnexpectedValueException("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]; } }
|