/var/www/hkosl.com/b2b2c/webadmin/libraies/twilio/sdk/Services/Twilio/AutoPagingIterator.php


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;
        }
    }
}