PageSizePager   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 7
dl 0
loc 85
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A init() 0 10 2
A renderPageSize() 0 10 2
A getFilterSelector() 0 4 1
1
<?php
2
3
namespace yiicod\pagesizepager\widgets;
4
5
use liyunfang\pager\LinkPager;
6
use Yii;
7
use yii\base\Exception;
8
use yii\data\DataProviderInterface;
9
use yii\helpers\Html;
10
use yiicod\pagesizepager\helpers\Pager;
11
use yiicod\pagesizepager\providers\ProviderAbstract;
12
use yiicod\pagesizepager\providers\ProviderInterface;
13
14
/**
15
 * Class PageSizeLinkPager
16
 * Pager for grid with saving pagers in session
17
 *
18
 * @author Orlov Aleksey <[email protected]>
19
 * @author Virchenko Maksim <[email protected]>
20
 *
21
 * @package yiicod\perpager\widgets
22
 */
23
class PageSizePager extends LinkPager
24
{
25
    /**
26
     * Page size list
27
     *
28
     * @var array
29
     */
30
    public $pageSizeList = [10, 20, 30, 50];
31
32
    /**
33
     * Grid id
34
     *
35
     * @var null
36
     */
37
    public $gridIdentifier = null;
38
39
    /**
40
     * pageSize style
41
     */
42
    public $pageSizeOptions = [
43
        'class' => 'form-control',
44
        'style' => 'display: inline-block; vertical-align: top; width: auto; margin: 20px 0;',
45
    ];
46
47
    /**
48
     * Current page size
49
     *
50
     * @var int
51
     */
52
    protected $pageSize;
53
54
    /**
55
     * @var ProviderInterface
56
     */
57
    protected $provider;
58
59
    public function __construct(ProviderInterface $provider, array $config = [])
60
    {
61
        $this->provider = $provider;
62
63
        parent::__construct($config);
64
    }
65
66
    /**
67
     * Run widget
68
     */
69
    public function init()
70
    {
71
        if (null === $this->gridIdentifier) {
72
            throw new Exception('PageSizePager "gridIdentifier" must be set.');
73
        }
74
75
        Yii::$app->session->set(ProviderAbstract::SESSION_PAGER_KEY . $this->gridIdentifier, $this->pagination->pageSizeParam);
76
77
        $this->pageSize = $this->provider->getPageSize($this->gridIdentifier);
78
    }
79
80
    /**
81
     * Render page size
82
     *
83
     * @return string
84
     */
85
    protected function renderPageSize()
86
    {
87
        $pageSizeList = [];
88
89
        foreach ($this->pageSizeList as $value) {
90
            $pageSizeList[$value] = $value;
91
        }
92
93
        return Html::dropDownList($this->pagination->pageSizeParam, $this->pageSize, $pageSizeList, $this->pageSizeOptions);
94
    }
95
96
    /**
97
     * Get filter selector using ActiveDataProvider
98
     *
99
     * @param DataProviderInterface $dataProvider
100
     *
101
     * @return string
102
     */
103
    public static function getFilterSelector(DataProviderInterface $dataProvider): string
104
    {
105
        return "select[name='" . $dataProvider->getPagination()->pageSizeParam . "'],input[name='" . $dataProvider->getPagination()->pageParam . "']";
106
    }
107
}
108