Completed
Push — master ( 3fc573...634850 )
by WEBEWEB
11:27
created

denormalizeQueryBuilderRuleSet()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.6333
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
/*
4
 * This file is part of the jquery-querybuilder-bundle package.
5
 *
6
 * (c) 2019 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Bundle\JQuery\QueryBuilderBundle\Normalizer;
13
14
use UnexpectedValueException;
15
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderFilterInterface;
16
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderFilterSetInterface;
17
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderRule;
18
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderRuleInterface;
19
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderRuleSet;
20
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderRuleSetInterface;
21
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderValidationInterface;
22
use WBW\Library\Core\Argument\ArrayHelper;
23
24
/**
25
 * QueryBuilder normalizer.
26
 *
27
 * @author webeweb <https://github.com/webeweb/>
28
 * @package WBW\Bundle\JQuery\QueryBuilderBundle\Normalizer
29
 */
30
class QueryBuilderNormalizer {
31
32
    /**
33
     * Denormalize a rule.
34
     *
35
     * @param array $rule The rule.
36
     * @return QueryBuilderRuleInterface Returns the de-normalized rule.
37
     * @throws UnexpectedValueException Throws an unexpected value exception if an argument is invalid.
38
     */
39
    public static function denormalizeQueryBuilderRule(array $rule) {
40
41
        $model = new QueryBuilderRule();
42
        $model->setId(ArrayHelper::get($rule, "id", null));
43
        $model->setField(ArrayHelper::get($rule, "field", null));
44
        $model->setInput(ArrayHelper::get($rule, "input", null));
45
        $model->setOperator(ArrayHelper::get($rule, "operator", null));
46
        $model->setType(ArrayHelper::get($rule, "type", null));
47
        $model->setValue(ArrayHelper::get($rule, "value", null));
48
49
        return $model;
50
    }
51
52
    /**
53
     * Denormalize a rule set.
54
     *
55
     * @param array $rules The rules.
56
     * @return QueryBuilderRuleSetInterface Returns the rule set.
57
     */
58
    public static function denormalizeQueryBuilderRuleSet(array $rules) {
59
60
        $model = new QueryBuilderRuleSet();
61
        $model->setCondition(ArrayHelper::get($rules, "condition", null));
62
        $model->setValid(ArrayHelper::get($rules, "valid", false));
63
64
        foreach (ArrayHelper::get($rules, "rules", []) as $current) {
65
66
            // Rule set ?
67
            if (true === array_key_exists("condition", $current)) {
68
                $model->addRuleSet(static::denormalizeQueryBuilderRuleSet($current));
69
                continue;
70
            }
71
72
            $model->addRule(static::denormalizeQueryBuilderRule($current));
73
        }
74
75
        return $model;
76
    }
77
78
    /**
79
     * Normalize a filter.
80
     *
81
     * @param QueryBuilderFilterInterface $filter The filter.
82
     * @return array Returns the normalized filter.
83
     */
84
    public static function normalizeQueryBuilderFilter(QueryBuilderFilterInterface $filter) {
85
86
        $output = [];
87
88
        ArrayHelper::set($output, "id", $filter->getId(), [null]);
89
        ArrayHelper::set($output, "field", $filter->getField(), [null]);
90
        ArrayHelper::set($output, "label", $filter->getLabel(), [null]);
91
        ArrayHelper::set($output, "type", $filter->getType(), [null]);
92
        ArrayHelper::set($output, "input", $filter->getInput(), [null]);
93
        ArrayHelper::set($output, "values", $filter->getValues(), [null]);
94
        ArrayHelper::set($output, "multiple", $filter->getMultiple(), [null, false]);
95
96
        if (null !== $filter->getValues()) {
97
            $output["validation"] = $filter->getValidation()->jsonSerialize();
98
        }
99
100
        ArrayHelper::set($output, "operators", $filter->getOperators(), [null, []]);
101
102
        return $output;
103
    }
104
105
    /**
106
     * Normalize a filter set.
107
     *
108
     * @param QueryBuilderFilterSetInterface $filterSet The filter set.
109
     * @return array Returns the normalized filter set.
110
     */
111
    public static function normalizeQueryBuilderFilterSet(QueryBuilderFilterSetInterface $filterSet) {
112
113
        $output = [];
114
115
        /** @var QueryBuilderFilterInterface $current */
116
        foreach ($filterSet->getFilters() as $current) {
117
            $output[] = static::normalizeQueryBuilderFilter($current);
118
        }
119
120
        return $output;
121
    }
122
123
    /**
124
     * Normalize a validation.
125
     *
126
     * @param QueryBuilderValidationInterface $validation The validation.
127
     * @return array Returns the normalized validation.
128
     */
129
    public static function normalizeQueryBuilderValidation(QueryBuilderValidationInterface $validation) {
130
131
        $output = [];
132
133
        ArrayHelper::set($output, "format", $validation->getFormat(), [null]);
134
        ArrayHelper::set($output, "min", $validation->getMin(), [null]);
135
        ArrayHelper::set($output, "max", $validation->getMax(), [null]);
136
        ArrayHelper::set($output, "step", $validation->getStep(), [null]);
137
        ArrayHelper::set($output, "messages", $validation->getMessages(), [null]);
138
        ArrayHelper::set($output, "allow_empty_value", $validation->getAllowEmptyValue(), [null]);
139
        ArrayHelper::set($output, "callback", $validation->getCallback(), [null]);
140
141
        return $output;
142
    }
143
}
144