1
|
|
|
<?php namespace EvolutionCMS\Support; |
2
|
|
|
|
3
|
|
|
use EvolutionCMS\Interfaces\DataSetPagerInterface; |
4
|
|
|
|
5
|
|
|
# |
6
|
|
|
# DataSetPager Class |
7
|
|
|
# Created By Raymond Irving 2-Dec,2004 |
8
|
|
|
# Based on CLASP 2.0 (www.claspdev.com) |
9
|
|
|
# ----------------------------------------- |
10
|
|
|
# Licensed under the GPL |
11
|
|
|
# ----------------------------------------- |
12
|
|
|
# |
13
|
|
|
|
14
|
|
|
class DataSetPager implements DataSetPagerInterface{ |
15
|
|
|
|
16
|
|
|
public $ds; // datasource |
17
|
|
|
public $pageSize; |
18
|
|
|
public $pageNumber; |
19
|
|
|
public $rows; |
20
|
|
|
public $pager; |
21
|
|
|
public $id; |
22
|
|
|
|
23
|
|
|
// normal page |
24
|
|
|
public $pageStyle; |
25
|
|
|
public $pageClass; |
26
|
|
|
|
27
|
|
|
// selected page |
28
|
|
|
public $selPageStyle; |
29
|
|
|
public $selPageClass; |
30
|
|
|
public $renderRowFnc; |
31
|
|
|
public $renderRowFncArgs; |
32
|
|
|
public $renderPagerFnc; |
33
|
|
|
public $renderPagerFncArgs; |
34
|
|
|
public static $dataSetPagerCnt; |
35
|
|
|
|
36
|
|
|
public function __construct($id, $ds, $pageSize = 10, $pageNumber = -1) { |
37
|
|
|
global $_PAGE; // use view state object |
38
|
|
|
|
39
|
|
|
// set id |
40
|
|
|
self::$dataSetPagerCnt++; |
41
|
|
|
$this->id = !empty($id) ? $id : "dsp" . self::$dataSetPagerCnt; |
42
|
|
|
|
43
|
|
|
// get pagenumber |
44
|
|
|
// by setting pager to -1 cause pager to load it's last page number |
45
|
|
|
if($pageNumber == -1) { |
46
|
|
|
$pageNumber = 1; |
47
|
|
|
if(isset($_GET["dpgn" . $this->id])) { |
48
|
|
|
$pageNumber = $_GET["dpgn" . $this->id]; |
49
|
|
|
} elseif(isset($_PAGE['vs'][$id . '_dpgn'])) { |
50
|
|
|
$pageNumber = $_PAGE['vs'][$id . '_dpgn']; |
51
|
|
|
} |
52
|
|
|
} |
53
|
|
|
if(!is_numeric($pageNumber)) { |
54
|
|
|
$pageNumber = 1; |
55
|
|
|
} |
56
|
|
|
|
57
|
|
|
$this->ds = $ds; // datasource |
58
|
|
|
$this->pageSize = $pageSize; |
59
|
|
|
$this->pageNumber = $pageNumber; |
60
|
|
|
$this->rows = ''; |
61
|
|
|
$this->pager = ''; |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
public function getRenderedPager() { |
65
|
|
|
return $this->pager; |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
public function getRenderedRows() { |
69
|
|
|
return $this->rows; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
public function setDataSource($ds) { |
73
|
|
|
$this->ds = $ds; |
74
|
|
|
} |
75
|
|
|
|
76
|
|
|
public function setPageSize($ps) { |
77
|
|
|
$this->pageSize = $ps; |
78
|
|
|
} |
79
|
|
|
|
80
|
|
|
public function setRenderRowFnc($fncName, $args = "") { |
81
|
|
|
$this->renderRowFnc = &$fncName; |
82
|
|
|
$this->renderRowFncArgs = $args; // extra agruments |
83
|
|
|
|
84
|
|
|
|
85
|
|
|
} |
86
|
|
|
|
87
|
|
|
public function setRenderPagerFnc($fncName, $args = "") { |
88
|
|
|
$this->renderPagerFnc = $fncName; |
89
|
|
|
$this->renderPagerFncArgs = $args; // extra agruments |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
public function render() { |
93
|
|
|
$modx = evolutionCMS(); global $_PAGE; |
94
|
|
|
|
95
|
|
|
$isDataset = $modx->getDatabase()->isResult($this->ds); |
96
|
|
|
|
97
|
|
|
if(!$this->selPageStyle) { |
98
|
|
|
$this->selPageStyle = "font-weight:bold"; |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
// get total number of rows |
102
|
|
|
$tnr = ($isDataset) ? $modx->getDatabase()->getRecordCount($this->ds) : count($this->ds); |
103
|
|
|
|
104
|
|
|
// render: no records found |
105
|
|
|
if($tnr <= 0) { |
106
|
|
|
$fnc = $this->renderRowFnc; |
107
|
|
|
$args = $this->renderRowFncArgs; |
108
|
|
|
if(isset($fnc)) { |
109
|
|
|
if($args != "") { |
110
|
|
|
$this->rows .= $fnc(0, null, $args); |
111
|
|
|
} // if agrs was specified then we will pass three params |
112
|
|
|
else { |
113
|
|
|
$this->rows .= $fnc(0, null); |
114
|
|
|
} // otherwise two will be passed |
115
|
|
|
} |
116
|
|
|
return; |
117
|
|
|
} |
118
|
|
|
|
119
|
|
|
// get total pages |
120
|
|
|
$tp = ceil($tnr / $this->pageSize); |
121
|
|
|
if($this->pageNumber > $tp) { |
122
|
|
|
$this->pageNumber = 1; |
123
|
|
|
} |
124
|
|
|
|
125
|
|
|
// get page number |
126
|
|
|
$p = $this->pageNumber; |
127
|
|
|
|
128
|
|
|
// save page number to view state if available |
129
|
|
|
if(isset($_PAGE['vs'])) { |
130
|
|
|
$_PAGE['vs'][$this->id . '_dpgn'] = $p; |
131
|
|
|
} |
132
|
|
|
|
133
|
|
|
// render pager : renderPagerFnc($cuurentPage,$pagerNumber,$arguments=""); |
134
|
|
|
if($tp > 1) { |
135
|
|
|
$url = ''; |
136
|
|
|
$fnc = $this->renderPagerFnc; |
137
|
|
|
$args = $this->renderPagerFncArgs; |
138
|
|
|
if(!isset($fnc)) { |
139
|
|
|
if($modx->isFrontend()) { |
140
|
|
|
$url = $modx->makeUrl($modx->documentIdentifier, '', '', 'full') . '?'; |
|
|
|
|
141
|
|
|
} else { |
142
|
|
|
$url = $_SERVER['PHP_SELF'] . '?'; |
143
|
|
|
} |
144
|
|
|
$i = 0; |
145
|
|
|
foreach($_GET as $n => $v) if($n != 'dpgn' . $this->id) { |
146
|
|
|
$i++; |
147
|
|
|
$url .= (($i > 1) ? "&" : "") . "$n=$v"; |
148
|
|
|
} |
149
|
|
|
if($i >= 1) { |
150
|
|
|
$url .= "&"; |
151
|
|
|
} |
152
|
|
|
} |
153
|
|
|
for($i = 1; $i <= $tp; $i++) { |
154
|
|
|
if(isset($fnc)) { |
155
|
|
|
if($args != "") { |
156
|
|
|
$this->pager .= $fnc($p, $i, $args); |
157
|
|
|
} else { |
158
|
|
|
$this->pager .= $fnc($p, $i); |
159
|
|
|
} |
160
|
|
|
} else { |
161
|
|
|
$this->pager .= ($p == $i) ? " <span class='" . $this->selPageClass . "' style='" . $this->selPageStyle . "'>$i</span> " : " <a href='" . $url . "dpgn" . $this->id . "=$i' class='" . $this->pageClass . "' style='" . $this->pageStyle . "'>$i</a> "; |
162
|
|
|
} |
163
|
|
|
} |
164
|
|
|
} |
165
|
|
|
|
166
|
|
|
// render row : renderRowFnc($rowNumber,$row,$arguments="") |
167
|
|
|
$fnc = $this->renderRowFnc; |
168
|
|
|
$args = $this->renderRowFncArgs; |
169
|
|
|
|
170
|
|
|
if(isset($fnc)) { |
171
|
|
|
$i = 1; |
172
|
|
|
$fncObject = is_object($fnc); |
173
|
|
|
$minitems = (($p - 1) * $this->pageSize) + 1; |
174
|
|
|
$maxitems = (($p - 1) * $this->pageSize) + $this->pageSize; |
175
|
|
|
while($i <= $maxitems && ($row = ($isDataset) ? $modx->getDatabase()->getRow($this->ds) : $this->ds[$i - 1])) { |
176
|
|
|
if($i >= $minitems && $i <= $maxitems) { |
177
|
|
|
if($fncObject) { |
178
|
|
|
if($args != "") { |
179
|
|
|
$this->rows .= $fnc->RenderRowFnc($i, $row, $args); |
180
|
|
|
} else { |
181
|
|
|
$this->rows .= $fnc->RenderRowFnc($i, $row); |
182
|
|
|
} |
183
|
|
|
} else { |
184
|
|
|
if($args != "") { |
185
|
|
|
$this->rows .= $fnc($i, $row, $args); |
186
|
|
|
} // if agrs was specified then we wil pass three params |
187
|
|
|
else { |
188
|
|
|
$this->rows .= $fnc($i, $row); |
189
|
|
|
} // otherwise two will be passed |
190
|
|
|
} |
191
|
|
|
|
192
|
|
|
} |
193
|
|
|
$i++; |
194
|
|
|
} |
195
|
|
|
} |
196
|
|
|
} |
197
|
|
|
} |
198
|
|
|
|
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.