Passed
Push — master ( e3c67b...98eade )
by Fran
08:10
created

Form   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Test Coverage

Coverage 73.17%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 41
c 2
b 0
f 0
dl 0
loc 80
ccs 30
cts 41
cp 0.7317
rs 10
wmc 24

4 Methods

Rating   Name   Duplication   Size   Complexity  
C fieldsOrder() 0 19 15
A addField() 0 3 1
B __toArray() 0 28 7
A fieldExists() 0 2 1
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 array fields
12
     */
13
    private $fields = [];
14
    public $actions = [];
15
16
    /**
17
     * @param Field $field
18
     */
19 1
    public function addField(Field $field)
20
    {
21 1
        $this->fields[$field->name] = $field;
22 1
    }
23
24
    /**
25
     * @param string $name
26
     * @return bool
27
     */
28 1
    public function fieldExists($name) {
29 1
        return array_key_exists($name, $this->fields);
30
    }
31
32
    /**
33
     * @return array
34
     */
35 1
    public function __toArray()
36
    {
37
        $array = [
38 1
            'fields' => [],
39
            'actions' => [],
40
        ];
41 1
        foreach ($this->fields as $field) {
42 1
            $array['fields'][] = $field->__toArray();
43
        }
44 1
        usort($array['fields'], function($fieldA, $fieldB) {
45
            if((bool)$fieldA['required'] !== (bool)$fieldB['required']) {
46
                if((bool)$fieldA['required']) {
47
                    return -1;
48
                } else {
49
                    return 1;
50
                }
51
            }
52
            $aOrder = Form::fieldsOrder($fieldA);
53
            $bOrder = Form::fieldsOrder($fieldB);
54
            if ($aOrder === $bOrder) {
55
                return strcmp($fieldA['name'], $fieldB['name']);
56
            }
57
            return ($aOrder < $bOrder) ? -1 : 1;
58 1
        });
59 1
        foreach($this->actions as $action) {
60
            $array['actions'][] = $action->__toArray();
61
        }
62 1
        return $array;
63
    }
64
65
    /**
66
     * @param array $field
67
     * @return int
68
     */
69 1
    public static function fieldsOrder(array $field) {
70 1
        switch ($field['type']) {
71 1
            case Field::TEXT_TYPE: $order = 1; break;
72 1
            case Field::PHONE_TYPE: $order = 1; break;
73 1
            case Field::URL_TYPE: $order = 1; break;
74 1
            case Field::CHECK_TYPE: $order = 2; break;
75 1
            case Field::RADIO_TYPE: $order = 2; break;
76 1
            case Field::COMBO_TYPE: $order = 2; break;
77 1
            case Field::TEXTAREA_TYPE: $order = 3; break;
78 1
            case Field::SEARCH_TYPE: $order = 1; break;
79 1
            case Field::HIDDEN_TYPE: $order = 0; break;
80 1
            case Field::NUMBER_TYPE: $order = 2; break;
81 1
            case Field::SWITCH_TYPE: $order = 2; break;
82 1
            case Field::PASSWORD_FIELD: $order = 1; break;
83 1
            case Field::DATE: $order = 4; break;
84 1
            case Field::TIMESTAMP: $order = 4; break;
85
            default: $order = 5; break;
86
        }
87 1
        return $order;
88
    }
89
}