Changeset View
Changeset View
Standalone View
Standalone View
externals/twilio-php/Services/Twilio/AutoPagingIterator.php
- This file was added.
| Property | Old Value | New Value |
|---|---|---|
| File Mode | null | 100755 |
| <?php | |||||
| class Services_Twilio_AutoPagingIterator | |||||
| implements Iterator | |||||
| { | |||||
| protected $generator; | |||||
| protected $args; | |||||
| protected $items; | |||||
| private $_args; | |||||
| public function __construct($generator, $page, $size, $filters) { | |||||
| $this->generator = $generator; | |||||
| $this->page = $page; | |||||
| $this->size = $size; | |||||
| $this->filters = $filters; | |||||
| $this->items = array(); | |||||
| // Save a backup for rewind() | |||||
| $this->_args = array( | |||||
| 'page' => $page, | |||||
| 'size' => $size, | |||||
| 'filters' => $filters, | |||||
| ); | |||||
| } | |||||
| public function current() | |||||
| { | |||||
| return current($this->items); | |||||
| } | |||||
| public function key() | |||||
| { | |||||
| return key($this->items); | |||||
| } | |||||
| /* | |||||
| * Return the next item in the list, making another HTTP call to the next | |||||
| * page of resources if necessary. | |||||
| */ | |||||
| public function next() | |||||
| { | |||||
| try { | |||||
| $this->loadIfNecessary(); | |||||
| return next($this->items); | |||||
| } | |||||
| catch (Services_Twilio_RestException $e) { | |||||
| // 20006 is an out of range paging error, everything else is valid | |||||
| if ($e->getCode() != 20006) { | |||||
| throw $e; | |||||
| } | |||||
| } | |||||
| } | |||||
| /* | |||||
| * Restore everything to the way it was before we began paging. This gets | |||||
| * called at the beginning of any foreach() loop | |||||
| */ | |||||
| public function rewind() | |||||
| { | |||||
| foreach ($this->_args as $arg => $val) { | |||||
| $this->$arg = $val; | |||||
| } | |||||
| $this->items = array(); | |||||
| $this->next_page_uri = null; | |||||
| } | |||||
| public function count() | |||||
| { | |||||
| throw new BadMethodCallException('Not allowed'); | |||||
| } | |||||
| public function valid() | |||||
| { | |||||
| try { | |||||
| $this->loadIfNecessary(); | |||||
| return key($this->items) !== null; | |||||
| } | |||||
| catch (Services_Twilio_RestException $e) { | |||||
| // 20006 is an out of range paging error, everything else is valid | |||||
| if ($e->getCode() != 20006) { | |||||
| throw $e; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| /* | |||||
| * Fill $this->items with a new page from the API, if necessary. | |||||
| */ | |||||
| protected function loadIfNecessary() | |||||
| { | |||||
| if (// Empty because it's the first time or last page was empty | |||||
| empty($this->items) | |||||
| // null key when the items list is iterated over completely | |||||
| || key($this->items) === null | |||||
| ) { | |||||
| $page = call_user_func_array($this->generator, array( | |||||
| $this->page, | |||||
| $this->size, | |||||
| $this->filters, | |||||
| $this->next_page_uri, | |||||
| )); | |||||
| $this->next_page_uri = $page->next_page_uri; | |||||
| $this->items = $page->getItems(); | |||||
| $this->page = $this->page + 1; | |||||
| } | |||||
| } | |||||
| } | |||||