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 — refactoring/additional-filters... ( 06142a )
by Simone
03:48
created

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