Completed
Push — master ( 187043...48cde4 )
by
unknown
01:30
created

src/QueryBuilderRequest.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Spatie\QueryBuilder;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Collection;
7
use Illuminate\Support\Str;
8
9
class QueryBuilderRequest extends Request
10
{
11
    private static $arrayValueDelimiter = ',';
12
13
    public static function setArrayValueDelimiter(string $delimiter): void
14
    {
15
        static::$arrayValueDelimiter = $delimiter;
16
    }
17
18
    public static function getArrayValueDelimiter(): string
19
    {
20
        return static::$arrayValueDelimiter;
21
    }
22
23
    public static function fromRequest(Request $request): self
24
    {
25
        return static::createFrom($request, new self());
0 ignored issues
show
$request is of type object<Illuminate\Http\Request>, but the function expects a object<self>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
26
    }
27
28
    public function includes(): Collection
29
    {
30
        $includeParameterName = config('query-builder.parameters.include');
31
32
        $includeParts = $this->query($includeParameterName);
33
34
        if (! is_array($includeParts)) {
35
            $includeParts = explode(static::getArrayValueDelimiter(), $this->query($includeParameterName));
36
        }
37
38
        return collect($includeParts)
39
            ->filter()
40
            ->map([Str::class, 'camel']);
41
    }
42
43
    public function appends(): Collection
44
    {
45
        $appendParameterName = config('query-builder.parameters.append');
46
47
        $appendParts = $this->query($appendParameterName);
48
49
        if (! is_array($appendParts)) {
50
            $appendParts = explode(static::getArrayValueDelimiter(), strtolower($appendParts));
51
        }
52
53
        return collect($appendParts)->filter();
54
    }
55
56
    public function filters(): Collection
57
    {
58
        $filterParameterName = config('query-builder.parameters.filter');
59
60
        $filterParts = $this->query($filterParameterName, []);
61
62
        if (is_string($filterParts)) {
63
            return collect();
64
        }
65
66
        $filters = collect($filterParts);
67
68
        return $filters->map(function ($value) {
69
            return $this->getFilterValue($value);
70
        });
71
    }
72
73 View Code Duplication
    public function fields(): Collection
74
    {
75
        $fieldsParameterName = config('query-builder.parameters.fields');
76
77
        $fieldsPerTable = collect($this->query($fieldsParameterName));
78
79
        if ($fieldsPerTable->isEmpty()) {
80
            return collect();
81
        }
82
83
        return $fieldsPerTable->map(function ($fields) {
84
            return explode(static::getArrayValueDelimiter(), $fields);
85
        });
86
    }
87
88 View Code Duplication
    public function sorts(): Collection
89
    {
90
        $sortParameterName = config('query-builder.parameters.sort');
91
92
        $sortParts = $this->query($sortParameterName);
93
94
        if (is_string($sortParts)) {
95
            $sortParts = explode(static::getArrayValueDelimiter(), $sortParts);
96
        }
97
98
        return collect($sortParts)->filter();
99
    }
100
101
    /**
102
     * @param $value
103
     *
104
     * @return array|bool
105
     */
106
    protected function getFilterValue($value)
107
    {
108
        if (is_array($value)) {
109
            return collect($value)->map(function ($valueValue) {
110
                return $this->getFilterValue($valueValue);
111
            })->all();
112
        }
113
114
        if (Str::contains($value, static::getArrayValueDelimiter())) {
115
            return explode(static::getArrayValueDelimiter(), $value);
116
        }
117
118
        if ($value === 'true') {
119
            return true;
120
        }
121
122
        if ($value === 'false') {
123
            return false;
124
        }
125
126
        return $value;
127
    }
128
}
129