Passed
Push — develop ( 36eccf...39ad60 )
by Paul
13:49
created

BricksSiteReviewsSummary   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 254
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
eloc 178
dl 0
loc 254
ccs 0
cts 240
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A render() 0 9 2
A shortcodeClass() 0 3 1
A elementConfig() 0 12 1
B designConfig() 0 222 2
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Integrations\Bricks\Elements;
4
5
use GeminiLabs\SiteReviews\Helpers\Arr;
6
use GeminiLabs\SiteReviews\Integrations\Bricks\BricksElement;
7
use GeminiLabs\SiteReviews\Shortcodes\SiteReviewsSummaryShortcode;
8
9
class BricksSiteReviewsSummary extends BricksElement
10
{
11
    public function designConfig(): array
12
    {
13
        $config = [
14
            'style_preset' => [
15
                'group' => 'design',
16
                'inline' => true,
17
                'label' => esc_html_x('Style', 'admin-text', 'site-reviews'),
18
                'options' => [
19
                    'default' => esc_html_x('Default', 'admin-text', 'site-reviews'),
20
                    '1' => esc_html_x('Style 1', 'admin-text', 'site-reviews'),
21
                    '2' => esc_html_x('Style 2', 'admin-text', 'site-reviews'),
22
                    '3' => esc_html_x('Style 3', 'admin-text', 'site-reviews'),
23
                ],
24
                'placeholder' => esc_html_x('Default', 'admin-text', 'site-reviews'),
25
                'tab' => 'content',
26
                'themeStyle' => true,
27
                'type' => 'select',
28
            ],
29
            'style_align' => [
30
                'css' => [
31
                    [
32
                        'selector' => '.glsr-summary',
33
                        'property' => 'text-align',
34
                    ],
35
                ],
36
                'exclude' => ['auto', 'justify'],
37
                'group' => 'design',
38
                'inline' => true,
39
                'label' => esc_html_x('Alignment', 'admin-text', 'site-reviews'),
40
                'rerender' => true,
41
                'tab' => 'content',
42
                'themeStyle' => true,
43
                'type' => 'text-align',
44
            ],
45
            'style_max_width' => [
46
                'css' => [
47
                    [
48
                        'selector' => '.glsr',
49
                        'property' => '--glsr-max-w',
50
                    ],
51
                ],
52
                'group' => 'design',
53
                'hasDynamicData' => false,
54
                'hasVariables' => true,
55
                'inline' => true,
56
                'label' => esc_html_x('Max Width', 'admin-text', 'site-reviews'),
57
                'placeholder' => '',
58
                'tab' => 'content',
59
                'themeStyle' => true,
60
                'type' => 'number',
61
                'units' => true,
62
            ],
63
            'style_rating_separator' => [
64
                'group' => 'design',
65
                'label' => esc_html_x('Rating', 'admin-text', 'site-reviews'),
66
                'tab' => 'content',
67
                'themeStyle' => true,
68
                'type' => 'separator',
69
            ],
70
            'style_rating_color' => [
71
                'css' => [
72
                    [
73
                        'selector' => '.glsr:not([data-theme])',
74
                        'property' => '--glsr-summary-star-bg',
75
                    ],
76
                    [
77
                        'selector' => '.glsr:not([data-theme]) .glsr-star',
78
                        'property' => 'background',
79
                        'value' => 'var(--glsr-summary-star-bg)',
80
                    ],
81
                    [
82
                        'selector' => '.glsr:not([data-theme]) .glsr-star',
83
                        'property' => 'mask-size',
84
                        'value' => '100%',
85
                    ],
86
                    [
87
                        'selector' => '.glsr:not([data-theme]) .glsr-star-empty',
88
                        'property' => 'mask-image',
89
                        'value' => 'var(--glsr-star-empty)',
90
                    ],
91
                    [
92
                        'selector' => '.glsr:not([data-theme]) .glsr-star-full',
93
                        'property' => 'mask-image',
94
                        'value' => 'var(--glsr-star-full)',
95
                    ],
96
                    [
97
                        'selector' => '.glsr:not([data-theme]) .glsr-star-half',
98
                        'property' => 'mask-image',
99
                        'value' => 'var(--glsr-star-half)',
100
                    ],
101
                ],
102
                'group' => 'design',
103
                'label' => esc_html_x('Star Color', 'admin-text', 'site-reviews'),
104
                'tab' => 'content',
105
                'themeStyle' => true,
106
                'type' => 'color',
107
            ],
108
            'style_rating_size' => [
109
                'css' => [
110
                    [
111
                        'selector' => '.glsr',
112
                        'property' => '--glsr-summary-star',
113
                    ],
114
                ],
115
                'group' => 'design',
116
                'hasDynamicData' => false,
117
                'hasVariables' => true,
118
                'inline' => true,
119
                'label' => esc_html_x('Star Size', 'admin-text', 'site-reviews'),
120
                'placeholder' => '',
121
                'tab' => 'content',
122
                'themeStyle' => true,
123
                'type' => 'number',
124
                'units' => true,
125
            ],
126
            'style_rating_typography' => [
127
                'css' => [
128
                    [
129
                        'selector' => '.glsr-summary-rating',
130
                        'property' => 'font',
131
                    ],
132
                ],
133
                'group' => 'design',
134
                'label' => esc_html_x('Typography', 'admin-text', 'site-reviews'),
135
                'tab' => 'content',
136
                'themeStyle' => true,
137
                'type' => 'typography',
138
            ],
139
            'style_text_separator' => [
140
                'group' => 'design',
141
                'label' => esc_html_x('Text', 'admin-text', 'site-reviews'),
142
                'tab' => 'content',
143
                'themeStyle' => true,
144
                'type' => 'separator',
145
            ],
146
            'style_text_typography' => [
147
                'css' => [
148
                    [
149
                        'selector' => '.glsr-summary-text',
150
                        'property' => 'font',
151
                    ],
152
                ],
153
                'group' => 'design',
154
                'label' => esc_html_x('Typography', 'admin-text', 'site-reviews'),
155
                'tab' => 'content',
156
                'themeStyle' => true,
157
                'type' => 'typography',
158
            ],
159
            'style_bar_separator' => [
160
                'group' => 'design',
161
                'label' => esc_html_x('Bars', 'admin-text', 'site-reviews'),
162
                'tab' => 'content',
163
                'themeStyle' => true,
164
                'type' => 'separator',
165
            ],
166
            'style_bar_color' => [
167
                'css' => [
168
                    [
169
                        'selector' => '.glsr',
170
                        'property' => '--glsr-bar-bg',
171
                    ],
172
                ],
173
                'group' => 'design',
174
                'label' => esc_html_x('Color', 'admin-text', 'site-reviews'),
175
                'tab' => 'content',
176
                'themeStyle' => true,
177
                'type' => 'color',
178
            ],
179
            'style_bar_gap' => [
180
                'css' => [
181
                    [
182
                        'selector' => '.glsr',
183
                        'property' => '--glsr-bar-spacing',
184
                    ],
185
                ],
186
                'group' => 'design',
187
                'hasDynamicData' => false,
188
                'hasVariables' => true,
189
                'inline' => true,
190
                'label' => esc_html_x('Gap', 'admin-text', 'site-reviews'),
191
                'placeholder' => '',
192
                'tab' => 'content',
193
                'themeStyle' => true,
194
                'type' => 'number',
195
                'units' => true,
196
            ],
197
            'style_bar_size' => [
198
                'css' => [
199
                    [
200
                        'selector' => '.glsr',
201
                        'property' => '--glsr-bar-size',
202
                    ],
203
                ],
204
                'group' => 'design',
205
                'hasDynamicData' => false,
206
                'hasVariables' => true,
207
                'inline' => true,
208
                'label' => esc_html_x('Size', 'admin-text', 'site-reviews'),
209
                'placeholder' => '',
210
                'tab' => 'content',
211
                'themeStyle' => true,
212
                'type' => 'number',
213
                'units' => true,
214
            ],
215
            'style_bar_typography' => [
216
                'css' => [
217
                    [
218
                        'selector' => '.glsr-summary-percentages',
219
                        'property' => 'font',
220
                    ],
221
                ],
222
                'group' => 'design',
223
                'label' => esc_html_x('Typography', 'admin-text', 'site-reviews'),
224
                'tab' => 'content',
225
                'themeStyle' => true,
226
                'type' => 'typography',
227
            ],
228
        ];
229
        if ($placeholder = $config['style_preset']['options'][$this->theme_styles['style_preset'] ?? ''] ?? '') {
230
            $config['style_preset']['placeholder'] = $placeholder;
231
        }
232
        return $config;
233
    }
234
235
    public function elementConfig(): array
236
    {
237
        $controls = parent::elementConfig();
238
        $controls = Arr::insertBefore('text', $controls, [
239
            'text_notice' => [
240
                'content' => esc_html_x('The recommended way to change these values is to use the Site Reviews → Settings → Strings page.', 'admin-text', 'site-reviews'),
241
                'group' => 'text',
242
                'tab' => 'content',
243
                'type' => 'info',
244
            ],
245
        ]);
246
        return $controls;
247
    }
248
249
    public function render()
250
    {
251
        if (!$this->shortcodeInstance()->hasVisibleFields($this->settings)) {
252
            $this->render_element_placeholder([
253
                'title' => esc_html_x('You have hidden all of the fields.', 'admin-text', 'site-reviews'),
254
            ]);
255
            return;
256
        }
257
        parent::render();
258
    }
259
260
    public static function shortcodeClass(): string
261
    {
262
        return SiteReviewsSummaryShortcode::class;
263
    }
264
}
265