1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13: namespace ManiaLib\Utils;
14:
15: 16: 17: 18:
19: class MultipageList
20: {
21:
22: protected $size;
23: protected $urlParamName = 'page';
24: protected $urlPageName = null;
25: protected $currentPage;
26: protected $defaultPage = 1;
27: protected $perPage;
28: protected $pageNumber;
29: protected $hasMorePages;
30: protected $linkCallback = 'setManialink';
31:
32: 33: 34:
35: public $pageNavigator;
36:
37: function __construct($perPage = 8)
38: {
39: $this->pageNavigator = new \ManiaLib\Gui\Cards\PageNavigator;
40: $this->perPage = $perPage;
41: }
42:
43: function setSize($size)
44: {
45: $this->size = $size;
46: if($this->getCurrentPage() > $this->getPageNumber())
47: $this->currentPage = $this->getPageNumber();
48: }
49:
50: function setPerPage($perPage)
51: {
52: $this->perPage = $perPage;
53: }
54:
55: function setCurrentPage($page)
56: {
57: $this->currentPage = $page;
58: }
59:
60: function setDefaultPage($page)
61: {
62: $this->defaultPage = $page;
63: }
64:
65: function setUrlParamName($name)
66: {
67: $this->urlParamName = $name;
68: }
69:
70: function setUrlPageName($file)
71: {
72: $this->urlPageName = $file;
73: }
74:
75: function setLinkCallback($linkCallback)
76: {
77: $this->linkCallback = $linkCallback;
78: }
79:
80: function goToLastPage()
81: {
82: $this->currentPage = $this->getPageNumber();
83: }
84:
85: function getCurrentPage()
86: {
87: if($this->currentPage === null)
88: {
89: $request = \ManiaLib\Application\Request::getInstance();
90: $this->currentPage = (int) $request->get($this->urlParamName,
91: $this->defaultPage);
92: }
93: if($this->currentPage < 1)
94: {
95: $this->currentPage = 1;
96: }
97: return $this->currentPage;
98: }
99:
100: function getPageNumber()
101: {
102: if(!$this->pageNumber && $this->perPage)
103: {
104: $this->pageNumber = ceil($this->size / $this->perPage);
105: }
106: return $this->pageNumber;
107: }
108:
109: function getUrlParamName()
110: {
111: return $this->urlParamName;
112: }
113:
114: 115: 116:
117: function getLimit()
118: {
119: $offset = ($this->getCurrentPage() - 1) * $this->perPage;
120: $length = $this->perPage;
121: return array($offset, $length);
122: }
123:
124: function getPerPage()
125: {
126: return $this->perPage;
127: }
128:
129: function setHasMorePages($hasMorePages)
130: {
131: $this->hasMorePages = $hasMorePages;
132: }
133:
134: function checkArrayForMorePages(&$array)
135: {
136: list($offset, $length) = $this->getLimit();
137: $hasMorePages = (count($array) == $length + 1);
138: if($hasMorePages)
139: {
140: array_pop($array);
141: }
142: $this->hasMorePages = $hasMorePages;
143: $this->pageNavigator->showText(false);
144: }
145:
146: function hasMorePages()
147: {
148: if($this->hasMorePages === null)
149: {
150: return $this->currentPage < $this->pageNumber;
151: }
152: return $this->hasMorePages;
153: }
154:
155: function savePageNavigator()
156: {
157: $request = \ManiaLib\Application\Request::getInstance();
158:
159: if($this->hasMorePages !== null)
160: {
161: if($this->hasMorePages)
162: {
163: $this->setSize($this->getCurrentPage() * $this->perPage + 1);
164: }
165: else
166: {
167: $this->setSize($this->getCurrentPage() * $this->perPage);
168: }
169: }
170:
171: if($this->getPageNumber() > 1)
172: {
173: $ui = $this->pageNavigator;
174: $ui->setPageNumber($this->getPageNumber());
175: $ui->setCurrentPage($this->getCurrentPage());
176:
177: if($ui->isLastShown())
178: {
179: $request->set($this->urlParamName, 1);
180: call_user_func(array($ui->arrowFirst, $this->linkCallback),
181: $request->createLink($this->urlPageName));
182:
183: $request->set($this->urlParamName, $this->getPageNumber());
184: call_user_func(array($ui->arrowLast, $this->linkCallback),
185: $request->createLink($this->urlPageName));
186: }
187:
188: if($ui->isFastNextShown())
189: {
190: $request->set($this->urlParamName, $this->currentPage + 5);
191: call_user_func(array($ui->arrowFastNext, $this->linkCallback),
192: $request->createLink($this->urlPageName));
193:
194: if($this->currentPage > 1)
195: {
196: $request->set($this->urlParamName,
197: $this->currentPage - 5 < 1 ? 1 : $this->currentPage - 5);
198: call_user_func(array($ui->arrowFastPrev, $this->linkCallback),
199: $request->createLink($this->urlPageName));
200: }
201: }
202:
203:
204: if($this->currentPage < $this->pageNumber)
205: {
206: $request->set($this->urlParamName, $this->currentPage + 1);
207: call_user_func(array($ui->arrowNext, $this->linkCallback),
208: $request->createLink($this->urlPageName));
209: }
210:
211: if($this->currentPage > 1)
212: {
213: $request->set($this->urlParamName, $this->currentPage - 1);
214: call_user_func(array($ui->arrowPrev, $this->linkCallback),
215: $request->createLink($this->urlPageName));
216: }
217:
218: $request->set($this->urlParamName, $this->currentPage);
219:
220: $ui->save();
221: }
222: }
223:
224: }
225:
226: ?>