ColumnsAndFieldsTrait   A
last analyzed

Complexity

Total Complexity 27

Size/Duplication

Total Lines 129
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 42
c 1
b 0
f 0
dl 0
loc 129
ccs 54
cts 54
cp 1
rs 10
wmc 27

12 Methods

Rating   Name   Duplication   Size   Complexity  
A getAllFieldObjects() 0 8 1
A extractField() 0 9 3
A getColumnsAsFields() 0 14 6
A getFieldsWithoutMarkup() 0 8 2
A getFieldByName() 0 10 3
A makeDefaultColumnField() 0 3 1
A getColumns() 0 3 1
A getColumnsWithoutRelatedField() 0 10 3
A getFields() 0 3 1
A hasAnyFieldFilter() 0 10 4
A addField() 0 3 1
A addColumn() 0 3 1
1
<?php
2
3
namespace Yaro\Jarboe\Table\CrudTraits;
4
5
use Yaro\Jarboe\Table\Fields\AbstractField;
0 ignored issues
show
Bug introduced by
The type Yaro\Jarboe\Table\Fields\AbstractField was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use Yaro\Jarboe\Table\Fields\Text;
7
8
trait ColumnsAndFieldsTrait
9
{
10
    private $fields = [];
11
    private $columns = [];
12
13
    /**
14
     * @param string|AbstractField $column
15
     */
16 5
    public function addColumn($column)
17
    {
18 5
        $this->columns[] = $column;
19 5
    }
20
21 61
    public function getColumns()
22
    {
23 61
        return $this->columns;
24
    }
25
26
    /**
27
     * Get columns as field objects, or fields if there are no columns.
28
     *
29
     * @return array
30
     */
31 6
    public function getColumnsAsFields()
32
    {
33 6
        $columns = [];
34 6
        foreach ($this->getColumns() as $column) {
35 3
            if (!is_object($column)) {
36 3
                $column = $this->getFieldByName($column) ?: $this->makeDefaultColumnField($column);
37
            }
38
39 3
            if ($column) {
40 3
                $columns[] = $column;
41
            }
42
        }
43
44 6
        return $columns ?: $this->getFields();
45
    }
46
47
    /**
48
     * Get list of columns that initialized as field object.
49
     *
50
     * @return array
51
     */
52 59
    public function getColumnsWithoutRelatedField()
53
    {
54 59
        $columns = [];
55 59
        foreach ($this->getColumns() as $column) {
56 1
            if (is_object($column)) {
57 1
                $columns[] = $column;
58
            }
59
        }
60
61 59
        return $columns;
62
    }
63
64 59
    public function getAllFieldObjects()
65
    {
66 59
        $fieldsAndColumns = array_merge(
67 59
            $this->getFieldsWithoutMarkup(),
68 59
            $this->getColumnsWithoutRelatedField()
69
        );
70
71 59
        return $fieldsAndColumns;
72
    }
73
74
    /**
75
     * @param $name
76
     * @return null|AbstractField
77
     */
78 5
    public function getFieldByName($name)
79
    {
80 5
        $fields = $this->getFieldsWithoutMarkup();
81 5
        foreach ($fields as $field) {
82 4
            if ($field->name() === $name) {
83 3
                return $field;
84
            }
85
        }
86
87 2
        return null;
88
    }
89
90 59
    public function addField(AbstractField $field)
91
    {
92 59
        $this->fields[] = $field;
93 59
    }
94
95 62
    public function getFields()
96
    {
97 62
        return $this->fields;
98
    }
99
100 61
    public function getFieldsWithoutMarkup(): array
101
    {
102 61
        $fields = [];
103 61
        foreach ($this->getFields() as $field) {
104 59
            $this->extractField($field, $fields);
105
        }
106
107 61
        return $fields;
108
    }
109
110 59
    private function extractField(AbstractField $field, &$fields)
111
    {
112 59
        if (!$field->isMarkupRow()) {
113 59
            $fields[] = $field;
114 59
            return;
115
        }
116
117 1
        foreach ($field->getFields() as $field) {
118 1
            $this->extractField($field, $fields);
119
        }
120 1
    }
121
122 2
    public function hasAnyFieldFilter()
123
    {
124
        /** @var AbstractField $field */
125 2
        foreach ($this->getColumnsAsFields() as $field) {
126 2
            if (!$field->hidden('list') && $field->filter()) {
127 1
                return true;
128
            }
129
        }
130
131 1
        return false;
132
    }
133
134 2
    private function makeDefaultColumnField($column)
135
    {
136 2
        return Text::make($column);
137
    }
138
}
139