Passed
Push — master ( f2ee69...1fe896 )
by Paul
14:29 queued 06:54
created

SettingField::buildLabelWithTooltip()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
eloc 13
c 0
b 0
f 0
dl 0
loc 20
ccs 0
cts 17
cp 0
rs 9.8333
cc 2
nc 2
nop 0
crap 6
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Modules\Html;
4
5
use GeminiLabs\SiteReviews\Database\OptionManager;
6
7
class SettingField extends Field
8
{
9
    public function __construct(array $field = [])
10
    {
11
        $this->field = wp_parse_args($field, [
12
            'errors' => false,
13
            'is_hidden' => false,
14
            'is_multi' => false,
15
            'is_raw' => false,
16
            'is_valid' => true,
17
            'path' => '',
18
            'tooltip' => '',
19
        ]);
20
        $this->normalize();
21
    }
22
23
    /**
24
     * @return SettingBuilder
25
     */
26
    public function builder()
27
    {
28
        return glsr(SettingBuilder::class);
29
    }
30
31
    /**
32
     * @return string
33
     */
34
    public function getFieldClasses()
35
    {
36
        $classes = [];
37
        if ($this->field['is_hidden']) {
38
            $classes[] = 'hidden';
39
        }
40
        $classes = glsr()->filterArray('rendered/field/classes', $classes, $this->field);
41
        return implode(' ', $classes);
42
    }
43
44
    /**
45
     * @return string
46
     */
47
    public function getFieldDependsOn()
48
    {
49
        return !empty($this->field['data-depends'])
50
            ? $this->field['data-depends']
51
            : '';
52
    }
53
54
    /**
55
     * @return string
56
     */
57
    public function getFieldPrefix()
58
    {
59
        return OptionManager::databaseKey();
60
    }
61
62
    /**
63
     * @return string
64
     */
65
    protected function buildField()
66
    {
67
        return glsr(Template::class)->build('partials/form/table-row', [
68
            'context' => [
69
                'class' => $this->getFieldClasses(),
70
                'field' => $this->builder()->{$this->field['type']}($this->field),
71
                'label' => $this->buildLabelWithTooltip(),
72
            ],
73
            'field' => $this->field,
74
        ]);
75
    }
76
77
    /**
78
     * @return string
79
     */
80
    protected function buildLabelWithTooltip()
81
    {
82
        $text = $this->field['legend'];
83
        if (!empty($this->field['tooltip'])) {
84
            $text .= $this->builder()->span([
85
                'class' => 'glsr-tooltip dashicons-before dashicons-editor-help',
86
                'data-tippy-allowHTML' => true,
87
                // 'data-tippy-animation' => 'scale',
88
                'data-tippy-content' => $this->field['tooltip'],
89
                'data-tippy-delay' => [150, null],
90
                // 'data-tippy-inertia' => true,
91
                'data-tippy-interactive' => true,
92
                'data-tippy-offset' => [-10, 10],
93
                'data-tippy-placement' => 'top-start',
94
                // 'data-tippy-trigger' => 'click',
95
            ]);
96
        }
97
        return $this->builder()->label([
98
            'for' => $this->field['id'],
99
            'text' => $text,
100
        ]);
101
    }
102
103
    /**
104
     * @return string
105
     */
106
    protected function buildMultiField()
107
    {
108
        $dependsOn = $this->getFieldDependsOn();
109
        unset($this->field['data-depends']);
110
        return glsr(Template::class)->build('partials/form/table-row-multiple', [
111
            'context' => [
112
                'class' => $this->getFieldClasses(),
113
                'depends_on' => $dependsOn,
114
                'field' => $this->builder()->{$this->field['type']}($this->field),
115
                'label' => $this->buildLabelWithTooltip(),
116
                'legend' => $this->field['legend'],
117
            ],
118
            'field' => $this->field,
119
        ]);
120
    }
121
122
    /**
123
     * @param string $className
124
     * @return array
125
     */
126
    protected function mergeFieldArgs($className)
127
    {
128
        return $className::merge($this->field, 'setting');
129
    }
130
}
131