Development

/branches/1.0/lib/addon/sfPager.class.php

You must first sign up to be able to contribute.

root/branches/1.0/lib/addon/sfPager.class.php

Revision 18089, 5.7 kB (checked in by fabien, 6 years ago)

[1.0, 1.1, 1.2, 1.3] fixed sfPager::getLinks() to always return integers (closes #6428)

  • Property svn:mime-type set to text/x-php
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Rev Date
Line 
1 <?php
2
3 /*
4  * This file is part of the symfony package.
5  * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 /**
12  * @package    symfony
13  * @subpackage addon
14  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
15  * @version    SVN: $Id$
16  */
17
18 /**
19  *
20  * sfPager class.
21  *
22  * @package    symfony
23  * @subpackage addon
24  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
25  * @version    SVN: $Id$
26  */
27 abstract class sfPager
28 {
29   protected
30     $page            = 1,
31     $maxPerPage      = 0,
32     $lastPage        = 1,
33     $nbResults       = 0,
34     $class           = '',
35     $tableName       = '',
36     $objects         = null,
37     $cursor          = 1,
38     $parameters      = array(),
39     $currentMaxLink  = 1,
40     $parameterHolder = null,
41     $maxRecordLimit = false;
42
43   public function __construct($class, $maxPerPage = 10)
44   {
45     $this->setClass($class);
46     $this->setMaxPerPage($maxPerPage);
47     $this->parameterHolder = new sfParameterHolder();
48   }
49
50   // function to be called after parameters have been set
51   abstract public function init();
52
53   // main method: returns an array of result on the given page
54   abstract public function getResults();
55
56   // used internally by getCurrent()
57   abstract protected function retrieveObject($offset);
58
59   public function getCurrentMaxLink()
60   {
61     return $this->currentMaxLink;
62   }
63
64   public function getMaxRecordLimit()
65   {
66     return $this->maxRecordLimit;
67   }
68
69   public function setMaxRecordLimit($limit)
70   {
71     $this->maxRecordLimit = $limit;
72   }
73
74   public function getLinks($nb_links = 5)
75   {
76     $links = array();
77     $tmp   = $this->page - floor($nb_links / 2);
78     $check = $this->lastPage - $nb_links + 1;
79     $limit = ($check > 0) ? $check : 1;
80     $begin = ($tmp > 0) ? (($tmp > $limit) ? $limit : $tmp) : 1;
81
82     $i = (int) $begin;
83     while (($i < $begin + $nb_links) && ($i <= $this->lastPage))
84     {
85       $links[] = $i++;
86     }
87
88     $this->currentMaxLink = count($links) ? $links[count($links) - 1] : 1;
89
90     return $links;
91   }
92
93   public function haveToPaginate()
94   {
95     return (($this->getMaxPerPage() != 0) && ($this->getNbResults() > $this->getMaxPerPage()));
96   }
97
98   public function getCursor()
99   {
100     return $this->cursor;
101   }
102
103   public function setCursor($pos)
104   {
105     if ($pos < 1)
106     {
107       $this->cursor = 1;
108     }
109     else if ($pos > $this->nbResults)
110     {
111       $this->cursor = $this->nbResults;
112     }
113     else
114     {
115       $this->cursor = $pos;
116     }
117   }
118
119   public function getObjectByCursor($pos)
120   {
121     $this->setCursor($pos);
122
123     return $this->getCurrent();
124   }
125
126   public function getCurrent()
127   {
128     return $this->retrieveObject($this->cursor);
129   }
130
131   public function getNext()
132   {
133     if (($this->cursor + 1) > $this->nbResults)
134     {
135       return null;
136     }
137     else
138     {
139       return $this->retrieveObject($this->cursor + 1);
140     }
141   }
142
143   public function getPrevious()
144   {
145     if (($this->cursor - 1) < 1)
146     {
147       return null;
148     }
149     else
150     {
151       return $this->retrieveObject($this->cursor - 1);
152     }
153   }
154
155   public function getFirstIndice()
156   {
157     if ($this->page == 0)
158     {
159       return 1;
160     }
161     else
162     {
163       return ($this->page - 1) * $this->maxPerPage + 1;
164     }
165   }
166
167   public function getLastIndice()
168   {
169     if ($this->page == 0)
170     {
171       return $this->nbResults;
172     }
173     else
174     {
175       if (($this->page * $this->maxPerPage) >= $this->nbResults)
176       {
177         return $this->nbResults;
178       }
179       else
180       {
181         return ($this->page * $this->maxPerPage);
182       }
183     }
184   }
185
186   public function getCriteria()
187   {
188     return $this->criteria;
189   }
190
191   public function setCriteria($c)
192   {
193     $this->criteria = $c;
194   }
195
196   public function getClass()
197   {
198     return $this->class;
199   }
200
201   public function setClass($class)
202   {
203     $this->class = $class;
204   }
205
206   public function getNbResults()
207   {
208     return $this->nbResults;
209   }
210
211   protected function setNbResults($nb)
212   {
213     $this->nbResults = $nb;
214   }
215
216   public function getFirstPage()
217   {
218     return 1;
219   }
220
221   public function getLastPage()
222   {
223     return $this->lastPage;
224   }
225
226   protected function setLastPage($page)
227   {
228     $this->lastPage = $page;
229     if ($this->getPage() > $page)
230     {
231       $this->setPage($page);
232     }
233   }
234
235   public function getPage()
236   {
237     return $this->page;
238   }
239
240   public function getNextPage()
241   {
242     return min($this->getPage() + 1, $this->getLastPage());
243   }
244
245   public function getPreviousPage()
246   {
247     return max($this->getPage() - 1, $this->getFirstPage());
248   }
249
250   public function setPage($page)
251   {
252     $this->page = intval($page);
253     if ($this->page <= 0)
254     {
255       //set first page, which depends on a maximum set
256       $this->page = $this->getMaxPerPage() ? 1 : 0;
257     }
258   }
259
260   public function getMaxPerPage()
261   {
262     return $this->maxPerPage;
263   }
264
265   public function setMaxPerPage($max)
266   {
267     if ($max > 0)
268     {
269       $this->maxPerPage = $max;
270       if ($this->page == 0)
271       {
272         $this->page = 1;
273       }
274     }
275     else if ($max == 0)
276     {
277       $this->maxPerPage = 0;
278       $this->page = 0;
279     }
280     else
281     {
282       $this->maxPerPage = 1;
283       if ($this->page == 0)
284       {
285         $this->page = 1;
286       }
287     }
288   }
289
290   public function getParameterHolder()
291   {
292     return $this->parameterHolder;
293   }
294
295   public function getParameter($name, $default = null, $ns = null)
296   {
297     return $this->parameterHolder->get($name, $default, $ns);
298   }
299
300   public function hasParameter($name, $ns = null)
301   {
302     return $this->parameterHolder->has($name, $ns);
303   }
304
305   public function setParameter($name, $value, $ns = null)
306   {
307     return $this->parameterHolder->set($name, $value, $ns);
308   }
309 }
310
Note: See TracBrowser for help on using the browser.