PaginationHelper::__toString()   B
last analyzed

Complexity

Conditions 9
Paths 16

Size

Total Lines 46
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 9
eloc 30
nc 16
nop 0
dl 0
loc 46
rs 8.0555
c 1
b 0
f 0
1
<?php
2
namespace ntentan\honam\engines\php\helpers;
3
4
use ntentan\honam\engines\php\Helper;
5
use ntentan\utils\Input;
6
7
class PaginationHelper extends Helper
8
{
9
    private $parameters = [
10
        'query' => null,
11
        'number_of_links' => 21,
12
        'number_of_items' => null,
13
        'items_per_page' => 10,
14
        'base_url' => null,
15
        'page_number' => 1
16
    ];
17
18
    private $halfNumberOfLinks;
19
20
    public function help($params = [])
21
    {
22
        $this->parameters = array_merge($this->parameters, $params);
23
        $this->parameters['number_of_pages'] = ceil($this->parameters['number_of_items'] / $this->parameters['items_per_page']);
24
        $this->halfNumberOfLinks = ceil($this->parameters['number_of_links'] / 2);
25
        if ($this->parameters['query'] != '') {
26
            $this->parameters['page_number'] = Input::get($this->parameters['query']) == '' ? 1 : Input::get($this->parameters['query']);
27
        }
28
        return $this;
29
    }
30
31
32
    private function getLink($index)
33
    {
34
        if ($this->parameters['query'] == '') {
35
            $link = $this->parameters['base_url'] . $index;
36
        } else {
37
            $link = $this->parameters['base_url'] . '?';
38
            $get = Input::get();
39
            foreach ($get as $key => $value) {
40
                if ($key == $this->parameters['query']) continue;
41
                $link .= "$key=" . urlencode($value) . '&';
42
            }
43
            $link .= "{$this->parameters['query']}=$index";
44
        }
45
        return $link;
46
    }
47
48
    public function __toString()
49
    {
50
        $pagingLinks = array();
51
        if ($this->parameters['page_number'] > 1) {
52
            $pagingLinks[] = array(
53
                "link" => $this->getLink($this->parameters['page_number'] - 1),
54
                "label" => "Prev",
55
                "selected" => false
56
            );
57
        }
58
59
        if ($this->parameters['number_of_pages'] <= $this->parameters['number_of_links'] || $this->parameters['page_number'] < $this->halfNumberOfLinks) {
60
            for ($i = 1; $i <= ($this->parameters['number_of_pages'] > $this->parameters['number_of_links'] ? $this->parameters['number_of_links'] : $this->parameters['number_of_pages']); $i++) {
61
62
                $pagingLinks[] = array(
63
                    "link" => $this->getLink($i),
64
                    "label" => "$i",
65
                    "selected" => $this->parameters['page_number'] == $i
66
                );
67
            }
68
        } else {
69
            if ($this->parameters['number_of_pages'] - $this->parameters['page_number'] < $this->halfNumberOfLinks) {
70
                $startOffset = $this->parameters['page_number'] - (($this->parameters['number_of_links'] - 1) - ($this->parameters['number_of_pages'] - $this->parameters['page_number']));
71
                $endOffset = $this->parameters['page_number'] + ($this->parameters['number_of_pages'] - $this->parameters['page_number']);
72
            } else {
73
                $startOffset = $this->parameters['page_number'] - ($this->halfNumberOfLinks - 1);
74
                $endOffset = $this->parameters['page_number'] + ($this->halfNumberOfLinks - 1);
75
            }
76
            for ($i = $startOffset; $i <= $endOffset; $i++) {
77
                $pagingLinks[] = array(
78
                    "link" => $this->getLink($i),
79
                    "label" => "$i",
80
                    "selected" => $this->parameters['page_number'] == $i
81
                );
82
            }
83
        }
84
85
        if ($this->parameters['page_number'] < $this->parameters['number_of_pages']) {
86
            $pagingLinks[] = array(
87
                "link" => $this->getLink($this->parameters['page_number'] + 1),
88
                "label" => "Next",
89
                "selected" => false
90
            );
91
        }
92
93
        return $this->templateRenderer->render("links.tpl.php", array('links' => $pagingLinks));
94
    }
95
}
96