diff options
Diffstat (limited to 'inc/3rdparty')
-rw-r--r-- | inc/3rdparty/paginator.php | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/inc/3rdparty/paginator.php b/inc/3rdparty/paginator.php new file mode 100644 index 00000000..e8801555 --- /dev/null +++ b/inc/3rdparty/paginator.php | |||
@@ -0,0 +1,198 @@ | |||
1 | <?php | ||
2 | /* | ||
3 | * PHP Pagination Class | ||
4 | * | ||
5 | * @author David Carr - dave@daveismyname.com - http://www.daveismyname.com | ||
6 | * @version 1.0 | ||
7 | * @date October 20, 2013 | ||
8 | */ | ||
9 | class Paginator{ | ||
10 | |||
11 | /** | ||
12 | * set the number of items per page. | ||
13 | * | ||
14 | * @var numeric | ||
15 | */ | ||
16 | private $_perPage; | ||
17 | |||
18 | /** | ||
19 | * set get parameter for fetching the page number | ||
20 | * | ||
21 | * @var string | ||
22 | */ | ||
23 | private $_instance; | ||
24 | |||
25 | /** | ||
26 | * sets the page number. | ||
27 | * | ||
28 | * @var numeric | ||
29 | */ | ||
30 | private $_page; | ||
31 | |||
32 | /** | ||
33 | * set the limit for the data source | ||
34 | * | ||
35 | * @var string | ||
36 | */ | ||
37 | private $_limit; | ||
38 | |||
39 | /** | ||
40 | * set the total number of records/items. | ||
41 | * | ||
42 | * @var numeric | ||
43 | */ | ||
44 | private $_totalRows = 0; | ||
45 | |||
46 | |||
47 | |||
48 | /** | ||
49 | * __construct | ||
50 | * | ||
51 | * pass values when class is istantiated | ||
52 | * | ||
53 | * @param numeric $_perPage sets the number of iteems per page | ||
54 | * @param numeric $_instance sets the instance for the GET parameter | ||
55 | */ | ||
56 | public function __construct($perPage,$instance){ | ||
57 | $this->_instance = $instance; | ||
58 | $this->_perPage = $perPage; | ||
59 | $this->set_instance(); | ||
60 | } | ||
61 | |||
62 | /** | ||
63 | * get_start | ||
64 | * | ||
65 | * creates the starting point for limiting the dataset | ||
66 | * @return numeric | ||
67 | */ | ||
68 | private function get_start(){ | ||
69 | return ($this->_page * $this->_perPage) - $this->_perPage; | ||
70 | } | ||
71 | |||
72 | /** | ||
73 | * set_instance | ||
74 | * | ||
75 | * sets the instance parameter, if numeric value is 0 then set to 1 | ||
76 | * | ||
77 | * @var numeric | ||
78 | */ | ||
79 | private function set_instance(){ | ||
80 | $this->_page = (int) (!isset($_GET[$this->_instance]) ? 1 : $_GET[$this->_instance]); | ||
81 | $this->_page = ($this->_page == 0 ? 1 : $this->_page); | ||
82 | } | ||
83 | |||
84 | /** | ||
85 | * set_total | ||
86 | * | ||
87 | * collect a numberic value and assigns it to the totalRows | ||
88 | * | ||
89 | * @var numeric | ||
90 | */ | ||
91 | public function set_total($_totalRows){ | ||
92 | $this->_totalRows = $_totalRows; | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * get_limit | ||
97 | * | ||
98 | * returns the limit for the data source, calling the get_start method and passing in the number of items perp page | ||
99 | * | ||
100 | * @return string | ||
101 | */ | ||
102 | public function get_limit(){ | ||
103 | return "LIMIT ".$this->get_start().",$this->_perPage"; | ||
104 | } | ||
105 | |||
106 | /** | ||
107 | * page_links | ||
108 | * | ||
109 | * create the html links for navigating through the dataset | ||
110 | * | ||
111 | * @var sting $path optionally set the path for the link | ||
112 | * @var sting $ext optionally pass in extra parameters to the GET | ||
113 | * @return string returns the html menu | ||
114 | */ | ||
115 | public function page_links($path='?',$ext=null) | ||
116 | { | ||
117 | $adjacents = "2"; | ||
118 | $prev = $this->_page - 1; | ||
119 | $next = $this->_page + 1; | ||
120 | $lastpage = ceil($this->_totalRows/$this->_perPage); | ||
121 | $lpm1 = $lastpage - 1; | ||
122 | |||
123 | $pagination = ""; | ||
124 | if($lastpage > 1) | ||
125 | { | ||
126 | $pagination .= "<div class='pagination'>"; | ||
127 | if ($this->_page > 1) | ||
128 | $pagination.= "<a href='".$path."$this->_instance=$prev"."$ext'>« previous</a>"; | ||
129 | else | ||
130 | $pagination.= "<span class='disabled'>« previous</span>"; | ||
131 | |||
132 | if ($lastpage < 7 + ($adjacents * 2)) | ||
133 | { | ||
134 | for ($counter = 1; $counter <= $lastpage; $counter++) | ||
135 | { | ||
136 | if ($counter == $this->_page) | ||
137 | $pagination.= "<span class='current'>$counter</span>"; | ||
138 | else | ||
139 | $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>"; | ||
140 | } | ||
141 | } | ||
142 | elseif($lastpage > 5 + ($adjacents * 2)) | ||
143 | { | ||
144 | if($this->_page < 1 + ($adjacents * 2)) | ||
145 | { | ||
146 | for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) | ||
147 | { | ||
148 | if ($counter == $this->_page) | ||
149 | $pagination.= "<span class='current'>$counter</span>"; | ||
150 | else | ||
151 | $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>"; | ||
152 | } | ||
153 | $pagination.= "..."; | ||
154 | $pagination.= "<a href='".$path."$this->_instance=$lpm1"."$ext'>$lpm1</a>"; | ||
155 | $pagination.= "<a href='".$path."$this->_instance=$lastpage"."$ext'>$lastpage</a>"; | ||
156 | } | ||
157 | elseif($lastpage - ($adjacents * 2) > $this->_page && $this->_page > ($adjacents * 2)) | ||
158 | { | ||
159 | $pagination.= "<a href='".$path."$this->_instance=1"."$ext'>1</a>"; | ||
160 | $pagination.= "<a href='".$path."$this->_instance=2"."$ext'>2</a>"; | ||
161 | $pagination.= "..."; | ||
162 | for ($counter = $this->_page - $adjacents; $counter <= $this->_page + $adjacents; $counter++) | ||
163 | { | ||
164 | if ($counter == $this->_page) | ||
165 | $pagination.= "<span class='current'>$counter</span>"; | ||
166 | else | ||
167 | $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>"; | ||
168 | } | ||
169 | $pagination.= ".."; | ||
170 | $pagination.= "<a href='".$path."$this->_instance=$lpm1"."$ext'>$lpm1</a>"; | ||
171 | $pagination.= "<a href='".$path."$this->_instance=$lastpage"."$ext'>$lastpage</a>"; | ||
172 | } | ||
173 | else | ||
174 | { | ||
175 | $pagination.= "<a href='".$path."$this->_instance=1"."$ext'>1</a>"; | ||
176 | $pagination.= "<a href='".$path."$this->_instance=2"."$ext'>2</a>"; | ||
177 | $pagination.= ".."; | ||
178 | for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) | ||
179 | { | ||
180 | if ($counter == $this->_page) | ||
181 | $pagination.= "<span class='current'>$counter</span>"; | ||
182 | else | ||
183 | $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>"; | ||
184 | } | ||
185 | } | ||
186 | } | ||
187 | |||
188 | if ($this->_page < $counter - 1) | ||
189 | $pagination.= "<a href='".$path."$this->_instance=$next"."$ext'>next »</a>"; | ||
190 | else | ||
191 | $pagination.= "<span class='disabled'>next »</span>"; | ||
192 | $pagination.= "</div>\n"; | ||
193 | } | ||
194 | |||
195 | |||
196 | return $pagination; | ||
197 | } | ||
198 | } | ||