ServicePaginatorTrait::paginate()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 28
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 3.0123

Importance

Changes 0
Metric Value
cc 3
eloc 17
nc 3
nop 3
dl 0
loc 28
ccs 16
cts 18
cp 0.8889
crap 3.0123
rs 9.7
c 0
b 0
f 0
1
<?php
2
/**
3
 * Copyright (c) Florian Krämer
4
 *
5
 * Licensed under The MIT License
6
 * For full copyright and license information, please see the LICENSE.txt
7
 * Redistributions of files must retain the above copyright notice.
8
 *
9
 * @copyright     Copyright (c) Florian Krämer
10
 * @link          https://github.com/burzum/cakephp-service-layer
11
 * @since         1.0.0
12
 * @license       https://opensource.org/licenses/mit-license.php MIT License
13
 */
14
declare(strict_types=1);
15
16
namespace Burzum\CakeServiceLayer\Service;
17
18
use Cake\Datasource\Paging\NumericPaginator;
19
use Cake\Datasource\Paging\PaginatorInterface;
20
use Cake\Event\EventDispatcherTrait;
21
use Cake\Http\ServerRequest;
22
23
/**
24
 * ServicePaginatorTrait
25
 */
26
trait ServicePaginatorTrait
27
{
28
    use EventDispatcherTrait;
29
30
    /**
31
     * Paginator instance
32
     *
33
     * @var \Cake\Datasource\Paging\PaginatorInterface
34
     */
35
    protected $_paginator;
36
37
    /**
38
     * Default paginator class
39
     *
40
     * @phpstan-var class-string<\Cake\Datasource\Paging\PaginatorInterface>
41
     * @var string
42
     */
43
    protected $_defaultPaginatorClass = NumericPaginator::class;
44
45
    /**
46
     * Set paginator instance.
47
     *
48
     * @param \Cake\Datasource\Paging\PaginatorInterface $paginator Paginator instance.
49
     * @return static
50
     */
51 2
    public function setPaginator(PaginatorInterface $paginator)
52
    {
53 2
        $this->_paginator = $paginator;
54
55 2
        return $this;
56
    }
57
58
    /**
59
     * Get paginator instance.
60
     *
61
     * @return \Cake\Datasource\Paging\PaginatorInterface
62
     */
63 2
    public function getPaginator()
64
    {
65 2
        if ($this->_paginator === null) {
66 2
            $class = $this->_defaultPaginatorClass;
67 2
            $this->setPaginator(new $class());
68
        }
69
70 2
        return $this->_paginator;
71
    }
72
73
    /**
74
     * Paginate
75
     *
76
     * @param \Cake\Datasource\RepositoryInterface|\Cake\Datasource\QueryInterface $object The table or query to paginate.
77
     * @param array $params Request params
78
     * @param array $settings The settings/configuration used for pagination.
79
     * @return \Cake\Datasource\ResultSetInterface Query results
80
     */
81 2
    public function paginate($object, array $params = [], array $settings = [])
82
    {
83 2
        $event = $this->dispatchEvent('Service.beforePaginate', compact(
84 2
            'object',
85 2
            'params',
86 2
            'settings'
87
        ));
88
89 2
        if ($event->isStopped()) {
90
            return $event->getResult();
91
        }
92
93 2
        $result = $this->getPaginator()->paginate($object, $params, $settings);
94 2
        $pagingParams = $this->getPaginator()->getPagingParams();
95
96 2
        $event = $this->dispatchEvent('Service.afterPaginate', compact(
97 2
            'object',
98 2
            'params',
99 2
            'settings',
100 2
            'result',
101 2
            'pagingParams'
102
        ));
103
104 2
        if ($event->getResult() !== null) {
105
            return $event->getResult();
106
        }
107
108 2
        return $result;
109
    }
110
111
    /**
112
     * Adds the paginator params to the request objects params
113
     *
114
     * @param \Cake\Http\ServerRequest $request Request object
115
     * @return \Cake\Http\ServerRequest
116
     */
117 2
    public function addPagingParamToRequest(ServerRequest $request): ServerRequest
118
    {
119 2
        $paging = $this->getPaginator()->getPagingParams() + $request->getAttribute('paging', []);
120
121 2
        return $request->withAttribute('paging', $paging);
122
    }
123
}
124