Completed
Push — master ( ca7ffd...251636 )
by Denis
01:28
created

GridViewRequest::gridField()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Woo\GridView;
4
5
use Illuminate\Support\Facades\Request;
6
use Woo\GridView\Traits\Configurable;
7
8
class GridViewRequest
9
{
10
    use Configurable;
11
12
    public $page;
13
14
    public $sortColumn;
15
16
    public $sortOrder;
17
18
    public $perPage;
19
20
    public $filters = [];
21
22
    private function __construct($config)
23
    {
24
        $this->loadConfig($config);
25
    }
26
27
    private static function gridField(int $gridId, string $field)
28
    {
29
        return $gridId == 0 ? $field : 'grid.' . $gridId . '.' . $field;
30
    }
31
32
    /**
33
     * Allows to parse request information and making request instance
34
     * @param int $gridId
35
     * @return GridViewRequest
36
     */
37
    public static function parse(int $gridId)
38
    {
39
        $request = Request::instance();
40
41
        $page = $request->input(self::gridField($gridId, 'page'), 1);
42
        $sortColumn = $request->input(self::gridField($gridId, 'sort'), '');
43
        $sortOrder = $request->input(self::gridField($gridId, 'order'), 'DESC');
44
        $filters = $request->input(self::gridField($gridId, 'filters'), []);
45
46
        if ($page <= 0) {
47
            $page = 1;
48
        }
49
50
        if (!is_string($sortColumn)) {
51
            $sortColumn = '';
52
        }
53
54
        if (!in_array($sortOrder, ['ASC', 'DESC'])) {
55
            $sortOrder = 'DESC';
56
        }
57
58
        if (!is_array($filters)) {
59
            $filters = [];
60
        }
61
62
        return new GridViewRequest([
63
            'page' => $page,
64
            'sortColumn' => $sortColumn,
65
            'sortOrder' => $sortOrder,
66
            'filters' => $filters,
67
        ]);
68
    }
69
70
    public function getFilterValue(string $name)
71
    {
72
        return $this->filters[$name] ?? '';
73
    }
74
75
    /**
76
     * Should specify tests
77
     * @return array
78
     */
79
    protected function configTests(): array
80
    {
81
        return [];
82
    }
83
}