Test Failed
Push — master ( 1b7368...050678 )
by Fran
25:16 queued 22:49
created

Form::__toArray()   B

Complexity

Conditions 7
Paths 4

Size

Total Lines 28
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 19
c 1
b 0
f 0
nc 4
nop 0
dl 0
loc 28
ccs 0
cts 21
cp 0
crap 56
rs 8.8333
1
<?php
2
namespace PSFS\base\dto;
3
4
/**
5
 * Class Form
6
 * @package PSFS\base\dto
7
 */
8
class Form extends Dto
9
{
10
    /**
11
     * @var \PSFS\base\dto\Field[]
12
     */
13
    private $fields = [];
14
    /**
15
     * @var \PSFS\base\dto\FormAction[]
16
     */
17
    public $actions = [];
18
19
    /**
20
     * @param Field $field
21
     */
22
    public function addField(Field $field)
23
    {
24
        $this->fields[$field->name] = $field;
25
    }
26
27
    /**
28
     * @param string $name
29
     * @return bool
30
     */
31
    public function fieldExists($name) {
32
        return array_key_exists($name, $this->fields);
33
    }
34
35
    /**
36
     * @return array
37
     */
38
    public function __toArray()
39
    {
40
        $array = [
41
            'fields' => [],
42
            'actions' => [],
43
        ];
44
        foreach ($this->fields as $field) {
45
            $array['fields'][] = $field->__toArray();
46
        }
47
        usort($array['fields'], function($fieldA, $fieldB) {
48
            if((bool)$fieldA['required'] !== (bool)$fieldB['required']) {
49
                if((bool)$fieldA['required']) {
50
                    return -1;
51
                } else {
52
                    return 1;
53
                }
54
            }
55
            $aOrder = Form::fieldsOrder($fieldA);
56
            $bOrder = Form::fieldsOrder($fieldB);
57
            if ($aOrder === $bOrder) {
58
                return strcmp($fieldA['name'], $fieldB['name']);
59
            }
60
            return ($aOrder < $bOrder) ? -1 : 1;
61
        });
62
        foreach($this->actions as $action) {
63
            $array['actions'][] = $action->__toArray();
64
        }
65
        return $array;
66
    }
67
68
    /**
69
     * @param array $field
70
     * @return int
71
     */
72
    public static function fieldsOrder(array $field) {
73
        switch ($field['type']) {
74
            case Field::HIDDEN_TYPE: $order = 0; break;
75
            case Field::TEXT_TYPE:
76
            case Field::PHONE_TYPE:
77
            case Field::URL_TYPE:
78
            case Field::PASSWORD_FIELD:
79
            case Field::SEARCH_TYPE: $order = 1; break;
80
            case Field::CHECK_TYPE:
81
            case Field::RADIO_TYPE:
82
            case Field::COMBO_TYPE:
83
            case Field::NUMBER_TYPE:
84
            case Field::SWITCH_TYPE: $order = 2; break;
85
            case Field::TEXTAREA_TYPE: $order = 3; break;
86
            default:
87
            case Field::DATE:
88
            case Field::TIMESTAMP: $order = 4; break;
89
        }
90
        return $order;
91
    }
92
}
93