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:05 queued 02:28
created

BaseRepository::setQueryOptionsFromRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
rs 10
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)
117
    {
118
        $filters = $request->query->get('filtering', []);
119
        $orFilters = $request->query->get('filtering_or', []);
120
        $sorting = $request->query->get('sorting', []);
121
        $printing = $request->query->get('printing', []);
122
        $rel = $request->query->get('rel', '');
123
        $page = $request->query->get('page', '');
124
        $select = $request->query->get('select', $this->metadata->getEntityAlias());
125
        $filtering = $request->query->get('filtering', '');
126
        $limit = $request->query->get('limit', '');
127
128
        $orFilters = array_merge($orFilters, $orFilter);
129
130
        $filterOrCorrected = [];
131
132
        $count = 0;
133
        foreach ($orFilters as $key => $filter) {
134
            if (is_array($filter)) {
135
                foreach ($filter as $keyInternal => $internal) {
136
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
137
                    $count += 1;
138
                }
139
            } else {
140
                $filterOrCorrected[$key] = $filter;
141
            }
142
        }
143
144
        $this->queryOptions = QueryBuilderOptions::fromArray([
145
            '_route' => $request->attributes->get('_route'),
146
            '_route_params' => $request->attributes->get('_route_params', []),
147
            'id' => $request->attributes->get('id'),
148
            'filtering' => $filtering,
149
            'limit' => $limit,
150
            'page' => $page,
151
            'filters' => $filters,
152
            'orFilters' => $filterOrCorrected,
153
            'sorting' => $sorting,
154
            'rel' => $rel,
155
            'printing' => $printing,
156
            'select' => $select,
157
        ]);
158
159
        return $this;
160
    }
161
162
    public function getRequest()
163
    {
164
        return $this->request;
165
    }
166
167
    public function setRouteName($routeName = '')
168
    {
169
        $this->routeName = $routeName;
170
        return $this;
171
    }
172
173
    public function findAllNoPaginated()
174
    {
175
        $queryBuilderFactory = $this->getQueryBuilderFactory()
176
            ->filter()
177
            ->sort();
178
179
        $doctrineQueryBuilder = $queryBuilderFactory->getQueryBuilder();
180
181
        return $doctrineQueryBuilder->getQuery()->getResult();
182
    }
183
    
184
    public function findAllPaginated()
185
    {
186
        $this->initFromQueryBuilderOptions($this->queryOptions);
187
188
        $this->queryBuilderFactory->filter();
189
        $this->queryBuilderFactory->sort();
190
191
        $queryBuilder = $this->queryBuilderFactory->getQueryBuilder();
192
193
        if ($this->queryOptions->requireJustCount()) {
194
            $metadata = $this->metadata;
195
            $rootEntityAlias = $metadata->getEntityAlias();
196
            $select = 'count(' . $rootEntityAlias . '.id)';
197
198
            $count = $queryBuilder
199
                ->select($select)
200
                ->getQuery()
201
                ->getSingleScalarResult();
202
203
            return [ 'count' => $count ];
204
        }
205
206
        $this->lastQuery = $queryBuilder->getQuery()->getSql();
207
        $this->lastParameters = $queryBuilder->getQuery()->getParameters();
208
209
        return $this->paginateResults($queryBuilder);
210
    }
211
212
    public function getLastQuery()
213
    {
214
        return [
215
            'query' => $this->lastQuery,
216
            'params' =>  $this->lastParameters,
217
        ];
218
    }
219
220
    protected function paginateResults(QueryBuilder $queryBuilder)
221
    {
222
        $ormAdapter = new DoctrineORMAdapter($queryBuilder);
223
        $pagerfantaBuilder = new PagerfantaBuilder(new PagerfantaFactory(), $ormAdapter);
224
        $pager = new Pager();
225
        return $pager->paginateResults(
226
            $this->queryOptions,
227
            $ormAdapter,
228
            $pagerfantaBuilder,
229
            $this->routeName,
230
            $this->useResultCache
231
        );
232
    }
233
234
    protected function getCurrentEntityAlias() : string
235
    {
236
        return $this->currentEntityAlias;
237
    }
238
239
    protected function setCurrentEntityAlias(string $currentEntityAlias)
240
    {
241
        $this->currentEntityAlias = $currentEntityAlias;
242
    }
243
244
    protected function getEmbeddedFields() : array
245
    {
246
        return $this->embeddedFields;
247
    }
248
249
    protected function setEmbeddedFields(array $embeddedFields)
250
    {
251
        $this->embeddedFields = $embeddedFields;
252
    }
253
254
    public function getEntityAlias() : string
255
    {
256
        return $this->metadata->getEntityAlias();
257
    }
258
259
    protected function relationship($queryBuilder)
260
    {
261
        return $queryBuilder;
262
    }
263
264
    public function getQueryBuilderFactoryWithoutInitialization()
265
    {
266
        return $this->queryBuilderFactory;
267
    }
268
}
269