1 | <?php |
||
18 | class AuraSqlQueryPager implements AuraSqlQueryPagerInterface, \ArrayAccess |
||
19 | { |
||
20 | private $pdo; |
||
21 | |||
22 | /** |
||
23 | * @var ViewInterface |
||
24 | */ |
||
25 | private $view; |
||
26 | |||
27 | /** |
||
28 | * @var RouteGeneratorInterface |
||
29 | */ |
||
30 | private $routeGenerator; |
||
31 | |||
32 | /** |
||
33 | * @var array |
||
34 | */ |
||
35 | private $viewOptions; |
||
36 | |||
37 | /** |
||
38 | * @var SelectInterface |
||
39 | */ |
||
40 | private $select; |
||
41 | |||
42 | /** |
||
43 | * @var int |
||
44 | */ |
||
45 | private $paging; |
||
46 | |||
47 | /** |
||
48 | * @param ViewInterface $view |
||
49 | * @param array $viewOptions |
||
50 | * |
||
51 | * @PagerViewOption("viewOptions") |
||
52 | */ |
||
53 | 21 | public function __construct(ViewInterface $view, array $viewOptions) |
|
54 | { |
||
55 | 21 | $this->view = $view; |
|
56 | 21 | $this->viewOptions = $viewOptions; |
|
57 | 21 | } |
|
58 | |||
59 | /** |
||
60 | * {@inheritdoc} |
||
61 | */ |
||
62 | 6 | public function init(ExtendedPdoInterface $pdo, SelectInterface $select, $paging, RouteGeneratorInterface $routeGenerator) |
|
63 | { |
||
64 | 6 | $this->pdo = $pdo; |
|
65 | 6 | $this->select = $select; |
|
66 | 6 | $this->paging = $paging; |
|
67 | 6 | $this->routeGenerator = $routeGenerator; |
|
68 | 6 | } |
|
69 | |||
70 | /** |
||
71 | * @inheritDoc |
||
72 | */ |
||
73 | 12 | public function offsetGet($page) |
|
74 | { |
||
75 | 12 | if (! $this->routeGenerator instanceof RouteGeneratorInterface) { |
|
76 | 3 | throw new NotInitialized(); |
|
77 | } |
||
78 | |||
79 | 9 | $countQueryBuilderModifier = function (SelectInterface $select) { |
|
80 | 9 | if (!$select instanceof Select) { |
|
81 | throw new NotInitialized(); |
||
82 | } |
||
83 | 9 | foreach (array_keys($select->getCols()) as $key) { |
|
84 | 9 | $select->removeCol($key); |
|
85 | 6 | } |
|
86 | 9 | return $select->cols(['COUNT(*) AS total_results'])->limit(1); |
|
87 | 9 | }; |
|
88 | 9 | $pagerfanta = new Pagerfanta(new AuraSqlQueryAdapter($this->pdo, $this->select, $countQueryBuilderModifier)); |
|
|
|||
89 | 9 | $pagerfanta->setCurrentPage($page); |
|
90 | 9 | $pagerfanta->setMaxPerPage($this->paging); |
|
91 | |||
92 | 9 | $pager = new Page($pagerfanta, $this->routeGenerator, $this->view, $this->viewOptions); |
|
93 | 9 | $pager->maxPerPage = $pagerfanta->getMaxPerPage(); |
|
94 | 9 | $pager->current = $pagerfanta->getCurrentPage(); |
|
95 | 9 | $pager->hasNext = $pagerfanta->hasNextPage(); |
|
96 | 9 | $pager->hasPrevious = $pagerfanta->hasPreviousPage(); |
|
97 | 9 | $pager->data = $pagerfanta->getCurrentPageResults(); |
|
98 | 9 | $pager->total = $pagerfanta->getNbResults(); |
|
99 | |||
100 | 9 | return $pager; |
|
101 | } |
||
102 | |||
103 | /** |
||
104 | * @inheritDoc |
||
105 | */ |
||
106 | 3 | public function offsetExists($offset) |
|
110 | |||
111 | /** |
||
112 | * @inheritDoc |
||
113 | */ |
||
114 | 3 | public function offsetSet($offset, $value) |
|
118 | |||
119 | /** |
||
120 | * @inheritDoc |
||
121 | */ |
||
122 | 3 | public function offsetUnset($offset) |
|
126 | } |
||
127 |
This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.
Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.