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 — feature/167/query_options_buil... ( bd4122...f9a30a )
by Simone
02:27
created

buildFromRequestAndCustomFilter()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 47
Code Lines 36

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
eloc 36
dl 0
loc 47
rs 9.344
c 0
b 0
f 0
ccs 0
cts 36
cp 0
cc 4
nc 3
nop 2
crap 20
1
<?php
2
3
namespace Mado\QueryBundle\Queries\Options;
4
5
use Mado\QueryBundle\Exceptions\InvalidFiltersException;
6
use Mado\QueryBundle\Queries\QueryBuilderOptions;
7
use Symfony\Component\HttpFoundation\Request;
8
9
class QueryOptionsBuilder
10
{
11
    private $entityAlias;
12
13
    public function setEntityAlias(string $entityAlias)
14
    {
15
        $this->entityAlias = $entityAlias;
16
    }
17
18
    public function getEntityAlias()
19
    {
20
        return $this->entityAlias;
21
    }
22
23
    public function builderFromRequest(Request $request = null)
24
    {
25
        $this->ensureEntityAliasIsDefined();
26
27
        $requestAttributes = [];
28
        foreach ($request->attributes->all() as $attributeName => $attributeValue) {
29
            $requestAttributes[$attributeName] = $request->attributes->get(
30
                $attributeName,
31
                $attributeValue
32
            );
33
        }
34
35
        $filters     = $request->query->get('filtering', []);
36
        $orFilters   = $request->query->get('filtering_or', []);
37
        $sorting     = $request->query->get('sorting', []);
38
        $printing    = $request->query->get('printing', []);
39
        $rel         = $request->query->get('rel', '');
40
        $page        = $request->query->get('page', '');
41
        $select      = $request->query->get('select', $this->getEntityAlias());
42
        $filtering   = $request->query->get('filtering', '');
43
        $limit       = $request->query->get('limit', '');
44
45
        $filterOrCorrected = [];
46
47
        $count = 0;
48
        foreach ($orFilters as $key => $filter) {
49
            if (is_array($filter)) {
50
                foreach ($filter as $keyInternal => $internal) {
51
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
52
                    $count += 1;
53
                }
54
            } else {
55
                $filterOrCorrected[$key] = $filter;
56
            }
57
        }
58
59
        $requestProperties = [
60
            'filtering'   => $filtering,
61
            'orFiltering' => $filterOrCorrected,
62
            'limit'       => $limit,
63
            'page'        => $page,
64
            'filters'     => $filters,
65
            'orFilters'   => $filterOrCorrected,
66
            'sorting'     => $sorting,
67
            'rel'         => $rel,
68
            'printing'    => $printing,
69
            'select'      => $select,
70
        ];
71
72
        $options = array_merge(
73
            $requestAttributes,
74
            $requestProperties
75
        );
76
77
        return QueryBuilderOptions::fromArray($options);
78
    }
79
80
    public function ensureEntityAliasIsDefined()
81
    {
82
        if (!$this->entityAlias) {
83
            throw new \RuntimeException(
84
                'Oops! Entity alias is missing'
85
            );
86
        }
87
    }
88
89
    public function buildFromRequestAndCustomFilter(Request $request, $filter)
90
    {
91
        $this->ensureEntityAliasIsDefined();
92
93
        $filters   = $request->query->get('filtering', []);
94
        $orFilters = $request->query->get('filtering_or', []);
95
        $sorting   = $request->query->get('sorting', []);
96
        $printing  = $request->query->get('printing', []);
97
        $rel       = $request->query->get('rel', '');
98
        $page      = $request->query->get('page', '');
99
        $select    = $request->query->get('select', $this->getEntityAlias());
100
        $filtering = $request->query->get('filtering', '');
101
        $limit     = $request->query->get('limit', '');
102
        $justCount = $request->query->get('justCount', 'false');
103
104
        $this->ensureFilterIsValid($filters);
105
106
        $filters = array_merge($filters, $filter);
107
108
        $filterOrCorrected = [];
109
110
        $count = 0;
111
        foreach ($orFilters as $key => $filterValue) {
112
            if (is_array($filterValue)) {
113
                foreach ($filterValue as $keyInternal => $internal) {
114
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
115
                    $count += 1;
116
                }
117
            } else {
118
                $filterOrCorrected[$key] = $filterValue;
119
            }
120
        }
121
122
        return QueryBuilderOptions::fromArray([
123
            '_route'        => $request->attributes->get('_route'),
124
            '_route_params' => $request->attributes->get('_route_params', []),
125
            'id'            => $request->attributes->get('id'),
126
            'filtering'     => $filtering,
127
            'limit'         => $limit,
128
            'page'          => $page,
129
            'filters'       => $filters,
130
            'orFilters'     => $filterOrCorrected,
131
            'sorting'       => $sorting,
132
            'rel'           => $rel,
133
            'printing'      => $printing,
134
            'select'        => $select,
135
            'justCount'     => $justCount,
136
        ]);
137
    }
138
139
    private function ensureFilterIsValid($filters)
140
    {
141
        if (!is_array($filters)) {
142
            throw new InvalidFiltersException(
143
                "Wrong query string exception: "
144
                . var_export($filters, true) . "\n\n"
145
                . "Please check query string should be something like "
146
                . "http://<host>:<port>/?filtering[<field>|<operator>]=<value>"
147
            );
148
        }
149
    }
150
151
    public function buildForOrFilter(Request $request, $orFilter)
152
    {
153
        $this->ensureEntityAliasIsDefined();
154
155
        $filters   = $request->query->get('filtering', []);
156
        $orFilters = $request->query->get('filtering_or', []);
157
        $sorting   = $request->query->get('sorting', []);
158
        $printing  = $request->query->get('printing', []);
159
        $rel       = $request->query->get('rel', '');
160
        $page      = $request->query->get('page', '');
161
        $select    = $request->query->get('select', $this->getEntityAlias());
162
        $filtering = $request->query->get('filtering', '');
163
        $limit     = $request->query->get('limit', '');
164
165
        $orFilters = array_merge($orFilters, $orFilter);
166
167
        $filterOrCorrected = [];
168
169
        $count = 0;
170
        foreach ($orFilters as $key => $filter) {
171
            if (is_array($filter)) {
172
                foreach ($filter as $keyInternal => $internal) {
173
                    $filterOrCorrected[$keyInternal . '|' . $count] = $internal;
174
                    $count += 1;
175
                }
176
            } else {
177
                $filterOrCorrected[$key] = $filter;
178
            }
179
        }
180
181
        return QueryBuilderOptions::fromArray([
182
            '_route'        => $request->attributes->get('_route'),
183
            '_route_params' => $request->attributes->get('_route_params', []),
184
            'id'            => $request->attributes->get('id'),
185
            'filtering'     => $filtering,
186
            'limit'         => $limit,
187
            'page'          => $page,
188
            'filters'       => $filters,
189
            'orFilters'     => $filterOrCorrected,
190
            'sorting'       => $sorting,
191
            'rel'           => $rel,
192
            'printing'      => $printing,
193
            'select'        => $select,
194
        ]);
195
    }
196
}
197