Transformer::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 8
c 1
b 0
f 0
dl 0
loc 10
ccs 0
cts 9
cp 0
rs 10
cc 2
nc 2
nop 3
crap 6
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Integrations\FusionBuilder;
4
5
use GeminiLabs\SiteReviews\Helper;
6
use GeminiLabs\SiteReviews\Integrations\FusionBuilder\Defaults\ControlDefaults;
7
8
class Transformer
9
{
10
    public string $name;
11
    public string $shortcode;
12
13
    protected array $control;
14
15
    public function __construct(string $name, array $control, string $shortcode = '')
16
    {
17
        $this->name = $name;
18
        $this->shortcode = $shortcode;
19
        $control = wp_parse_args(compact('name'), $control);
20
        $control = glsr(ControlDefaults::class)->merge($control);
21
        $method = Helper::buildMethodName('transform', $control['type']);
22
        $this->control = method_exists($this, $method)
23
            ? call_user_func([$this, $method], $control)
24
            : $control;
25
    }
26
27
    public function control(): array
28
    {
29
        return $this->control;
30
    }
31
32
    protected function transformCheckbox(array $control): array
33
    {
34
        if ('hide' === $this->name) {
35
            $control['heading'] = esc_html_x('Hide', 'admin-text', 'site-reviews');
36
        }
37
        if (!empty($control['options'])) {
38
            $placeholder = $control['placeholder'] ?? esc_html_x('Select...', 'admin-text', 'site-reviews');
39
            $control['placeholder_text'] = $placeholder;
40
            $control['type'] = 'multiple_select';
41
            $control['value'] = $control['options'];
42
        } else {
43
            $control['default'] = 0;
44
            $control['type'] = 'radio_button_set';
45
            $control['value'] = [
46
                0 => esc_html_x('No', 'admin-text', 'site-reviews'),
47
                'yes' => esc_html_x('Yes', 'admin-text', 'site-reviews'), // because the dependency option doesn't work well with numerical values
48
            ];
49
        }
50
        return $control;
51
    }
52
53
    protected function transformNumber(array $control): array
54
    {
55
        $control['type'] = 'range';
56
        return $control;
57
    }
58
59
    protected function transformSelect(array $control): array
60
    {
61
        if ('assigned_posts' === $this->name) {
62
            $control['placeholder'] = esc_html_x('Search Pages...', 'admin-text', 'site-reviews');
63
        }
64
        if ('assigned_terms' === $this->name) {
65
            $control['placeholder'] = esc_html_x('Search Categories...', 'admin-text', 'site-reviews');
66
        }
67
        if ('assigned_users' === $this->name) {
68
            $control['placeholder'] = esc_html_x('Search Users...', 'admin-text', 'site-reviews');
69
        }
70
        if ('author' === $this->name) {
71
            $control['placeholder'] = esc_html_x('Search User...', 'admin-text', 'site-reviews');
72
        }
73
        if ('post_id' === $this->name) {
74
            $control['placeholder'] = esc_html_x('Search Review...', 'admin-text', 'site-reviews');
75
        }
76
        if (!empty($control['options'])) {
77
            $options = $control['options'];
78
            if (!array_key_exists('', $options)) {
79
                $placeholder = $control['placeholder'] ?? esc_html_x('Select...', 'admin-text', 'site-reviews');
80
                $options = ['' => $placeholder] + $options;
81
            }
82
            $control['value'] = $options;
83
            return $control;
84
        }
85
        if (!isset($control['options'])) {
86
            $control['ajax'] = glsr()->prefix.'fusion_search_query';
87
            $control['ajax_params'] = [
88
                'option' => $this->name,
89
                'shortcode' => $this->shortcode,
90
            ];
91
            $control['placeholder'] ??= esc_html_x('Search...', 'admin-text', 'site-reviews');
92
            $control['type'] = 'ajax_select';
93
            if (!($control['multiple'] ?? false)) {
94
                $control['max_input'] = 1;
95
            }
96
            return $control;
97
        }
98
        return []; // invalid select control
99
    }
100
101
    protected function transformText(array $control): array
102
    {
103
        $control['type'] = 'textfield';
104
        if ('id' === $this->name) {
105
            $control['description'] = esc_html_x('Add an ID to the wrapping HTML element.', 'admin-text', 'site-reviews');
106
            $control['heading'] = esc_html_x('Custom CSS ID', 'admin-text', 'site-reviews');
107
        }
108
        if ('class' === $this->name) {
109
            $control['description'] = esc_html_x('Add a class to the wrapping HTML element.', 'admin-text', 'site-reviews');
110
            $control['heading'] = esc_html_x('Custom CSS Class', 'admin-text', 'site-reviews');
111
        }
112
        return $control;
113
    }
114
}
115