PageLink   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
eloc 21
c 0
b 0
f 0
dl 0
loc 39
rs 10
ccs 20
cts 20
cp 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 2
A getPageNumber() 0 3 1
A setPageNumber() 0 7 3
A getPageLink() 0 4 1
1
<?php
2
3
namespace kalanis\kw_table\core\Connector;
4
5
6
use kalanis\kw_address_handler\Handler;
7
use kalanis\kw_address_handler\SingleVariable;
8
use kalanis\kw_pager\Interfaces\IPager;
9
use kalanis\kw_paging\Interfaces\ILink;
10
use kalanis\kw_paging\Positions;
11
12
13
/**
14
 * Class PageLink
15
 * @package kalanis\kw_table\core\Connector
16
 * Update links with data from pager.
17
 *
18
 * Example:
19
20
$inputs = new kalanis\kw_input\Interfaces\Inputs();
21
22
...
23
24
$pager = new BasicPager();
25
$pager->setMaxResults(32)->setLimit(10)->setActualPage(1);
26
$urlLink = new PageLink(new Handler($inputs), $pager, 'paging');
27
28
...
29
30
$urlLink->setPageNumber(6);
31
echo $urlLink->getPageLink(); // got page 1 -> six is too much for this
32
33
...
34
35
$urlLink->setPageNumber(3);
36
echo $urlLink->getPageLink(); // got page 3 -> okay
37
38
 */
39
class PageLink implements ILink
40
{
41
    protected const DEFAULT_VAR_NAME = 'page';
42
43
    protected Handler $urlHandler;
44
    protected SingleVariable $urlVariable;
45
    protected IPager $pager;
46
    protected int $page = 0;
47
    protected string $varName = self::DEFAULT_VAR_NAME;
48
49 3
    public function __construct(Handler $urlHandler, IPager $pager, string $variableName = self::DEFAULT_VAR_NAME)
50
    {
51 3
        $this->urlHandler = $urlHandler;
52 3
        $this->urlVariable = new SingleVariable($urlHandler->getParams());
53 3
        $this->urlVariable->setVariableName($variableName);
54 3
        $this->page = intval($this->urlVariable->getVariableValue() ?: Positions::FIRST_PAGE);
55 3
        $this->urlVariable->setVariableValue(strval($this->page));
56 3
        $this->pager = $pager;
57 3
    }
58
59 2
    public function setPageNumber(int $page): void
60
    {
61 2
        $this->page = $this->pager->pageExists($page)
62 2
                ? $page
63 1
                : ($page > $this->pager->getPagesCount()
64 1
                    ? max($this->pager->getPagesCount(), Positions::FIRST_PAGE)
65 1
                    : Positions::FIRST_PAGE)
66
        ;
67 2
    }
68
69 3
    public function getPageNumber(): int
70
    {
71 3
        return intval($this->page);
72
    }
73
74 2
    public function getPageLink(): string
75
    {
76 2
        $this->urlVariable->setVariableValue(strval($this->page));
77 2
        return strval($this->urlHandler->getAddress());
78
    }
79
}
80