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
Push — master ( dca528...6babe8 )
by Simone
05:37
created

BaseRepository::getRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
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\Exceptions\InvalidFiltersException;
9
use Mado\QueryBundle\Objects\MetaDataAdapter;
10
use Mado\QueryBundle\Objects\PagerfantaBuilder;
11
use Mado\QueryBundle\Queries\QueryBuilderFactory;
12
use Mado\QueryBundle\Queries\QueryBuilderOptions;
13
use Mado\QueryBundle\Services\Pager;
14
use Pagerfanta\Adapter\DoctrineORMAdapter;
15
use Symfony\Component\HttpFoundation\Request;
16
17
class BaseRepository extends EntityRepository
18
{
19
    protected $request;
20
21
    protected $useResultCache = false;
22
23
    protected $routeName;
24
25
    protected $currentEntityAlias;
26
27
    protected $embeddedFields;
28
29
    protected $joins = [];
30
31
    protected $queryBuilderFactory;
32
33
    protected $queryOptions;
34
35
    protected $metadata;
36
37
    public function __construct($manager, $class)
38
    {
39
        parent::__construct($manager, $class);
40
41
        $this->metadata = new MetaDataAdapter();
42
        $this->metadata->setClassMetadata($this->getClassMetadata());
43
        $this->metadata->setEntityName($this->getEntityName());
44
45
        $this->queryBuilderFactory = new QueryBuilderFactory($this->getEntityManager());
46
    }
47
48
    public function initFromQueryBuilderOptions(QueryBuilderOptions $options)
49
    {
50
        $this->queryBuilderFactory->createQueryBuilder(
51
            $this->getEntityName(),
52
            $this->metadata->getEntityAlias()
53
        );
54
55
        $this->queryBuilderFactory->loadMetadataAndOptions(
56
            $this->metadata,
57
            $options
58
        );
59
    }
60
61
    public function getQueryBuilderFactory()
62
    {
63
        $this->initFromQueryBuilderOptions($this->queryOptions);
64
65
        return $this->queryBuilderFactory;
66
    }
67
68
    public function useResultCache($bool)
69
    {
70
        $this->useResultCache = $bool;
71
    }
72
73
    public function setRequest(Request $request)
74
    {
75
        return $this->setQueryOptionsFromRequest($request);
76
    }
77
78
    public function setRequestWithFilter(Request $request, $filter)
79
    {
80
        return $this->setQueryOptionsFromRequestWithCustomFilter($request, $filter);
81
    }
82
83
    public function setRequestWithOrFilter(Request $request, $orFilter)
84
    {
85
        return $this->setQueryOptionsFromRequestWithCustomOrFilter($request, $orFilter);
86
    }
87
88
    public function setQueryOptions(QueryBuilderOptions $options)
89
    {
90
        $this->queryOptions = $options;
91
    }
92
93
    public function setQueryOptionsFromRequest(Request $request = null)
94
    {
95
        $requestAttributes = [];
96
        foreach ($request->attributes->all() as $attributeName => $attributeValue) {
97
            $requestAttributes[$attributeName] = $request->attributes->get(
98
                $attributeName,
99
                $attributeValue
100
            );
101
        }
102
103
        $filters     = $request->query->get('filtering', []);
104
        $orFilters   = $request->query->get('filtering_or', []);
105
        $sorting     = $request->query->get('sorting', []);
106
        $printing    = $request->query->get('printing', []);
107
        $rel         = $request->query->get('rel', '');
108
        $page        = $request->query->get('page', '');
109
        $select      = $request->query->get('select', $this->metadata->getEntityAlias());
110
        $filtering   = $request->query->get('filtering', '');
111
        $limit       = $request->query->get('limit', '');
112
113
        $filterOrCorrected = [];
114
115
        $count = 0;
116
        foreach ($orFilters as $key => $filter) {
117
            if (is_array($filter)) {
118
                foreach ($filter as $keyInternal => $internal) {
119
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
120
                    $count += 1;
121
                }
122
            } else {
123
                $filterOrCorrected[$key] = $filter;
124
            }
125
        }
126
127
        $requestProperties = [
128
            'filtering'   => $filtering,
129
            'orFiltering' => $filterOrCorrected,
130
            'limit'       => $limit,
131
            'page'        => $page,
132
            'filters'     => $filters,
133
            'orFilters'   => $filterOrCorrected,
134
            'sorting'     => $sorting,
135
            'rel'         => $rel,
136
            'printing'    => $printing,
137
            'select'      => $select,
138
        ];
139
140
        $options = array_merge(
141
            $requestAttributes,
142
            $requestProperties
143
        );
144
145
        $this->queryOptions = QueryBuilderOptions::fromArray($options);
146
147
        return $this;
148
    }
149
150
    private function ensureFilterIsValid($filters)
151
    {
152
        if (!is_array($filters)) {
153
154
            $message = "Wrong query string exception: ";
155
            $message .= var_export($filters, true) . "\n";
156
            $message .= "Please check query string should be something like " .
157
                "http://127.0.0.1:8000/?filtering[status]=todo";
158
159
            throw new InvalidFiltersException($message);
160
        }
161
    }
162
163
    public function setQueryOptionsFromRequestWithCustomFilter(Request $request = null, $filter)
164
    {
165
        $filters = $request->query->get('filtering', []);
166
        $orFilters = $request->query->get('filtering_or', []);
167
        $sorting = $request->query->get('sorting', []);
168
        $printing = $request->query->get('printing', []);
169
        $rel = $request->query->get('rel', '');
170
        $page = $request->query->get('page', '');
171
        $select = $request->query->get('select', $this->metadata->getEntityAlias());
172
        $filtering = $request->query->get('filtering', '');
173
        $limit = $request->query->get('limit', '');
174
175
        $this->ensureFilterIsValid($filters);
176
        $filters = array_merge($filters, $filter);
177
178
        $filterOrCorrected = [];
179
180
        $count = 0;
181
        foreach ($orFilters as $key => $filterValue) {
182
            if (is_array($filterValue)) {
183
                foreach ($filterValue as $keyInternal => $internal) {
184
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
185
                    $count += 1;
186
                }
187
            } else {
188
                $filterOrCorrected[$key] = $filterValue;
189
            }
190
        }
191
192
        $this->queryOptions = QueryBuilderOptions::fromArray([
193
            '_route' => $request->attributes->get('_route'),
194
            '_route_params' => $request->attributes->get('_route_params', []),
195
            'id' => $request->attributes->get('id'),
196
            'filtering' => $filtering,
197
            'limit' => $limit,
198
            'page' => $page,
199
            'filters' => $filters,
200
            'orFilters' => $filterOrCorrected,
201
            'sorting' => $sorting,
202
            'rel' => $rel,
203
            'printing' => $printing,
204
            'select' => $select,
205
        ]);
206
207
        return $this;
208
    }
209
210
    public function setQueryOptionsFromRequestWithCustomOrFilter(Request $request = null, $orFilter)
211
    {
212
        $filters = $request->query->get('filtering', []);
213
        $orFilters = $request->query->get('filtering_or', []);
214
        $sorting = $request->query->get('sorting', []);
215
        $printing = $request->query->get('printing', []);
216
        $rel = $request->query->get('rel', '');
217
        $page = $request->query->get('page', '');
218
        $select = $request->query->get('select', $this->metadata->getEntityAlias());
219
        $filtering = $request->query->get('filtering', '');
220
        $limit = $request->query->get('limit', '');
221
222
        $orFilters = array_merge($orFilters, $orFilter);
223
224
        $filterOrCorrected = [];
225
226
        $count = 0;
227
        foreach ($orFilters as $key => $filter) {
228
            if (is_array($filter)) {
229
                foreach ($filter as $keyInternal => $internal) {
230
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
231
                    $count += 1;
232
                }
233
            } else {
234
                $filterOrCorrected[$key] = $filter;
235
            }
236
        }
237
238
        $this->queryOptions = QueryBuilderOptions::fromArray([
239
            '_route' => $request->attributes->get('_route'),
240
            '_route_params' => $request->attributes->get('_route_params', []),
241
            'id' => $request->attributes->get('id'),
242
            'filtering' => $filtering,
243
            'limit' => $limit,
244
            'page' => $page,
245
            'filters' => $filters,
246
            'orFilters' => $filterOrCorrected,
247
            'sorting' => $sorting,
248
            'rel' => $rel,
249
            'printing' => $printing,
250
            'select' => $select,
251
        ]);
252
253
        return $this;
254
    }
255
256
    public function getRequest()
257
    {
258
        return $this->request;
259
    }
260
261
    public function setRouteName($routeName = '')
262
    {
263
        $this->routeName = $routeName;
264
        return $this;
265
    }
266
267
    public function findAllPaginated()
268
    {
269
        $this->initFromQueryBuilderOptions($this->queryOptions);
270
271
        $this->queryBuilderFactory->filter();
272
        $this->queryBuilderFactory->sort();
273
274
        $queryBuilder = $this->queryBuilderFactory->getQueryBuilder();
275
276
        $this->lastQuery = $queryBuilder->getQuery()->getSql();
0 ignored issues
show
Bug Best Practice introduced by
The property lastQuery does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
277
        $this->lastParameters = $queryBuilder->getQuery()->getParameters();
0 ignored issues
show
Bug Best Practice introduced by
The property lastParameters does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
278
279
        return $this->paginateResults($queryBuilder);
280
    }
281
282
    public function getLastQuery()
283
    {
284
        return [
285
            'query' => $this->lastQuery,
286
            'params' =>  $this->lastParameters,
287
        ];
288
    }
289
290
    protected function paginateResults(QueryBuilder $queryBuilder)
291
    {
292
        $ormAdapter = new DoctrineORMAdapter($queryBuilder);
293
        $pagerfantaBuilder = new PagerfantaBuilder(new PagerfantaFactory(), $ormAdapter);
294
        $pager = new Pager();
295
        return $pager->paginateResults(
296
            $this->queryOptions,
297
            $ormAdapter,
298
            $pagerfantaBuilder,
299
            $this->routeName,
300
            $this->useResultCache
301
        );
302
    }
303
304
    protected function getCurrentEntityAlias() : string
305
    {
306
        return $this->currentEntityAlias;
307
    }
308
309
    protected function setCurrentEntityAlias(string $currentEntityAlias)
310
    {
311
        $this->currentEntityAlias = $currentEntityAlias;
312
    }
313
314
    protected function getEmbeddedFields() : array
315
    {
316
        return $this->embeddedFields;
317
    }
318
319
    protected function setEmbeddedFields(array $embeddedFields)
320
    {
321
        $this->embeddedFields = $embeddedFields;
322
    }
323
324
    public function getEntityAlias() : string
325
    {
326
        return $this->metadata->getEntityAlias();
327
    }
328
329
    protected function relationship($queryBuilder)
330
    {
331
        return $queryBuilder;
332
    }
333
334
    public function getQueryBuilderFactoryWithoutInitialization()
335
    {
336
        return $this->queryBuilderFactory;
337
    }
338
}
339