Passed
Push — master ( 5ef242...534212 )
by Radu
02:05
created

RequestHelper::init()   B

Complexity

Conditions 9
Paths 19

Size

Total Lines 43
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 28
c 2
b 0
f 0
dl 0
loc 43
rs 8.0555
cc 9
nc 19
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace WebServCo\Framework\DataTables;
6
7
use WebServCo\Framework\ArrayObject\Items;
8
9
class RequestHelper extends AbstractHelper
10
{
11
12
    /**
13
    * @param array<string,mixed> $data
14
    * @param array<int,string> $required
15
    */
16
    public static function init(array $data, array $required = []): Request
17
    {
18
        $required = $required; // reserved for future use.
0 ignored issues
show
Unused Code introduced by
The assignment to $required is dead and can be removed.
Loading history...
19
20
        parent::validate($data, ['draw', 'columns', 'order', 'start', 'length', 'search']);
21
22
        foreach (['columns', 'order', 'search'] as $item) {
23
            if (!\is_array($data[$item])) {
24
                throw new \InvalidArgumentException(\sprintf('Invalid parameter: %s.', $item));
25
            }
26
        }
27
28
        $columns = new Items(new ColumnArrayObject());
29
        foreach ($data['columns'] as $item) {
30
            if (!\array_key_exists('data', $item) || !\array_key_exists('name', $item)) {
31
                //continue;
32
            }
33
            $columnItem = new Column(
34
                $item['data'],
35
                $item['name'],
36
                \filter_var($item['searchable'], \FILTER_VALIDATE_BOOLEAN),
37
                \filter_var($item['orderable'], \FILTER_VALIDATE_BOOLEAN),
38
                SearchHelper::init($item['search']),
39
            );
40
            $columns->set(null, $columnItem);
41
        }
42
43
        $order = new Items(new OrderArrayObject());
44
        foreach ($data['order'] as $item) {
45
            if (!\array_key_exists('column', $item) || !\array_key_exists('dir', $item)) {
46
                continue;
47
            }
48
            $orderItem = new Order($item['column'], $item['dir']);
49
            $order->set(null, $orderItem);
50
        }
51
52
        return new Request(
53
            (int) $data['draw'],
54
            $columns,
55
            $order,
56
            (int) $data['start'],
57
            (int) $data['length'],
58
            SearchHelper::init($data['search']),
59
        );
60
    }
61
}
62