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 — 2.2 (#113)
by Simone
07:25 queued 03:43
created

BaseRepository::initFromQueryBuilderOptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 0
cts 6
cp 0
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Mado\QueryBundle\Repositories;
4
5
use Doctrine\ORM\EntityRepository;
6
use Hateoas\Configuration\Route;
0 ignored issues
show
Bug introduced by
The type Hateoas\Configuration\Route was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
7
use Hateoas\Representation\Factory\PagerfantaFactory;
0 ignored issues
show
Bug introduced by
The type Hateoas\Representation\Factory\PagerfantaFactory was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use Mado\QueryBundle\Objects\MetaDataAdapter;
9
use Mado\QueryBundle\Queries\QueryBuilderFactory;
10
use Mado\QueryBundle\Queries\QueryBuilderOptions;
11
use Pagerfanta\Adapter\DoctrineORMAdapter;
12
use Pagerfanta\Pagerfanta;
13
use Symfony\Component\HttpFoundation\Request;
14
15
class BaseRepository extends EntityRepository
16
{
17
    protected $request;
18
19
    protected $use_result_cache = false;
20
21
    protected $route_name;
22
23
    protected $currentEntityAlias;
24
25
    protected $embeddedFields;
26
27
    protected $joins = [];
28
29
    protected $queryBuilderFactory;
30
31
    protected $queryOptions;
32
33
    protected $metadata;
34
35 2
    public function __construct($manager, $classMetadata)
36
    {
37 2
        parent::__construct($manager, $classMetadata);
38
39 2
        $this->metadata = $this(new MetaDataAdapter(), $this);
40
41 2
        $this->queryBuilderFactory = new QueryBuilderFactory(
42 2
            $this->getEntityManager()
43
        );
44 2
    }
45
46
    /** @since version 2.2 */
47 2
    public function __invoke(
48
        MetaDataAdapter $metadata,
49
        BaseRepository $repository
50
    ) {
51 2
        $metadata->setClassMetadata($repository->getClassMetadata());
52 2
        $metadata->setEntityName($repository->getEntityName());
53
54 2
        return $metadata;
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 1
    public function getQueryBuilderFactory()
71
    {
72 1
        if (!$this->queryOptions) {
73 1
            throw new \RuntimeException(
74 1
                'Oops! QueryBuilderOptions is missing'
75
            );
76
        }
77
78
        $this->initFromQueryBuilderOptions($this->queryOptions);
79
80
        return $this->queryBuilderFactory;
81
    }
82
83
    public function useResultCache($bool)
84
    {
85
        $this->use_result_cache = $bool;
86
    }
87
88
    public function setRequest(Request $request)
89
    {
90
        return $this->setQueryOptionsFromRequest($request);
91
    }
92
93
    public function setRequestWithFilter(Request $request, $filter)
94
    {
95
        return $this->setQueryOptionsFromRequestWithCustomFilter($request, $filter);
96
    }
97
98
    public function setRequestWithOrFilter(Request $request, $orFilter)
99
    {
100
        return $this->setQueryOptionsFromRequestWithCustomOrFilter($request, $orFilter);
101
    }
102
103
    public function setQueryOptions(QueryBuilderOptions $options)
104
    {
105
        $this->queryOptions = $options;
106
    }
107
108
    public function setQueryOptionsFromRequest(Request $request = null)
109
    {
110
        $requestAttributes = [];
111
        foreach ($request->attributes->all() as $attributeName => $attributeValue) {
112
            $requestAttributes[$attributeName] = $request->attributes->get(
113
                $attributeName,
114
                $attributeValue
115
            );
116
        }
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
        $pageLength  = $request->query->get('limit', 666);
0 ignored issues
show
Unused Code introduced by
The assignment to $pageLength is dead and can be removed.
Loading history...
126
        $filtering   = $request->query->get('filtering', '');
127
        $limit       = $request->query->get('limit', '');
128
129
        $filterOrCorrected = [];
130
131
        $count = 0;
132
        foreach ($orFilters as $key => $filter) {
133
            if (is_array($filter)) {
134
                foreach ($filter as $keyInternal => $internal) {
135
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
136
                    $count = $count + 1;
137
                }
138
            } else {
139
                $filterOrCorrected[$key] = $filter;
140
            }
141
        }
142
143
        $requestProperties = [
144
            'filtering'   => $filtering,
145
            'orFiltering' => $filterOrCorrected,
146
            'limit'       => $limit,
147
            'page'        => $page,
148
            'filters'     => $filters,
149
            'orFilters'   => $filterOrCorrected,
150
            'sorting'     => $sorting,
151
            'rel'         => $rel,
152
            'printing'    => $printing,
153
            'select'      => $select,
154
        ];
155
156
        $options = array_merge(
157
            $requestAttributes,
158
            $requestProperties
159
        );
160
161
        $this->queryOptions = QueryBuilderOptions::fromArray($options);
162
163
        return $this;
164
    }
165
166
    public function setQueryOptionsFromRequestWithCustomFilter(Request $request = null, $filter)
167
    {
168
        $filters = $request->query->get('filtering', []);
169
        $orFilters = $request->query->get('filtering_or', []);
170
        $sorting = $request->query->get('sorting', []);
171
        $printing = $request->query->get('printing', []);
172
        $rel = $request->query->get('rel', '');
173
        $page = $request->query->get('page', '');
174
        $select = $request->query->get('select', $this->metadata->getEntityAlias());
175
        $pageLength = $request->query->get('limit', 666);
0 ignored issues
show
Unused Code introduced by
The assignment to $pageLength is dead and can be removed.
Loading history...
176
        $filtering = $request->query->get('filtering', '');
177
        $limit = $request->query->get('limit', '');
178
179
        $filters = array_merge($filters, $filter);
180
181
        $filterOrCorrected = [];
182
183
        $count = 0;
184
        foreach ($orFilters as $key => $filter) {
185
            if (is_array($filter)) {
186
                foreach ($filter as $keyInternal => $internal) {
187
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
188
                    $count = $count + 1;
189
                }
190
            } else {
191
                $filterOrCorrected[$key] = $filter;
192
            }
193
        }
194
195
        $this->queryOptions = QueryBuilderOptions::fromArray([
196
            '_route' => $request->attributes->get('_route'),
197
            'customer_id' => $request->attributes->get('customer_id'),
198
            'id' => $request->attributes->get('id'),
199
            'filtering' => $filtering,
200
            'limit' => $limit,
201
            'page' => $page,
202
            'filters' => $filters,
203
            'orFilters' => $filterOrCorrected,
204
            'sorting' => $sorting,
205
            'rel' => $rel,
206
            'printing' => $printing,
207
            'select' => $select,
208
        ]);
209
210
        return $this;
211
    }
212
213
    public function setQueryOptionsFromRequestWithCustomOrFilter(Request $request = null, $orFilter)
214
    {
215
        $filters = $request->query->get('filtering', []);
216
        $orFilters = $request->query->get('filtering_or', []);
217
        $sorting = $request->query->get('sorting', []);
218
        $printing = $request->query->get('printing', []);
219
        $rel = $request->query->get('rel', '');
220
        $page = $request->query->get('page', '');
221
        $select = $request->query->get('select', $this->metadata->getEntityAlias());
222
        $pageLength = $request->query->get('limit', 666);
0 ignored issues
show
Unused Code introduced by
The assignment to $pageLength is dead and can be removed.
Loading history...
223
        $filtering = $request->query->get('filtering', '');
224
        $limit = $request->query->get('limit', '');
225
226
        $orFilters = array_merge($orFilters, $orFilter);
227
228
        $filterOrCorrected = [];
229
230
        $count = 0;
231
        foreach ($orFilters as $key => $filter) {
232
            if (is_array($filter)) {
233
                foreach ($filter as $keyInternal => $internal) {
234
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
235
                    $count = $count + 1;
236
                }
237
            } else {
238
                $filterOrCorrected[$key] = $filter;
239
            }
240
        }
241
242
        $this->queryOptions = QueryBuilderOptions::fromArray([
243
            '_route' => $request->attributes->get('_route'),
244
            'customer_id' => $request->attributes->get('customer_id'),
245
            'id' => $request->attributes->get('id'),
246
            'filtering' => $filtering,
247
            'limit' => $limit,
248
            'page' => $page,
249
            'filters' => $filters,
250
            'orFilters' => $filterOrCorrected,
251
            'sorting' => $sorting,
252
            'rel' => $rel,
253
            'printing' => $printing,
254
            'select' => $select,
255
        ]);
256
257
        return $this;
258
    }
259
260
    public function getRequest()
261
    {
262
        return $this->request;
263
    }
264
265
    public function setRouteName($route_name = '')
266
    {
267
        $this->route_name = $route_name;
268
        return $this;
269
    }
270
271
    public function findAllPaginated()
272
    {
273
        $this->initFromQueryBuilderOptions($this->queryOptions);
274
275
        $this->queryBuilderFactory->filter();
276
        $this->queryBuilderFactory->sort();
277
278
        return $this->paginateResults($this->queryBuilderFactory->getQueryBuilder());
279
    }
280
281
    protected function paginateResults(
282
        \Doctrine\ORM\QueryBuilder $queryBuilder
283
    ) {
284
        $limit = $this->queryOptions->get('limit', 10);
285
        $page = $this->queryOptions->get('page', 1);
286
287
288
        $pagerAdapter = new DoctrineORMAdapter($queryBuilder);
289
290
        $query = $pagerAdapter->getQuery();
291
        if (isset($this->use_result_cache) and $this->use_result_cache) {
292
            $query->useResultCache(true, 600);
293
        }
294
295
        $pager = new Pagerfanta($pagerAdapter);
296
        $pager->setNormalizeOutOfRangePages(true);
297
        $pager->setMaxPerPage($limit);
298
        $pager->setCurrentPage($page);
299
300
        $pagerFactory = new PagerfantaFactory();
301
302
        $router = $this->createRouter();
303
304
        $results = $pagerFactory->createRepresentation($pager, $router);
305
306
        return $results;
307
    }
308
309
    protected function customQueryStringValues()
310
    {
311
        return [];
312
    }
313
314
    protected function createRouter()
315
    {
316
        $request = $this->getRequest();
0 ignored issues
show
Unused Code introduced by
The assignment to $request is dead and can be removed.
Loading history...
317
        $params = [];
318
319
        $list = array_merge([
320
            'filtering',
321
            'limit',
322
            'page',
323
            'sorting',
324
        ], $this->customQueryStringValues());
325
326
        foreach ($list as $itemKey => $itemValue) {
327
            $params[$itemValue] = $this->queryOptions->get($itemValue);
328
        }
329
330
        if (!isset($this->route_name)) {
331
            $this->route_name = $this->queryOptions->get('_route');
332
        }
333
334
        return new Route($this->route_name, $params);
335
    }
336
337
    protected function getCurrentEntityAlias() : string
338
    {
339
        return $this->currentEntityAlias;
340
    }
341
342
    protected function setCurrentEntityAlias(string $currentEntityAlias) 
343
    {
344
        $this->currentEntityAlias = $currentEntityAlias;
345
    }
346
347
    protected function getEmbeddedFields() : array
348
    {
349
        return $this->embeddedFields;
350
    }
351
352
    protected function setEmbeddedFields(array $embeddedFields) 
353
    {
354
        $this->embeddedFields = $embeddedFields;
355
    }
356
357
    public function getEntityAlias() : string
358
    {
359
        return $this->metadata->getEntityAlias();
360
    }
361
362
    protected function relationship($queryBuilder)
363
    {
364
        return $queryBuilder;
365
    }
366
367
    public function getQueryBuilderFactoryWithoutInitialization()
368
    {
369
        return $this->queryBuilderFactory;
370
    }
371
}
372