1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
<?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->next_page_uri = null; $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; } } }
|