Changeset View
Changeset View
Standalone View
Standalone View
externals/twilio-php/Services/Twilio/ListResource.php
- This file was added.
| Property | Old Value | New Value |
|---|---|---|
| File Mode | null | 100755 |
| <?php | |||||
| /** | |||||
| * @author Neuman Vong neuman@twilio.com | |||||
| * @license http://creativecommons.org/licenses/MIT/ MIT | |||||
| * @link http://pear.php.net/package/Services_Twilio | |||||
| */ | |||||
| /** | |||||
| * Abstraction of a list resource from the Twilio API. | |||||
| * | |||||
| * The list resource implements the `IteratorAggregate | |||||
| * <http://php.net/manual/en/class.iteratoraggregate.php>`_ and the `Countable | |||||
| * <http://php.net/manual/en/class.countable.php>`_ interfaces. | |||||
| * | |||||
| */ | |||||
| abstract class Services_Twilio_ListResource extends Services_Twilio_Resource | |||||
| implements IteratorAggregate, Countable | |||||
| { | |||||
| public function __construct($client, $uri) { | |||||
| $name = $this->getResourceName(true); | |||||
| /* | |||||
| * By default trim the 's' from the end of the list name to get the | |||||
| * instance name (ex Accounts -> Account). This behavior can be | |||||
| * overridden by child classes if the rule doesn't work. | |||||
| */ | |||||
| if (!isset($this->instance_name)) { | |||||
| $this->instance_name = "Services_Twilio_Rest_" . rtrim($name, 's'); | |||||
| } | |||||
| parent::__construct($client, $uri); | |||||
| } | |||||
| /** | |||||
| * Gets a resource from this list. | |||||
| * | |||||
| * :param string $sid: The resource SID | |||||
| * :return: The resource | |||||
| * :rtype: :php:class:`InstanceResource <Services_Twilio_InstanceResource>` | |||||
| */ | |||||
| public function get($sid) { | |||||
| $instance = new $this->instance_name( | |||||
| $this->client, $this->uri . "/$sid" | |||||
| ); | |||||
| // XXX check if this is actually a sid in all cases. | |||||
| $instance->sid = $sid; | |||||
| return $instance; | |||||
| } | |||||
| /** | |||||
| * Construct an :php:class:`InstanceResource | |||||
| * <Services_Twilio_InstanceResource>` with the specified params. | |||||
| * | |||||
| * :param array $params: usually a JSON HTTP response from the API | |||||
| * :return: An instance with properties | |||||
| * initialized to the values in the params array. | |||||
| * :rtype: :php:class:`InstanceResource <Services_Twilio_InstanceResource>` | |||||
| */ | |||||
| public function getObjectFromJson($params, $idParam = "sid") | |||||
| { | |||||
| if (isset($params->{$idParam})) { | |||||
| $uri = $this->uri . "/" . $params->{$idParam}; | |||||
| } else { | |||||
| $uri = $this->uri; | |||||
| } | |||||
| return new $this->instance_name($this->client, $uri, $params); | |||||
| } | |||||
| /** | |||||
| * Deletes a resource from this list. | |||||
| * | |||||
| * :param string $sid: The resource SID | |||||
| * :rtype: null | |||||
| */ | |||||
| public function delete($sid, $params = array()) | |||||
| { | |||||
| $this->client->deleteData($this->uri . '/' . $sid, $params); | |||||
| } | |||||
| /** | |||||
| * Create a resource on the list and then return its representation as an | |||||
| * InstanceResource. | |||||
| * | |||||
| * :param array $params: The parameters with which to create the resource | |||||
| * | |||||
| * :return: The created resource | |||||
| * :rtype: :php:class:`InstanceResource <Services_Twilio_InstanceResource>` | |||||
| */ | |||||
| protected function _create($params) | |||||
| { | |||||
| $params = $this->client->createData($this->uri, $params); | |||||
| /* Some methods like verified caller ID don't return sids. */ | |||||
| if (isset($params->sid)) { | |||||
| $resource_uri = $this->uri . '/' . $params->sid; | |||||
| } else { | |||||
| $resource_uri = $this->uri; | |||||
| } | |||||
| return new $this->instance_name($this->client, $resource_uri, $params); | |||||
| } | |||||
| /** | |||||
| * Returns a page of :php:class:`InstanceResources | |||||
| * <Services_Twilio_InstanceResource>` from this list. | |||||
| * | |||||
| * :param int $page: The start page | |||||
| * :param int $size: Number of items per page | |||||
| * :param array $filters: Optional filters | |||||
| * :param string $deep_paging_uri: if provided, the $page and $size | |||||
| * parameters will be ignored and this URI will be requested directly. | |||||
| * | |||||
| * :return: A page of resources | |||||
| * :rtype: :php:class:`Services_Twilio_Page` | |||||
| */ | |||||
| public function getPage( | |||||
| $page = 0, $size = 50, $filters = array(), $deep_paging_uri = null | |||||
| ) { | |||||
| $list_name = $this->getResourceName(); | |||||
| if ($deep_paging_uri !== null) { | |||||
| $page = $this->client->retrieveData($deep_paging_uri, array(), true); | |||||
| } else { | |||||
| $page = $this->client->retrieveData($this->uri, array( | |||||
| 'Page' => $page, | |||||
| 'PageSize' => $size, | |||||
| ) + $filters); | |||||
| } | |||||
| /* create a new PHP object for each json obj in the api response. */ | |||||
| $page->$list_name = array_map( | |||||
| array($this, 'getObjectFromJson'), | |||||
| $page->$list_name | |||||
| ); | |||||
| if (isset($page->next_page_uri)) { | |||||
| $next_page_uri = $page->next_page_uri; | |||||
| } else { | |||||
| $next_page_uri = null; | |||||
| } | |||||
| return new Services_Twilio_Page($page, $list_name, $next_page_uri); | |||||
| } | |||||
| /** | |||||
| * Get the total number of instances for this list. | |||||
| * | |||||
| * This will make one HTTP request to retrieve the total, every time this | |||||
| * method is called. | |||||
| * | |||||
| * If the total is not set, or an Exception was thrown, returns 0 | |||||
| * | |||||
| * :return: The total number of instance members | |||||
| * :rtype: integer | |||||
| */ | |||||
| public function count() { | |||||
| try { | |||||
| $page = $this->getPage(0, 1); | |||||
| return $page ? (int)$page->total : 0; | |||||
| } catch (Exception $e) { | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Returns an iterable list of | |||||
| * :php:class:`instance resources <Services_Twilio_InstanceResource>`. | |||||
| * | |||||
| * :param int $page: The start page | |||||
| * :param int $size: Number of items per page | |||||
| * :param array $filters: Optional filters. | |||||
| * The filter array can accept full datetimes when StartTime or DateCreated | |||||
| * are used. Inequalities should be within the key portion of the array and | |||||
| * multiple filter parameters can be combined for more specific searches. | |||||
| * | |||||
| * .. code-block:: php | |||||
| * | |||||
| * array('DateCreated>' => '2011-07-05 08:00:00', 'DateCreated<' => '2011-08-01') | |||||
| * | |||||
| * .. code-block:: php | |||||
| * | |||||
| * array('StartTime<' => '2011-07-05 08:00:00') | |||||
| * | |||||
| * :return: An iterator | |||||
| * :rtype: :php:class:`Services_Twilio_AutoPagingIterator` | |||||
| */ | |||||
| public function getIterator( | |||||
| $page = 0, $size = 50, $filters = array() | |||||
| ) { | |||||
| return new Services_Twilio_AutoPagingIterator( | |||||
| array($this, 'getPageGenerator'), $page, $size, $filters | |||||
| ); | |||||
| } | |||||
| /** | |||||
| * Retrieve a new page of API results, and update iterator parameters. This | |||||
| * function is called by the paging iterator to retrieve a new page and | |||||
| * shouldn't be called directly. | |||||
| */ | |||||
| public function getPageGenerator( | |||||
| $page, $size, $filters = array(), $deep_paging_uri = null | |||||
| ) { | |||||
| return $this->getPage($page, $size, $filters, $deep_paging_uri); | |||||
| } | |||||
| } | |||||