File: pager.inc.php

package info (click to toggle)
zoph 1.4-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 16,632 kB
  • sloc: php: 28,044; javascript: 10,435; sql: 527; sh: 153; makefile: 4
file content (106 lines) | stat: -rw-r--r-- 3,472 bytes parent folder | download | duplicates (3)
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
<?php
/**
 * Pager class
 * Displays a list of pages, usually at the bottom of a page, to navigate to different pages
 *
 * This file is part of Zoph.
 *
 * Zoph is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Zoph is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with Zoph; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @author Jeroen Roos
 * @package Zoph
 */

namespace template;

use web\request;

/**
 * Pager class
 * Displays a list of pages, usually at the bottom of a page, to navigate to different pages
 *
 * @author Jeroen Roos
 * @package Zoph
 */
class pager {
    private $current=0;
    private $pages=array();

    public function __construct($current, $total, $numPages, $pageSize, $maxSize, $requestVars, $var) {
        $url=$_SERVER['PHP_SELF'];
        $pageNum = floor($current / $pageSize) + 1;
        $this->current=(string) $pageNum;

        $pageGroup=0;
        $pages[$pageGroup]=array();

        /** @todo pass as variable instead of creating here */
        $request = request::create();

        if ($current > 0) {
            $newOffset = max(0, $current - $pageSize);
            $this->pages[$pageGroup][translate("Prev")]= $url . "?" . http_build_query($request->getUpdatedVars($var, $newOffset));
        }

        if ($numPages > 1) {
            $midPage = floor($maxSize / 2);
            $page = $pageNum - $midPage;
            if ($page <= 0) {
                $page = 1;
            }

            $lastPage = $page + $maxSize - 1;
            if ($lastPage > $numPages) {
                $page = $page - $lastPage + $numPages;
                if ($page <= 0) {
                    $page = 1;
                }
                $lastPage = $numPages;
            }

            if ($page > 1) {
                $this->pages[$pageGroup]["1"] = $url . "?" . http_build_query($request->getUpdatedVars($var, 0));
            }

            $pages[++$pageGroup]=array();

            while ($page <= $lastPage) {
                $newOffset = ($page - 1) * $pageSize;
                $this->pages[$pageGroup][(string) $page] = $url . "?" . http_build_query($request->getUpdatedVars($var, $newOffset));
                $page++;
            }

            $pages[++$pageGroup]=array();

            if ($page <= $numPages) {
                $this->pages[$pageGroup][(string) $numPages] = $url . "?" . http_build_query($request->getUpdatedVars($var, ($numPages-1) * $pageSize));
            }
        }
        if ($total >  $current + $pageSize) {
            $newOffset = $current + $pageSize;
            $this->pages[$pageGroup][translate("Next")]= $url . "?" . http_build_query($request->getUpdatedVars($var, $newOffset));
        }
    }

    public function __toString() {
        return (string) $this->getBlock();
    }

    public function getBlock() {
        return new block("pager", array(
            "pages"     => $this->pages,
            "current"   => $this->current
        ));
    }
}