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 (#106)
by Alessandro
05:27 queued 02:37
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 Doctrine\ORM\QueryBuilder;
7
use Hateoas\Representation\Factory\PagerfantaFactory;
8
use Mado\QueryBundle\Queries\QueryBuilderFactory;
9
use Mado\QueryBundle\Queries\QueryBuilderOptions;
10
use Mado\QueryBundle\Services\Router;
11
use Pagerfanta\Adapter\DoctrineORMAdapter;
12
use Pagerfanta\Pagerfanta;
13
use Symfony\Component\HttpFoundation\Request;
14
15
class BaseRepository extends EntityRepository
16
{
17
    protected $fields;
18
19
    protected $request;
20
21
    protected $use_result_cache = false;
22
23
    protected $entityAlias;
24
25
    protected $route_name;
26
27
    protected $currentEntityAlias;
28
29
    protected $embeddedFields;
30
31
    protected $joins = [];
32
33
    protected $queryBuilderFactory;
34
35
    protected $queryOptions;
36
37
    public function __construct($manager, $class)
38
    {
39
        parent::__construct($manager, $class);
40
41
        $this->fields = array_keys($this->getClassMetadata()->fieldMappings);
42
43
        $entityName = explode('\\', strtolower($this->getEntityName()));
44
        $entityName = $entityName[count($entityName) - 1];
45
        $entityAlias = $entityName[0];
46
        $this->entityAlias = $entityAlias;
47
48
        $this->queryBuilderFactory = new QueryBuilderFactory($this->getEntityManager());
49
    }
50
51
    public function initFromQueryBuilderOptions(QueryBuilderOptions $options)
52
    {
53
        $this->queryBuilderFactory->createQueryBuilder($this->getEntityName(), $this->entityAlias);
54
55
        $fieldMappings = $this->getClassMetadata()->fieldMappings;
56
        $this->fields = array_keys($fieldMappings);
57
58
        $this->queryBuilderFactory->setFields($this->fields ?? []);
59
        $this->queryBuilderFactory->setAndFilters($options->getAndFilters());
60
        $this->queryBuilderFactory->setOrFilters($options->getOrFilters());
61
        $this->queryBuilderFactory->setSorting($options->getSorting());
62
        $this->queryBuilderFactory->setRel($options->getRel());
63
        $this->queryBuilderFactory->setPrinting($options->getPrinting());
64
        $this->queryBuilderFactory->setSelect($options->getSelect());
65
    }
66
67
    public function getQueryBuilderFactory()
68
    {
69
        $this->initFromQueryBuilderOptions($this->queryOptions);
70
71
        return $this->queryBuilderFactory;
72
    }
73
74
    public function useResultCache($bool)
75
    {
76
        $this->use_result_cache = $bool;
77
    }
78
79
    public function setRequest(Request $request)
80
    {
81
        return $this->setQueryOptionsFromRequest($request);
82
    }
83
84
    public function setRequestWithFilter(Request $request, $filter)
85
    {
86
        return $this->setQueryOptionsFromRequestWithCustomFilter($request, $filter);
87
    }
88
89
    public function setRequestWithOrFilter(Request $request, $orFilter)
90
    {
91
        return $this->setQueryOptionsFromRequestWithCustomOrFilter($request, $orFilter);
92
    }
93
94
    public function setQueryOptions(QueryBuilderOptions $options)
95
    {
96
        $this->queryOptions = $options;
97
    }
98
99
    public function setQueryOptionsFromRequest(Request $request = null)
100
    {
101
        $requestAttributes = [];
102
        foreach ($request->attributes->all() as $attributeName => $attributeValue) {
103
            $requestAttributes[$attributeName] = $request->attributes->get(
104
                $attributeName,
105
                $attributeValue
106
            );
107
        }
108
109
        $filters     = $request->query->get('filtering', []);
110
        $orFilters   = $request->query->get('filtering_or', []);
111
        $sorting     = $request->query->get('sorting', []);
112
        $printing    = $request->query->get('printing', []);
113
        $rel         = $request->query->get('rel', '');
114
        $page        = $request->query->get('page', '');
115
        $select      = $request->query->get('select', $this->entityAlias);
116
        $filtering   = $request->query->get('filtering', '');
117
        $limit       = $request->query->get('limit', '');
118
119
        $filterOrCorrected = [];
120
121
        $count = 0;
122
        foreach ($orFilters as $key => $filter) {
123
            if (is_array($filter)) {
124
                foreach ($filter as $keyInternal => $internal) {
125
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
126
                    $count += 1;
127
                }
128
            } else {
129
                $filterOrCorrected[$key] = $filter;
130
            }
131
        }
132
133
        $requestProperties = [
134
            'filtering'   => $filtering,
135
            'orFiltering' => $filterOrCorrected,
136
            'limit'       => $limit,
137
            'page'        => $page,
138
            'filters'     => $filters,
139
            'orFilters'   => $filterOrCorrected,
140
            'sorting'     => $sorting,
141
            'rel'         => $rel,
142
            'printing'    => $printing,
143
            'select'      => $select,
144
        ];
145
146
        $options = array_merge(
147
            $requestAttributes,
148
            $requestProperties
149
        );
150
151
        $this->queryOptions = QueryBuilderOptions::fromArray($options);
152
153
        return $this;
154
    }
155
156
    public function setQueryOptionsFromRequestWithCustomFilter(Request $request = null, $filter)
157
    {
158
        $filters = $request->query->get('filtering', []);
159
        $orFilters = $request->query->get('filtering_or', []);
160
        $sorting = $request->query->get('sorting', []);
161
        $printing = $request->query->get('printing', []);
162
        $rel = $request->query->get('rel', '');
163
        $page = $request->query->get('page', '');
164
        $select = $request->query->get('select', $this->entityAlias);
165
        $filtering = $request->query->get('filtering', '');
166
        $limit = $request->query->get('limit', '');
167
168
        $filters = array_merge($filters, $filter);
169
170
        $filterOrCorrected = [];
171
172
        $count = 0;
173
        foreach ($orFilters as $key => $filterValue) {
174
            if (is_array($filterValue)) {
175
                foreach ($filterValue as $keyInternal => $internal) {
176
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
177
                    $count += 1;
178
                }
179
            } else {
180
                $filterOrCorrected[$key] = $filterValue;
181
            }
182
        }
183
184
        $this->queryOptions = QueryBuilderOptions::fromArray([
185
            '_route' => $request->attributes->get('_route'),
186
            '_route_params' => $request->attributes->get('_route_params', []),
187
            'id' => $request->attributes->get('id'),
188
            'filtering' => $filtering,
189
            'limit' => $limit,
190
            'page' => $page,
191
            'filters' => $filters,
192
            'orFilters' => $filterOrCorrected,
193
            'sorting' => $sorting,
194
            'rel' => $rel,
195
            'printing' => $printing,
196
            'select' => $select,
197
        ]);
198
199
        return $this;
200
    }
201
202
    public function setQueryOptionsFromRequestWithCustomOrFilter(Request $request = null, $orFilter)
203
    {
204
        $filters = $request->query->get('filtering', []);
205
        $orFilters = $request->query->get('filtering_or', []);
206
        $sorting = $request->query->get('sorting', []);
207
        $printing = $request->query->get('printing', []);
208
        $rel = $request->query->get('rel', '');
209
        $page = $request->query->get('page', '');
210
        $select = $request->query->get('select', $this->entityAlias);
211
        $filtering = $request->query->get('filtering', '');
212
        $limit = $request->query->get('limit', '');
213
214
        $orFilters = array_merge($orFilters, $orFilter);
215
216
        $filterOrCorrected = [];
217
218
        $count = 0;
219
        foreach ($orFilters as $key => $filter) {
220
            if (is_array($filter)) {
221
                foreach ($filter as $keyInternal => $internal) {
222
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
223
                    $count += 1;
224
                }
225
            } else {
226
                $filterOrCorrected[$key] = $filter;
227
            }
228
        }
229
230
        $this->queryOptions = QueryBuilderOptions::fromArray([
231
            '_route' => $request->attributes->get('_route'),
232
            '_route_params' => $request->attributes->get('_route_params', []),
233
            'id' => $request->attributes->get('id'),
234
            'filtering' => $filtering,
235
            'limit' => $limit,
236
            'page' => $page,
237
            'filters' => $filters,
238
            'orFilters' => $filterOrCorrected,
239
            'sorting' => $sorting,
240
            'rel' => $rel,
241
            'printing' => $printing,
242
            'select' => $select,
243
        ]);
244
245
        return $this;
246
    }
247
248
    public function getRequest()
249
    {
250
        return $this->request;
251
    }
252
253
    public function setRouteName($route_name = '')
254
    {
255
        $this->route_name = $route_name;
256
        return $this;
257
    }
258
259
    public function findAllPaginated()
260
    {
261
        $this->initFromQueryBuilderOptions($this->queryOptions);
262
263
        $this->queryBuilderFactory->filter();
264
        $this->queryBuilderFactory->sort();
265
266
        return $this->paginateResults($this->queryBuilderFactory->getQueryBuilder());
267
    }
268
269
    protected function paginateResults(QueryBuilder $queryBuilder) {
270
        $limit = $this->queryOptions->get('limit', 10);
271
        $page = $this->queryOptions->get('page', 1);
272
273
        $pagerAdapter = new DoctrineORMAdapter($queryBuilder);
274
275
        $query = $pagerAdapter->getQuery();
276
        if (isset($this->use_result_cache) and $this->use_result_cache) {
277
            $query->useResultCache(true, 600);
278
        }
279
280
        $pager = new Pagerfanta($pagerAdapter);
281
        $pager->setNormalizeOutOfRangePages(true);
282
        $pager->setMaxPerPage($limit);
283
        $pager->setCurrentPage($page);
284
285
        $pagerFactory = new PagerfantaFactory();
286
287
        $router = new Router();
288
        $router->createRouter($this->queryOptions, $this->route_name);
289
290
        return $pagerFactory->createRepresentation($pager, $router);
0 ignored issues
show
Bug introduced by
$router of type Mado\QueryBundle\Services\Router is incompatible with the type Hateoas\Configuration\Route expected by parameter $route of Hateoas\Representation\F...:createRepresentation(). ( Ignorable by Annotation )

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

290
        return $pagerFactory->createRepresentation($pager, /** @scrutinizer ignore-type */ $router);
Loading history...
291
    }
292
293
    /** @deprecated since 2.3 */
294
    protected function customQueryStringValues()
295
    {
296
        return [];
297
    }
298
299
    protected function getCurrentEntityAlias() : string
300
    {
301
        return $this->currentEntityAlias;
302
    }
303
304
    protected function setCurrentEntityAlias(string $currentEntityAlias) 
305
    {
306
        $this->currentEntityAlias = $currentEntityAlias;
307
    }
308
309
    protected function getEmbeddedFields() : array
310
    {
311
        return $this->embeddedFields;
312
    }
313
314
    protected function setEmbeddedFields(array $embeddedFields) 
315
    {
316
        $this->embeddedFields = $embeddedFields;
317
    }
318
319
    public function getEntityAlias(string $entityName) : string
320
    {
321
        $arrayEntityName = explode('\\', strtolower($entityName));
322
        return $arrayEntityName[count($arrayEntityName) - 1];
323
    }
324
325
    protected function relationship($queryBuilder)
326
    {
327
        return $queryBuilder;
328
    }
329
330
    public function getQueryBuilderFactoryWithoutInitialization()
331
    {
332
        return $this->queryBuilderFactory;
333
    }
334
}
335