DefaultPager   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 37
c 1
b 0
f 0
dl 0
loc 64
ccs 31
cts 31
cp 1
rs 10
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getPager() 0 3 1
B render() 0 21 8
A __construct() 0 18 2
A __toString() 0 3 1
1
<?php
2
3
namespace kalanis\kw_paging\Render;
4
5
6
use kalanis\kw_pager\Interfaces\IPager;
7
use kalanis\kw_paging\Interfaces;
8
use kalanis\kw_paging\Traits;
9
use kalanis\kw_paging\Translations;
10
11
12
/**
13
 * Class DefaultPager
14
 * @package kalanis\kw_paging\Render
15
 * Port of pager from running project. Not so nice, only basics here
16
 * Main problem is too many templates and some of them are not used
17
 */
18
class DefaultPager implements Interfaces\IOutput
19
{
20
    use Traits\TDisplayPages;
21
22
    protected Interfaces\ILink $link;
23
    protected DefaultPager\Pager $pager;
24
    protected DefaultPager\PrevPage $prevPage;
25
    protected DefaultPager\PrevPageDisabled $prevPageDis;
26
    protected DefaultPager\CurrentPage $currentPage;
27
    protected DefaultPager\AnotherPage $anotherPage;
28
    protected DefaultPager\NextPage $nextPage;
29
    protected DefaultPager\NextPageDisabled $nextPageDis;
30
31 5
    public function __construct(
32
        Interfaces\IPositions $positions,
33
        Interfaces\ILink $link,
34
        int $displayPages = Interfaces\IPositions::DEFAULT_DISPLAY_PAGES_COUNT,
35
        ?Interfaces\IPGTranslations $lang = null
36
    )
37
    {
38 5
        $this->positions = $positions;
39 5
        $this->link = $link;
40 5
        $this->displayPagesCount = $displayPages;
41 5
        $this->pager = new DefaultPager\Pager();
42 5
        $this->pager->setKpgLang($lang ?: new Translations());
43 5
        $this->prevPage = new DefaultPager\PrevPage();
44 5
        $this->prevPageDis = new DefaultPager\PrevPageDisabled();
45 5
        $this->currentPage = new DefaultPager\CurrentPage();
46 5
        $this->anotherPage = new DefaultPager\AnotherPage();
47 5
        $this->nextPage = new DefaultPager\NextPage();
48 5
        $this->nextPageDis = new DefaultPager\NextPageDisabled();
49 5
    }
50
51 4
    public function __toString()
52
    {
53 4
        return $this->render();
54
    }
55
56 4
    public function render(bool $showPositions = true): string
57
    {
58 4
        if (!$this->getPositions()->prevPageExists() && !$this->getPositions()->nextPageExists()) {
59 1
            return '';
60
        }
61 3
        $pages = [];
62 3
        foreach ($this->getDisplayPages() as $displayPage) {
63 3
            if ($this->getPositions()->getPager()->getActualPage() == $displayPage) {
64 3
                $pages[] = $this->currentPage->reset()->setData($this->link, $displayPage)->render();
65
            } else {
66 3
                $pages[] = $this->anotherPage->reset()->setData($this->link, $displayPage)->render();
67
            }
68
        }
69
70 3
        $this->pager->setData(
71 3
            $this->getPositions()->prevPageExists() ? $this->prevPage->setData($this->link, $this->getPositions())->render() : $this->prevPageDis->render(),
72 3
            $this->getPositions()->nextPageExists() ? $this->nextPage->setData($this->link, $this->getPositions())->render() : $this->nextPageDis->render(),
73 3
            implode('', $pages),
74 3
            $showPositions ? $this->getPositions() : null
75
        );
76 3
        return $this->pager->render();
77
    }
78
79 1
    public function getPager(): IPager
80
    {
81 1
        return $this->getPositions()->getPager();
82
    }
83
}
84