GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — master (#168)
by Simone
05:11 queued 02:38
created

BaseRepository::paginateResults()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 11
rs 9.9666
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Mado\QueryBundle\Repositories;
4
5
use Doctrine\ORM\EntityRepository;
6
use Doctrine\ORM\QueryBuilder;
7
use Hateoas\Representation\Factory\PagerfantaFactory;
8
use Mado\QueryBundle\Objects\MetaDataAdapter;
9
use Mado\QueryBundle\Objects\PagerfantaBuilder;
10
use Mado\QueryBundle\Queries\QueryBuilderFactory;
11
use Mado\QueryBundle\Queries\QueryBuilderOptions;
12
use Mado\QueryBundle\Queries\Options\QueryOptionsBuilder;
13
use Mado\QueryBundle\Services\Pager;
14
use Pagerfanta\Adapter\DoctrineORMAdapter;
15
use Symfony\Component\HttpFoundation\Request;
16
17
/** @codeCoverageIgnore */
18
class BaseRepository extends EntityRepository
19
{
20
    protected $request;
21
22
    protected $useResultCache = false;
23
24
    protected $routeName;
25
26
    protected $currentEntityAlias;
27
28
    protected $embeddedFields;
29
30
    protected $joins = [];
31
32
    protected $queryBuilderFactory;
33
34
    protected $queryOptions;
35
36
    protected $metadata;
37
38
    private $lastQuery;
39
    
40
    private $lastParameters;
41
42
    public function __construct($manager, $class)
43
    {
44
        parent::__construct($manager, $class);
45
46
        $this->metadata = new MetaDataAdapter();
47
        $this->metadata->setClassMetadata($this->getClassMetadata());
48
        $this->metadata->setEntityName($this->getEntityName());
49
50
        $this->queryBuilderFactory = new QueryBuilderFactory($this->getEntityManager());
51
52
        $this->qoBuilder = new QueryOptionsBuilder();
0 ignored issues
show
Bug Best Practice introduced by
The property qoBuilder does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
53
        $entityAlias = $this->metadata->getEntityAlias();
54
        $this->qoBuilder->setEntityAlias($entityAlias);
55
    }
56
57
    public function initFromQueryBuilderOptions(QueryBuilderOptions $options)
58
    {
59
        $this->queryBuilderFactory->createQueryBuilder(
60
            $this->getEntityName(),
61
            $this->metadata->getEntityAlias()
62
        );
63
64
        $this->queryBuilderFactory->loadMetadataAndOptions(
65
            $this->metadata,
66
            $options
67
        );
68
    }
69
70
    public function getQueryBuilderFactory()
71
    {
72
        $this->initFromQueryBuilderOptions($this->queryOptions);
73
74
        return $this->queryBuilderFactory;
75
    }
76
77
    public function useResultCache($bool)
78
    {
79
        $this->useResultCache = $bool;
80
    }
81
82
    public function setRequest(Request $request)
83
    {
84
        return $this->setQueryOptionsFromRequest($request);
85
    }
86
87
    public function setRequestWithFilter(Request $request, $filter)
88
    {
89
        return $this->setQueryOptionsFromRequestWithCustomFilter($request, $filter);
90
    }
91
92
    public function setRequestWithOrFilter(Request $request, $orFilter)
93
    {
94
        return $this->setQueryOptionsFromRequestWithCustomOrFilter($request, $orFilter);
95
    }
96
97
    public function setQueryOptions(QueryBuilderOptions $options)
98
    {
99
        $this->queryOptions = $options;
100
    }
101
102
    public function setQueryOptionsFromRequest(Request $request = null)
103
    {
104
        $this->queryOptions = $this->qoBuilder->builderFromRequest($request);
105
106
        return $this;
107
    }
108
109
    public function setQueryOptionsFromRequestWithCustomFilter(Request $request = null, $filter)
110
    {
111
        $this->queryOptions = $this->qoBuilder->buildFromRequestAndCustomFilter($request, $filter);
0 ignored issues
show
Bug introduced by
It seems like $request can also be of type null; however, parameter $request of Mado\QueryBundle\Queries...equestAndCustomFilter() does only seem to accept Mado\QueryBundle\Queries\Options\Request, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

111
        $this->queryOptions = $this->qoBuilder->buildFromRequestAndCustomFilter(/** @scrutinizer ignore-type */ $request, $filter);
Loading history...
112
113
        return $this;
114
    }
115
116
    public function setQueryOptionsFromRequestWithCustomOrFilter(Request $request = null, $orFilter)
0 ignored issues
show
Unused Code introduced by
The parameter $orFilter is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

116
    public function setQueryOptionsFromRequestWithCustomOrFilter(Request $request = null, /** @scrutinizer ignore-unused */ $orFilter)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
117
    {
118
        $this->queryOptions = $this->qoBuilder->buildForOrFilter($request);
0 ignored issues
show
Bug introduced by
The call to Mado\QueryBundle\Queries...der::buildForOrFilter() has too few arguments starting with orFilter. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

118
        /** @scrutinizer ignore-call */ 
119
        $this->queryOptions = $this->qoBuilder->buildForOrFilter($request);

This check compares calls to functions or methods with their respective definitions. If the call has less arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
Bug introduced by
It seems like $request can also be of type null; however, parameter $request of Mado\QueryBundle\Queries...der::buildForOrFilter() does only seem to accept Mado\QueryBundle\Queries\Options\Request, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

118
        $this->queryOptions = $this->qoBuilder->buildForOrFilter(/** @scrutinizer ignore-type */ $request);
Loading history...
119
120
        return $this;
121
    }
122
123
    public function getRequest()
124
    {
125
        return $this->request;
126
    }
127
128
    public function setRouteName($routeName = '')
129
    {
130
        $this->routeName = $routeName;
131
        return $this;
132
    }
133
134
    public function findAllNoPaginated()
135
    {
136
        $queryBuilderFactory = $this->getQueryBuilderFactory()
137
            ->filter()
138
            ->sort();
139
140
        $doctrineQueryBuilder = $queryBuilderFactory->getQueryBuilder();
141
142
        return $doctrineQueryBuilder->getQuery()->getResult();
143
    }
144
    
145
    public function findAllPaginated()
146
    {
147
        $this->initFromQueryBuilderOptions($this->queryOptions);
148
149
        $this->queryBuilderFactory->filter();
150
        $this->queryBuilderFactory->sort();
151
152
        $queryBuilder = $this->queryBuilderFactory->getQueryBuilder();
153
154
        if ($this->queryOptions->requireJustCount()) {
155
            $metadata = $this->metadata;
156
            $rootEntityAlias = $metadata->getEntityAlias();
157
            $select = 'count(' . $rootEntityAlias . '.id)';
158
159
            $count = $queryBuilder
160
                ->select($select)
161
                ->getQuery()
162
                ->getSingleScalarResult();
163
164
            return [ 'count' => $count ];
165
        }
166
167
        $this->lastQuery = $queryBuilder->getQuery()->getSql();
168
        $this->lastParameters = $queryBuilder->getQuery()->getParameters();
169
170
        return $this->paginateResults($queryBuilder);
171
    }
172
173
    public function getLastQuery()
174
    {
175
        return [
176
            'query' => $this->lastQuery,
177
            'params' =>  $this->lastParameters,
178
        ];
179
    }
180
181
    protected function paginateResults(QueryBuilder $queryBuilder)
182
    {
183
        $ormAdapter = new DoctrineORMAdapter($queryBuilder);
184
        $pagerfantaBuilder = new PagerfantaBuilder(new PagerfantaFactory(), $ormAdapter);
185
        $pager = new Pager();
186
        return $pager->paginateResults(
187
            $this->queryOptions,
188
            $ormAdapter,
189
            $pagerfantaBuilder,
190
            $this->routeName,
191
            $this->useResultCache
192
        );
193
    }
194
195
    protected function getCurrentEntityAlias() : string
196
    {
197
        return $this->currentEntityAlias;
198
    }
199
200
    protected function setCurrentEntityAlias(string $currentEntityAlias)
201
    {
202
        $this->currentEntityAlias = $currentEntityAlias;
203
    }
204
205
    protected function getEmbeddedFields() : array
206
    {
207
        return $this->embeddedFields;
208
    }
209
210
    protected function setEmbeddedFields(array $embeddedFields)
211
    {
212
        $this->embeddedFields = $embeddedFields;
213
    }
214
215
    public function getEntityAlias() : string
216
    {
217
        return $this->metadata->getEntityAlias();
218
    }
219
220
    protected function relationship($queryBuilder)
221
    {
222
        return $queryBuilder;
223
    }
224
225
    public function getQueryBuilderFactoryWithoutInitialization()
226
    {
227
        return $this->queryBuilderFactory;
228
    }
229
}
230