PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.18
UiCore Elements – Free widgets and templates for Elementor v1.3.18
1.3.18 1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.2.0 1.2.1 1.2.2 1.2.3 All 42 releases
← All changes | includes/widgets/newsletter.php +470 -510 1.2.0 → 1.3.18 View file →
@@ -1,10 +1,14 @@
1 1 <?php
2 +
2 3 namespace UiCoreElements;
3 4
4 5
5 -use UiCoreElements\Utils\Contact_Form_Service;
6 +use UiCoreElements\Utils\Contact_Form_Service as Form_Service;
7 +use UiCoreElements\Utils\Newsletter_Services;
6 8 use UiCoreElements\Utils\Form_Component;
9 +
10 +
7 11 use Elementor\Controls_Manager;
8 12 use Elementor\Icons_Manager;
9 13 use Elementor\Utils;
10 14
@@ -17,30 +21,35 @@
17 21 * @author Lucas Marini Falbo <[email protected]>
18 22 * @since 1.0.7
19 23 */
20 24
21 -class Newsletter extends UiCoreWidget {
25 +class Newsletter extends UiCoreWidget
26 +{
22 27
23 28 use Form_Component;
24 29
25 - public function get_name() {
26 - return 'uicore-newsletter';
27 - }
30 + public function get_name()
31 + {
32 + return 'uicore-newsletter';
33 + }
28 34
29 - public function get_title() {
30 - return __( 'Newsletter', 'uicore-elements' );
31 - }
35 + public function get_title()
36 + {
37 + return __('Newsletter', 'uicore-elements');
38 + }
32 39
33 - public function get_icon() {
34 - return 'eicon-form-horizontal ui-e-widget';
35 - }
40 + public function get_icon()
41 + {
42 + return 'eicon-form-horizontal ui-e-widget';
43 + }
36 44 public function get_categories()
37 45 {
38 46 return ['uicore'];
39 47 }
40 - public function get_keywords() {
41 - return [ 'form', 'forms', 'newsletter', 'news', 'subscribe', 'subscription', 'mailchimp' ];
42 - }
48 + public function get_keywords()
49 + {
50 + return ['form', 'forms', 'newsletter', 'news', 'subscribe', 'subscription', 'mailchimp'];
51 + }
43 52 public function get_styles()
44 53 {
45 54 return ['newsletter'];
46 55 }
@@ -55,12 +64,17 @@
55 64 'custom_condition' => $this->check_recaptcha_version('v3')
56 65 ]
57 66 ];
58 67 }
68 + public function has_widget_inner_wrapper(): bool
69 + {
70 + // TODO: remove after Optmized Markup experiment is merged to the core
71 + return ! \Elementor\Plugin::$instance->experiments->is_feature_active('e_optimized_markup');
72 + }
59 73 function check_recaptcha_version($version)
60 74 {
61 75
62 - if( $this->is_edit_mode() ){
76 + if ($this->is_edit_mode()) {
63 77 return true;
64 78 }
65 79
66 80 return $version === $this->get_settings_for_display('recaptcha_version') ? true : false;
@@ -65,84 +79,86 @@
65 79
66 80 return $version === $this->get_settings_for_display('recaptcha_version') ? true : false;
67 81 }
68 82
69 - function form_fields_render_attributes( $i, $instance, $item ) {
70 - $this->add_render_attribute(
71 - [
72 - 'field-group' . $i => [
73 - 'class' => [
74 - 'ui-e-field-type-text',
75 - 'ui-e-field-group',
76 - 'elementor-column',
77 - ],
78 - ],
83 + function form_fields_render_attributes($i, $instance, $item)
84 + {
85 + $this->add_render_attribute(
86 + [
87 + 'field-group' . $i => [
88 + 'class' => [
89 + 'ui-e-field-type-text',
90 + 'ui-e-field-group',
91 + 'elementor-column',
92 + ],
93 + ],
79 94 'honeypot' => [
80 95 'class' => [
81 - 'ui-e-field-type-address',
82 - 'ui-e-field-group',
83 - 'elementor-column',
84 - ],
96 + 'ui-e-field-type-address',
97 + 'ui-e-field-group',
98 + 'elementor-column',
99 + ],
85 100 ],
86 101 'recaptcha' => [
87 102 'class' => [
88 - 'ui-e-field-type-recaptcha',
89 - 'ui-e-field-group',
90 - 'elementor-column',
103 + 'ui-e-field-type-recaptcha',
104 + 'ui-e-field-group',
105 + 'elementor-column',
91 106 'elementor-col-100'
92 - ],
107 + ],
93 108 ],
94 109 'recaptcha_v3' => [
95 110 'class' => [
96 - 'ui-e-field-type-recaptcha_v3',
97 - 'ui-e-field-group',
98 - 'elementor-column',
111 + 'ui-e-field-type-recaptcha_v3',
112 + 'ui-e-field-group',
113 + 'elementor-column',
99 114 'elementor-col-100'
100 - ],
115 + ],
101 116 ],
102 - 'input' . $i => [
103 - 'type' => 'text',
117 + 'input' . $i => [
118 + 'type' => $item === 'email' ? 'email' : 'text',
104 119 'size' => '1',
105 - 'name' => 'form_fields[' . $item . ']',
106 - 'id' => 'form-fields-' . $item,
107 - 'class' => [
108 - 'ui-e-field',
109 - empty( $instance[$item.'_css'] ) ? '' : esc_attr( $instance[$item.'_css'] ),
110 - ],
111 - ],
112 - 'label' . $i => [
113 - 'for' => 'form-field-' . $item,
114 - 'class' => 'ui-e-label',
115 - ],
116 - ]
117 - );
120 + 'name' => 'form_fields[' . $item . ']',
121 + 'id' => 'form-fields-' . $item,
122 + 'class' => [
123 + 'ui-e-field',
124 + empty($instance[$item . '_css']) ? '' : esc_attr($instance[$item . '_css']),
125 + ],
126 + ],
127 + 'label' . $i => [
128 + 'for' => 'form-field-' . $item,
129 + 'class' => 'ui-e-label',
130 + ],
131 + ]
132 + );
118 133
119 - if ( empty( $instance[$item . '_width'] ) ) {
120 - $item['width'] = '100';
121 - }
134 + if (empty($instance[$item . '_width'])) {
135 + $item['width'] = '100';
136 + }
122 137
123 - $this->add_render_attribute( 'field-group' . $i, 'class', 'elementor-col-' . $instance[$item . '_width'] );
138 + $this->add_render_attribute('field-group' . $i, 'class', 'elementor-col-' . $instance[$item . '_width']);
124 139
125 - if ( ! empty( $instance[$item . '_width_tablet'] ) ) {
126 - $this->add_render_attribute( 'field-group' . $i, 'class', 'elementor-md-' . $instance[$item . '_width_tablet'] );
127 - }
140 + if (! empty($instance[$item . '_width_tablet'])) {
141 + $this->add_render_attribute('field-group' . $i, 'class', 'elementor-md-' . $instance[$item . '_width_tablet']);
142 + }
128 143
129 - if ( ! empty( $instance[$item . '_width_mobile'] ) ) {
130 - $this->add_render_attribute( 'field-group' . $i, 'class', 'elementor-sm-' . $instance[$item . '_width_mobile'] );
131 - }
144 + if (! empty($instance[$item . '_width_mobile'])) {
145 + $this->add_render_attribute('field-group' . $i, 'class', 'elementor-sm-' . $instance[$item . '_width_mobile']);
146 + }
132 147
133 - // Allow zero as placeholder.
134 - if ( ! Utils::is_empty( $instance[$item . '_placeholder'] ) ) {
135 - $this->add_render_attribute( 'input' . $i, 'placeholder', $instance[$item . '_placeholder'] );
136 - }
148 + // Allow zero as placeholder.
149 + if (! Utils::is_empty($instance[$item . '_placeholder'])) {
150 + $this->add_render_attribute('input' . $i, 'placeholder', $instance[$item . '_placeholder']);
151 + }
137 152
138 - if ( ! $instance['show_labels'] ) {
139 - $this->add_render_attribute( 'label' . $i, 'class', 'elementor-screen-only' );
140 - }
153 + if (! $instance['show_labels']) {
154 + $this->add_render_attribute('label' . $i, 'class', 'elementor-screen-only');
155 + }
141 156
142 - if ( ! empty( $instance[$item . '_required'] ) ) {
143 - if ( ! empty( $instance['mark_required'] ) ) {
144 - $this->add_render_attribute( 'field-group' . $i,
157 + if (! empty($instance[$item . '_required'])) {
158 + if (! empty($instance['mark_required'])) {
159 + $this->add_render_attribute(
160 + 'field-group' . $i,
145 161 [
146 162 'class' => 'ui-e-required',
147 163 'required' => 'required',
148 164 ]
@@ -147,413 +163,357 @@
147 163 'required' => 'required',
148 164 ]
149 165 );
150 166 }
151 - }
152 - }
167 + }
168 + }
153 169
154 - protected function register_controls() {
170 + protected function register_controls()
171 + {
155 172
156 173 $this->start_controls_section(
157 174 'section_form_settings',
158 175 [
159 - 'label' => esc_html__( 'Form Settings', 'uicore-elements' ),
176 + 'label' => esc_html__('Form Settings', 'uicore-elements'),
160 177 ]
161 178 );
162 179
163 - $this->add_control(
164 - 'form_name',
165 - [
166 - 'label' => esc_html__( 'Form Name', 'uicore-elements' ),
167 - 'type' => Controls_Manager::TEXT,
168 - 'default' => esc_html__( 'New Form', 'uicore-elements' ),
169 - 'placeholder' => esc_html__( 'Form Name', 'uicore-elements' ),
170 - ]
171 - );
172 - $this->add_control(
173 - 'show_labels',
174 - [
175 - 'label' => esc_html__( 'Label', 'uicore-elements' ),
176 - 'type' => Controls_Manager::SWITCHER,
177 - 'label_on' => esc_html__( 'Show', 'uicore-elements' ),
178 - 'label_off' => esc_html__( 'Hide', 'uicore-elements' ),
179 - 'return_value' => 'true',
180 - 'default' => 'true',
181 - ]
182 - );
183 - $this->add_control(
184 - 'mark_required',
185 - [
186 - 'label' => esc_html__( 'Required Mark', 'uicore-elements' ),
187 - 'type' => Controls_Manager::SWITCHER,
188 - 'label_on' => esc_html__( 'Show', 'uicore-elements' ),
189 - 'label_off' => esc_html__( 'Hide', 'uicore-elements' ),
190 - 'default' => '',
191 - 'render_type' => 'template',
192 - 'condition' => [
193 - 'show_labels!' => '',
194 - ],
195 - ]
196 - );
180 + $this->add_control(
181 + 'form_name',
182 + [
183 + 'label' => esc_html__('Form Name', 'uicore-elements'),
184 + 'type' => Controls_Manager::TEXT,
185 + 'default' => esc_html__('New Form', 'uicore-elements'),
186 + 'placeholder' => esc_html__('Form Name', 'uicore-elements'),
187 + ]
188 + );
189 + $this->add_control(
190 + 'show_labels',
191 + [
192 + 'label' => esc_html__('Label', 'uicore-elements'),
193 + 'type' => Controls_Manager::SWITCHER,
194 + 'label_on' => esc_html__('Show', 'uicore-elements'),
195 + 'label_off' => esc_html__('Hide', 'uicore-elements'),
196 + 'return_value' => 'true',
197 + 'default' => 'true',
198 + ]
199 + );
200 + $this->add_control(
201 + 'mark_required',
202 + [
203 + 'label' => esc_html__('Required Mark', 'uicore-elements'),
204 + 'type' => Controls_Manager::SWITCHER,
205 + 'label_on' => esc_html__('Show', 'uicore-elements'),
206 + 'label_off' => esc_html__('Hide', 'uicore-elements'),
207 + 'default' => '',
208 + 'render_type' => 'template',
209 + 'condition' => [
210 + 'show_labels!' => '',
211 + ],
212 + ]
213 + );
197 214 $this->end_controls_section();
198 215
199 216 $this->start_controls_section(
200 217 'section_form_fields',
201 218 [
202 - 'label' => esc_html__( 'Fields', 'uicore-elements' ),
219 + 'label' => esc_html__('Fields', 'uicore-elements'),
203 220 ]
204 221 );
205 222
206 - $this->add_control(
207 - 'add_name',
208 - [
209 - 'label' => esc_html__( 'Name', 'uicore-elements' ),
210 - 'type' => Controls_Manager::SWITCHER,
211 - 'return_value' => 'true',
212 - 'default' => 'true',
213 - ]
214 - );
215 - $this->add_control(
216 - 'add_recaptcha',
217 - [
218 - 'label' => esc_html__( 'Recaptcha', 'uicore-elements' ),
219 - 'type' => Controls_Manager::SWITCHER,
220 - 'return_value' => 'true',
221 - ]
222 - );
223 - $this->add_control(
224 - 'add_honeypot',
225 - [
226 - 'label' => esc_html__( 'Honeypot', 'uicore-elements' ),
227 - 'type' => Controls_Manager::SWITCHER,
228 - 'description' => esc_html__('Adds a hidden field to trap and identify bots by capturing automated form submissions.', 'uicore-elements'),
229 - 'return_value' => 'true',
230 - 'default' => 'true',
231 - ]
232 - );
223 + $this->add_control(
224 + 'add_name',
225 + [
226 + 'label' => esc_html__('Name', 'uicore-elements'),
227 + 'type' => Controls_Manager::SWITCHER,
228 + 'return_value' => 'true',
229 + 'default' => 'true',
230 + ]
231 + );
232 + $this->add_control(
233 + 'add_recaptcha',
234 + [
235 + 'label' => esc_html__('Recaptcha', 'uicore-elements'),
236 + 'type' => Controls_Manager::SWITCHER,
237 + 'return_value' => 'true',
238 + ]
239 + );
240 + $this->add_control(
241 + 'add_honeypot',
242 + [
243 + 'label' => esc_html__('Honeypot', 'uicore-elements'),
244 + 'type' => Controls_Manager::SWITCHER,
245 + 'description' => esc_html__('Adds a hidden field to trap and identify bots by capturing automated form submissions.', 'uicore-elements'),
246 + 'return_value' => 'true',
247 + 'default' => 'true',
248 + ]
249 + );
233 250
234 - $this->start_controls_tabs( 'form_fields_tabs' );
251 + $this->start_controls_tabs('form_fields_tabs');
235 252
236 - $this->start_controls_tab(
237 - 'email_tab',
238 - [
239 - 'label' => esc_html__( 'E-mail', 'uicore-elements' ),
240 - ]
241 - );
253 + $this->start_controls_tab(
254 + 'email_tab',
255 + [
256 + 'label' => esc_html__('E-mail', 'uicore-elements'),
257 + ]
258 + );
242 259
243 - $this->add_control(
244 - 'email_label',
245 - [
246 - 'label' => esc_html__( 'Label', 'uicore-elements' ),
247 - 'type' => Controls_Manager::TEXT,
248 - 'default' => '',
249 - 'dynamic' => [
250 - 'active' => true,
251 - ],
252 - ]
253 - );
254 - $this->add_control(
255 - 'email_placeholder',
256 - [
257 - 'label' => esc_html__( 'Placeholder', 'uicore-elements' ),
258 - 'type' => Controls_Manager::TEXT,
259 - 'default' => esc_html__('Your e-mail', 'uicore-elements'),
260 - 'dynamic' => [
261 - 'active' => true,
262 - ],
263 - ]
264 - );
265 - $this->add_control(
266 - 'email_required',
267 - [
268 - 'label' => esc_html__( 'Required', 'uicore-elements' ),
269 - 'type' => Controls_Manager::SWITCHER,
270 - 'return_value' => 'true',
271 - 'default' => '',
272 - ]
273 - );
274 - $this->add_responsive_control(
275 - 'email_width',
276 - [
277 - 'label' => esc_html__( 'Column Width', 'uicore-elements' ),
278 - 'type' => Controls_Manager::SELECT,
279 - 'options' => $this->TRAIT_get_width_values(),
280 - 'default' => '40',
281 - ]
282 - );
283 - $this->add_control(
284 - 'email_css',
285 - [
286 - 'label' => esc_html__( 'Custom Class', 'uicore-elements' ),
287 - 'type' => Controls_Manager::TEXT,
288 - 'default' => '',
289 - 'ai' => [
290 - 'active' => false,
291 - ],
292 - 'separator' => 'before',
293 - 'placeholder' => esc_html__( 'e.g: my-class', 'uicore-elements' ),
294 - ]
295 - );
296 - $this->add_control(
297 - 'email_shortcode',
298 - [
299 - 'label' => esc_html__( 'Shortcode', 'uicore-elements' ),
300 - 'type' => Controls_Manager::RAW_HTML,
301 - 'classes' => 'forms-field-shortcode',
302 - 'raw' => '<input class="elementor-form-field-shortcode" value=\'[field id="email"]\' readonly />',
303 - ]
304 - );
260 + $this->add_control(
261 + 'email_label',
262 + [
263 + 'label' => esc_html__('Label', 'uicore-elements'),
264 + 'type' => Controls_Manager::TEXT,
265 + 'default' => '',
266 + 'dynamic' => [
267 + 'active' => true,
268 + ],
269 + ]
270 + );
271 + $this->add_control(
272 + 'email_placeholder',
273 + [
274 + 'label' => esc_html__('Placeholder', 'uicore-elements'),
275 + 'type' => Controls_Manager::TEXT,
276 + 'default' => esc_html__('Your e-mail', 'uicore-elements'),
277 + 'dynamic' => [
278 + 'active' => true,
279 + ],
280 + ]
281 + );
282 + $this->add_control(
283 + 'email_required',
284 + [
285 + 'label' => esc_html__('Required', 'uicore-elements'),
286 + 'type' => Controls_Manager::SWITCHER,
287 + 'return_value' => 'true',
288 + 'default' => '',
289 + ]
290 + );
291 + $this->add_responsive_control(
292 + 'email_width',
293 + [
294 + 'label' => esc_html__('Column Width', 'uicore-elements'),
295 + 'type' => Controls_Manager::SELECT,
296 + 'options' => $this->TRAIT_get_width_values(),
297 + 'default' => '40',
298 + ]
299 + );
300 + $this->add_control(
301 + 'email_css',
302 + [
303 + 'label' => esc_html__('Custom Class', 'uicore-elements'),
304 + 'type' => Controls_Manager::TEXT,
305 + 'default' => '',
306 + 'ai' => [
307 + 'active' => false,
308 + ],
309 + 'separator' => 'before',
310 + 'placeholder' => esc_html__('e.g: my-class', 'uicore-elements'),
311 + ]
312 + );
313 + $this->add_control(
314 + 'email_shortcode',
315 + [
316 + 'label' => esc_html__('Shortcode', 'uicore-elements'),
317 + 'type' => Controls_Manager::RAW_HTML,
318 + 'classes' => 'forms-field-shortcode',
319 + 'raw' => '<input class="elementor-form-field-shortcode" value=\'[field id="email"]\' readonly />',
320 + ]
321 + );
305 322
306 - $this->end_controls_tab();
323 + $this->end_controls_tab();
307 324
308 - $this->start_controls_tab(
309 - 'name_tab',
310 - [
311 - 'label' => esc_html__( 'Name', 'uicore-elements' ),
312 - 'condition' => [
313 - 'add_name' => 'true',
314 - ],
315 - ]
316 - );
325 + $this->start_controls_tab(
326 + 'name_tab',
327 + [
328 + 'label' => esc_html__('Name', 'uicore-elements'),
329 + 'condition' => [
330 + 'add_name' => 'true',
331 + ],
332 + ]
333 + );
317 334
318 - $this->add_control(
319 - 'name_label',
320 - [
321 - 'label' => esc_html__( 'Label', 'uicore-elements' ),
322 - 'type' => Controls_Manager::TEXT,
323 - 'default' => '',
324 - 'dynamic' => [
325 - 'active' => true,
326 - ],
327 - ]
328 - );
329 - $this->add_control(
330 - 'name_placeholder',
331 - [
332 - 'label' => esc_html__( 'Placeholder', 'uicore-elements' ),
333 - 'type' => Controls_Manager::TEXT,
334 - 'default' => esc_html__('Your name', 'uicore-elements'),
335 - 'dynamic' => [
336 - 'active' => true,
337 - ],
338 - ]
339 - );
340 - $this->add_control(
341 - 'name_required',
342 - [
343 - 'label' => esc_html__( 'Required', 'uicore-elements' ),
344 - 'type' => Controls_Manager::SWITCHER,
345 - 'return_value' => 'true',
346 - 'default' => '',
347 - ]
348 - );
349 - $this->add_responsive_control(
350 - 'name_width',
351 - [
352 - 'label' => esc_html__( 'Column Width', 'uicore-elements' ),
353 - 'type' => Controls_Manager::SELECT,
354 - 'options' => $this->TRAIT_get_width_values(),
355 - 'default' => '40',
356 - ]
357 - );
358 - $this->add_control(
359 - 'name_css',
360 - [
361 - 'label' => esc_html__( 'Custom Class', 'uicore-elements' ),
362 - 'type' => Controls_Manager::TEXT,
363 - 'default' => '',
364 - 'ai' => [
365 - 'active' => false,
366 - ],
367 - 'separator' => 'before',
368 - 'placeholder' => esc_html__( 'e.g: my-class', 'uicore-elements' ),
369 - ]
370 - );
371 - $this->add_control(
372 - 'name_shortcode',
373 - [
374 - 'label' => esc_html__( 'Shortcode', 'uicore-elements' ),
375 - 'type' => Controls_Manager::RAW_HTML,
376 - 'classes' => 'forms-field-shortcode',
377 - 'raw' => '<input class="elementor-form-field-shortcode" value=\'[field id="name"]\' readonly />',
378 - ]
379 - );
380 -
381 - $this->end_controls_tab();
382 -
383 - $this->start_controls_tab(
384 - 'recaptcha_tab',
385 - [
386 - 'label' => esc_html__( 'Recaptcha', 'uicore-elements' ),
387 - 'condition' => [
388 - 'add_recaptcha' => 'true',
389 - ],
390 - ]
391 - );
392 -
393 - $this->add_control(
394 - 'recaptcha_version',
395 - [
396 - 'label' => esc_html__( 'Recaptcha Version', 'uicore-elements' ),
397 - 'type' => Controls_Manager::SELECT,
398 - 'options' => [
399 - 'v2' => 'V2',
400 - 'v3' => 'V3',
401 - ],
402 - 'default' => 'v2',
403 - ]
404 - );
405 - $this->add_control(
406 - 'recaptcha_hide',
407 - [
408 - 'label' => esc_html__( 'Badge', 'uicore-elements' ),
409 - 'type' => Controls_Manager::SELECT,
410 - 'default' => 'hidden',
411 - 'options' => [
412 - 'hidden' => esc_html__( 'Hidden', 'uicore-elements' ),
413 - 'visible' => esc_html__( 'Visible', 'uicore-elements' )
414 - ],
415 - 'condition' => [
416 - 'recaptcha_version' => 'v3',
417 - ],
418 - 'selectors' => [
419 - '.grecaptcha-badge' => 'visibility: {{VALUE}};',
420 - ],
421 - ]
422 - );
423 - $recaptcha_keys = (!get_option('uicore_elements_recaptcha_secret_key') && !get_option('uicore_elements_recaptcha_site_key')) ? true : false; // Check if recaptcha API keys were set
424 - $this->add_control(
425 - 'recaptcha_warning',
426 - [
427 - 'type' => Controls_Manager::ALERT,
428 - 'alert_type' => 'warning',
429 - 'dismissible' => false,
430 - 'heading' => esc_html__("You haven't set your reCAPTCHA API keys yet.", 'uicore-elements'),
431 - 'content' => Helper::get_admin_settings_url( esc_html__("Click here to configure your API keys.", 'uicore-elements' ) ),
432 - 'condition' => [
433 - 'add_recaptcha' => $recaptcha_keys ? 'true' : [],
434 - ]
435 - ]
436 - );
437 -
438 - $this->end_controls_tab();
439 -
440 - $this->end_controls_tabs();
441 -
442 - $this->end_controls_section();
443 -
444 - $this->start_controls_section(
445 - 'section_buttons',
335 + $this->add_control(
336 + 'name_label',
446 337 [
447 - 'label' => esc_html__( 'Button', 'uicore-elements' ),
338 + 'label' => esc_html__('Label', 'uicore-elements'),
339 + 'type' => Controls_Manager::TEXT,
340 + 'default' => '',
341 + 'dynamic' => [
342 + 'active' => true,
343 + ],
448 344 ]
449 345 );
450 -
451 - $this->TRAIT_register_button_controls('Subscribe');
452 -
453 - $this->end_controls_section();
454 -
455 - $this->start_controls_section(
456 - 'section_actions',
346 + $this->add_control(
347 + 'name_placeholder',
457 348 [
458 - 'label' => esc_html__( 'Actions After Submit', 'uicore-elements' ),
349 + 'label' => esc_html__('Placeholder', 'uicore-elements'),
350 + 'type' => Controls_Manager::TEXT,
351 + 'default' => esc_html__('Your name', 'uicore-elements'),
352 + 'dynamic' => [
353 + 'active' => true,
354 + ],
459 355 ]
460 356 );
357 + $this->add_control(
358 + 'name_required',
359 + [
360 + 'label' => esc_html__('Required', 'uicore-elements'),
361 + 'type' => Controls_Manager::SWITCHER,
362 + 'return_value' => 'true',
363 + 'default' => '',
364 + ]
365 + );
366 + $this->add_responsive_control(
367 + 'name_width',
368 + [
369 + 'label' => esc_html__('Column Width', 'uicore-elements'),
370 + 'type' => Controls_Manager::SELECT,
371 + 'options' => $this->TRAIT_get_width_values(),
372 + 'default' => '40',
373 + ]
374 + );
375 + $this->add_control(
376 + 'name_css',
377 + [
378 + 'label' => esc_html__('Custom Class', 'uicore-elements'),
379 + 'type' => Controls_Manager::TEXT,
380 + 'default' => '',
381 + 'ai' => [
382 + 'active' => false,
383 + ],
384 + 'separator' => 'before',
385 + 'placeholder' => esc_html__('e.g: my-class', 'uicore-elements'),
386 + ]
387 + );
388 + $this->add_control(
389 + 'name_shortcode',
390 + [
391 + 'label' => esc_html__('Shortcode', 'uicore-elements'),
392 + 'type' => Controls_Manager::RAW_HTML,
393 + 'classes' => 'forms-field-shortcode',
394 + 'raw' => '<input class="elementor-form-field-shortcode" value=\'[field id="name"]\' readonly />',
395 + ]
396 + );
461 397
462 - $this->add_control(
463 - 'submit_actions',
464 - [
465 - 'label' => esc_html__( 'Submit Actions', 'uicore-elements' ),
466 - 'type' => Controls_Manager::SELECT2,
467 - 'label_block' => true,
468 - 'multiple' => true,
469 - 'options' => [
470 - 'email' => esc_html__( 'Email', 'uicore-elements' ),
471 - 'email_2' => esc_html__( 'Email 2', 'uicore-elements' ),
472 - 'redirect' => esc_html__( 'Redirect', 'uicore-elements' ),
473 - 'mailchimp' => esc_html__( 'MailChimp', 'uicore-elements' ),
474 - ],
475 - 'default' => [ 'email' ],
476 - ]
477 - );
398 + $this->end_controls_tab();
478 399
479 - $this->end_controls_section();
480 -
481 - // Submit sections
482 - $this->start_controls_section(
483 - 'section_email',
400 + $this->start_controls_tab(
401 + 'recaptcha_tab',
484 402 [
485 - 'label' => esc_html__( 'Email', 'uicore-elements' ),
403 + 'label' => esc_html__('Recaptcha', 'uicore-elements'),
486 404 'condition' => [
487 - 'submit_actions' => 'email',
405 + 'add_recaptcha' => 'true',
488 406 ],
489 407 ]
490 408 );
491 409
492 - $this->TRAIT_register_submit_email_controls($this);
493 -
494 - $this->end_controls_section();
495 -
496 - $this->start_controls_section(
497 - 'section_email_2',
410 + $this->add_control(
411 + 'recaptcha_version',
498 412 [
499 - 'label' => esc_html__( 'Email 2', 'uicore-elements' ),
413 + 'label' => esc_html__('Recaptcha Version', 'uicore-elements'),
414 + 'type' => Controls_Manager::SELECT,
415 + 'options' => [
416 + 'v2' => 'V2',
417 + 'v3' => 'V3',
418 + ],
419 + 'default' => 'v2',
420 + ]
421 + );
422 + $this->add_control(
423 + 'recaptcha_hide',
424 + [
425 + 'label' => esc_html__('Badge', 'uicore-elements'),
426 + 'type' => Controls_Manager::SELECT,
427 + 'default' => 'hidden',
428 + 'options' => [
429 + 'hidden' => esc_html__('Hidden', 'uicore-elements'),
430 + 'visible' => esc_html__('Visible', 'uicore-elements')
431 + ],
500 432 'condition' => [
501 - 'submit_actions' => 'email_2',
433 + 'recaptcha_version' => 'v3',
502 434 ],
435 + 'selectors' => [
436 + '.grecaptcha-badge' => 'visibility: {{VALUE}};',
437 + ],
503 438 ]
504 439 );
440 + $recaptcha_keys = (!get_option('uicore_elements_recaptcha_secret_key') && !get_option('uicore_elements_recaptcha_site_key')) ? true : false; // Check if recaptcha API keys were set
441 + $this->add_control(
442 + 'recaptcha_warning',
443 + [
444 + 'type' => Controls_Manager::ALERT,
445 + 'alert_type' => 'warning',
446 + 'dismissible' => false,
447 + 'heading' => esc_html__("You haven't set your reCAPTCHA API keys yet.", 'uicore-elements'),
448 + 'content' => Helper::get_admin_settings_url(esc_html__("Click here to configure your API keys.", 'uicore-elements')),
449 + 'condition' => [
450 + 'add_recaptcha' => $recaptcha_keys ? 'true' : [],
451 + ]
452 + ]
453 + );
505 454
506 - $this->TRAIT_register_submit_email_controls($this, '_2');
455 + $this->end_controls_tab();
507 456
457 + $this->end_controls_tabs();
458 +
508 459 $this->end_controls_section();
509 460
510 461 $this->start_controls_section(
511 - 'section_redirect',
462 + 'section_buttons',
512 463 [
513 - 'label' => esc_html__( 'Redirect', 'uicore-elements' ),
514 - 'condition' => [
515 - 'submit_actions' => 'redirect',
516 - ],
464 + 'label' => esc_html__('Button', 'uicore-elements'),
517 465 ]
518 466 );
519 467
520 - $this->TRAIT_register_submit_redirect_controls();
468 + $this->TRAIT_register_button_controls('Subscribe');
521 469
522 470 $this->end_controls_section();
523 471
472 + $this->TRAIT_register_submit_actions_controls(Form_Service::get_form_submit_options());
473 +
474 + // Submit sections
524 475 $this->start_controls_section(
525 - 'mailchimp_redirect',
476 + 'section_email',
526 477 [
527 - 'label' => esc_html__( 'Mailchimp', 'uicore-elements' ),
478 + 'label' => esc_html__('Email', 'uicore-elements'),
528 479 'condition' => [
529 - 'submit_actions' => 'mailchimp',
480 + 'submit_actions' => 'email',
530 481 ],
531 482 ]
532 483 );
533 484
534 - $this->TRAIT_register_submit_mailchimp_controls();
485 + $this->TRAIT_register_submit_email_controls($this);
535 486
536 487 $this->end_controls_section();
537 488
538 489 $this->start_controls_section(
539 - 'section_form_options',
490 + 'section_email_2',
540 491 [
541 - 'label' => esc_html__( 'Additional Options', 'uicore-elements' ),
542 - 'tab' => Controls_Manager::TAB_CONTENT,
492 + 'label' => esc_html__('Email 2', 'uicore-elements'),
493 + 'condition' => [
494 + 'submit_actions' => 'email_2',
495 + ],
543 496 ]
544 497 );
545 498
546 - $this->TRAIT_register_additional_controls( Contact_Form_Service::get_default_messages() );
499 + $this->TRAIT_register_submit_email_controls($this, '_2');
547 500
548 501 $this->end_controls_section();
549 502
503 + $this->TRAIT_register_submit_redirect_controls();
504 + $this->TRAIT_register_submit_popup_controls($this);
505 + $this->TRAIT_register_submit_webhook_controls();
506 + $this->TRAIT_register_submit_newsletter_services_controls(Newsletter_Services::get_services_list('keys'));
507 + $this->TRAIT_register_additional_controls(Form_Service::get_default_messages());
508 +
550 509 $this->TRAIT_register_all_form_style_controls();
551 - }
510 + }
552 511
553 - protected function render() {
512 + protected function render()
513 + {
554 514
555 - $instance = $this->get_settings_for_display();
515 + $instance = $this->get_settings_for_display();
556 516 $is_recaptcha_required = false;
557 517
558 518 // Save widget settings so form API can retrieve them
559 519 set_transient('ui_e_form_widget_settings_' . $this->get_id(), $instance, DAY_IN_SECONDS);
@@ -558,159 +518,159 @@
558 518 // Save widget settings so form API can retrieve them
559 519 set_transient('ui_e_form_widget_settings_' . $this->get_id(), $instance, DAY_IN_SECONDS);
560 520
561 521 // Render Form and Fields Atts
562 - $this->add_render_attribute(
563 - [
564 - 'wrapper' => [
565 - 'class' => [
566 - 'ui-e-fields-wrp',
567 - ],
568 - ],
569 - 'submit-group' => [
570 - 'class' => [
571 - 'ui-e-field-group',
572 - 'elementor-column',
573 - 'ui-e-field-type-submit',
574 - ],
575 - ],
576 - 'button' => [
577 - 'class' => 'elementor-button',
578 - ],
579 - 'icon-align' => [
580 - 'class' => [
581 - empty( $instance['button_icon_align'] ) ? '' : 'ui-e-icon ui-e-align-' . $instance['button_icon_align'],
582 - ],
583 - ],
584 - ]
585 - );
586 - if($instance['add_name'] == 'true') {
587 - $this->form_fields_render_attributes( '_name', $instance, 'name' );
522 + $this->add_render_attribute(
523 + [
524 + 'wrapper' => [
525 + 'class' => [
526 + 'ui-e-fields-wrp',
527 + ],
528 + ],
529 + 'submit-group' => [
530 + 'class' => [
531 + 'ui-e-field-group',
532 + 'elementor-column',
533 + 'ui-e-field-type-submit',
534 + ],
535 + ],
536 + 'button' => [
537 + 'class' => 'elementor-button',
538 + ],
539 + 'icon-align' => [
540 + 'class' => [
541 + empty($instance['button_icon_align']) ? '' : 'ui-e-icon ui-e-align-' . $instance['button_icon_align'],
542 + ],
543 + ],
544 + ]
545 + );
546 + if ($instance['add_name'] == 'true') {
547 + $this->form_fields_render_attributes('_name', $instance, 'name');
588 548 }
589 - $this->form_fields_render_attributes( '_email', $instance, 'email' );
549 + $this->form_fields_render_attributes('_email', $instance, 'email');
590 550
591 551 // Fallback for empty control values
592 - if ( empty( $instance['button_width'] ) ) {
593 - $instance['button_width'] = '100';
594 - }
552 + if (empty($instance['button_width'])) {
553 + $instance['button_width'] = '100';
554 + }
595 555
596 - // Button atts
597 - $this->add_render_attribute( 'submit-group', 'class', 'elementor-col-' . $instance['button_width'] . ' e-form__buttons' );
556 + // Button atts
557 + $this->add_render_attribute('submit-group', 'class', 'elementor-col-' . $instance['button_width'] . ' e-form__buttons');
598 558
599 - if ( ! empty( $instance['button_width_tablet'] ) ) {
600 - $this->add_render_attribute( 'submit-group', 'class', 'elementor-md-' . $instance['button_width_tablet'] );
601 - }
602 - if ( ! empty( $instance['button_width_mobile'] ) ) {
603 - $this->add_render_attribute( 'submit-group', 'class', 'elementor-sm-' . $instance['button_width_mobile'] );
604 - }
605 - if ( $instance['button_hover_animation'] ) {
606 - $this->add_render_attribute( 'button', 'class', 'elementor-animation-' . $instance['button_hover_animation'] );
607 - }
559 + if (! empty($instance['button_width_tablet'])) {
560 + $this->add_render_attribute('submit-group', 'class', 'elementor-md-' . $instance['button_width_tablet']);
561 + }
562 + if (! empty($instance['button_width_mobile'])) {
563 + $this->add_render_attribute('submit-group', 'class', 'elementor-sm-' . $instance['button_width_mobile']);
564 + }
565 + if ($instance['button_hover_animation']) {
566 + $this->add_render_attribute('button', 'class', 'elementor-animation-' . $instance['button_hover_animation']);
567 + }
608 568
609 - // Form atts
610 - if ( ! empty( $instance['form_id'] ) ) {
611 - $this->add_render_attribute( 'form', 'id', $instance['form_id'] );
612 - }
613 - if ( ! empty( $instance['form_name'] ) ) {
614 - $this->add_render_attribute( 'form', 'name', $instance['form_name'] );
615 - }
616 - if ( 'no' === $instance['form_validation'] ) {
617 - $this->add_render_attribute( 'form', 'novalidate' );
618 - }
619 - if ( ! empty( $instance['button_css_id'] ) ) {
620 - $this->add_render_attribute( 'button', 'id', $instance['button_css_id'] );
621 - }
569 + // Form atts
570 + if (! empty($instance['form_id'])) {
571 + $this->add_render_attribute('form', 'id', $instance['form_id']);
572 + }
573 + if (! empty($instance['form_name'])) {
574 + $this->add_render_attribute('form', 'name', $instance['form_name']);
575 + }
576 + if ('no' === $instance['form_validation']) {
577 + $this->add_render_attribute('form', 'novalidate');
578 + }
579 + if (! empty($instance['button_css_id'])) {
580 + $this->add_render_attribute('button', 'id', $instance['button_css_id']);
581 + }
622 582
623 583 // Basic settings
624 584 $print_label = $instance['show_labels'] == 'true';
625 - ?>
585 +?>
626 586
627 - <form class="ui-e-form" method="post" <?php $this->print_render_attribute_string( 'form' ); ?>>
587 + <form class="ui-e-form" method="post" <?php $this->print_render_attribute_string('form'); ?>>
628 588
629 - <input type="hidden" name="widget_id" value="<?php echo esc_attr( $this->get_id() ); ?>"/>
589 + <input type="hidden" name="widget_id" value="<?php echo esc_attr($this->get_id()); ?>" />
630 590 <input type="hidden" name="widget_type" value="newsletter">
631 591
632 - <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
592 + <div <?php $this->print_render_attribute_string('wrapper'); ?>>
633 593
634 - <?php if($instance['add_name'] == 'true') : ?>
635 - <div <?php $this->print_render_attribute_string( 'field-group_name'); ?>>
636 - <?php if ( $print_label && $instance['name_label'] ) : ?>
637 - <label <?php $this->print_render_attribute_string( 'label_name' ); ?>>
638 - <?php echo esc_html($instance['name_label']);?>
594 + <?php if ($instance['add_name'] == 'true') : ?>
595 + <div <?php $this->print_render_attribute_string('field-group_name'); ?>>
596 + <?php if ($print_label && $instance['name_label']) : ?>
597 + <label <?php $this->print_render_attribute_string('label_name'); ?>>
598 + <?php echo esc_html($instance['name_label']); ?>
639 599 </label>
640 600 <?php endif; ?>
641 - <input <?php $this->print_render_attribute_string( 'input_name'); ?>>
601 + <input <?php $this->print_render_attribute_string('input_name'); ?>>
642 602 </div>
643 603 <?php endif; ?>
644 604
645 - <div <?php $this->print_render_attribute_string( 'field-group_email'); ?>>
646 - <?php if ( $print_label && $instance['email_label'] ) : ?>
647 - <label <?php $this->print_render_attribute_string( 'label_email' ); ?>>
648 - <?php echo esc_html($instance['email_label']);?>
605 + <div <?php $this->print_render_attribute_string('field-group_email'); ?>>
606 + <?php if ($print_label && $instance['email_label']) : ?>
607 + <label <?php $this->print_render_attribute_string('label_email'); ?>>
608 + <?php echo esc_html($instance['email_label']); ?>
649 609 </label>
650 610 <?php endif; ?>
651 - <input <?php $this->print_render_attribute_string( 'input_email'); ?>>
611 + <input <?php $this->print_render_attribute_string('input_email'); ?>>
652 612 </div>
653 613
654 - <?php if($instance['add_honeypot'] == 'true') : ?>
655 - <div <?php $this->print_render_attribute_string( 'honeypot'); ?>>
614 + <?php if ($instance['add_honeypot'] == 'true') : ?>
615 + <div <?php $this->print_render_attribute_string('honeypot'); ?>>
656 616 <label for="form-field-address" class="ui-e-label">
657 - <?php echo esc_html__( 'Address', 'uicore-elements' ); ?>
617 + <?php echo esc_html__('Address', 'uicore-elements'); ?>
658 618 </label>
659 619 <input class="ui-e-field ui-e-h-p" name="ui-e-h-p" id="ui-e-h-p" tabindex="-1" autocomplete="off">
660 620 </div>
661 621 <?php endif; ?>
662 622
663 - <div <?php $this->print_render_attribute_string( 'submit-group' ); ?>>
664 - <button type="submit" <?php $this->print_render_attribute_string( 'button' ); ?>>
665 - <span <?php $this->print_render_attribute_string( 'content-wrapper' ); ?>>
666 - <?php if ( ! empty( $instance['button_icon'] ) || ! empty( $instance['selected_button_icon'] ) ) : ?>
667 - <span <?php $this->print_render_attribute_string( 'icon-align' ); ?>>
668 - <?php Icons_Manager::render_icon( $instance['selected_button_icon'], [ 'aria-hidden' => 'true' ] ); ?>
669 - <?php if ( empty( $instance['button_text'] ) ) : ?>
670 - <span class="elementor-screen-only"><?php echo esc_html__( 'Submit', 'uicore-elements' ); ?></span>
671 - <?php endif; ?>
672 - </span>
673 - <?php endif; ?>
674 - <?php if ( ! empty( $instance['button_text'] ) ) : ?>
675 - <span class="ui-e-text"><?php $this->print_unescaped_setting( 'button_text' ); ?></span>
676 - <?php endif; ?>
677 - </span>
678 - </button>
679 - </div>
623 + <div <?php $this->print_render_attribute_string('submit-group'); ?>>
624 + <button type="submit" <?php $this->print_render_attribute_string('button'); ?>>
625 + <span <?php $this->print_render_attribute_string('content-wrapper'); ?>>
626 + <?php if (! empty($instance['button_icon']) || ! empty($instance['selected_button_icon'])) : ?>
627 + <span <?php $this->print_render_attribute_string('icon-align'); ?>>
628 + <?php Icons_Manager::render_icon($instance['selected_button_icon'], ['aria-hidden' => 'true']); ?>
629 + <?php if (empty($instance['button_text'])) : ?>
630 + <span class="elementor-screen-only"><?php echo esc_html__('Submit', 'uicore-elements'); ?></span>
631 + <?php endif; ?>
632 + </span>
633 + <?php endif; ?>
634 + <?php if (! empty($instance['button_text'])) : ?>
635 + <span class="ui-e-text"><?php $this->print_unescaped_setting('button_text'); ?></span>
636 + <?php endif; ?>
637 + </span>
638 + </button>
639 + </div>
680 640
681 641 <?php
682 - if($instance['add_recaptcha'] == 'true') :
683 - $recaptcha_type = $instance['recaptcha_version'] === 'v2' ? 'recaptcha' : 'recaptcha_v3';
684 - $is_recaptcha_required = true;
642 + if ($instance['add_recaptcha'] == 'true') :
643 + $recaptcha_type = $instance['recaptcha_version'] === 'v2' ? 'recaptcha' : 'recaptcha_v3';
644 + $is_recaptcha_required = true;
685 645 ?>
686 646 <div <?php $this->print_render_attribute_string($recaptcha_type); ?>>
687 - <input type="hidden" name="<?php echo esc_attr($recaptcha_type);?>">
688 - <?php if($instance['recaptcha_version'] == 'v2') : ?>
689 - <div id="ui-e-recaptcha-<?php echo esc_attr( $this->get_ID() ); ?>"></div>
647 + <input type="hidden" name="<?php echo esc_attr($recaptcha_type); ?>">
648 + <?php if ($instance['recaptcha_version'] == 'v2') : ?>
649 + <div id="ui-e-recaptcha-<?php echo esc_attr($this->get_ID()); ?>"></div>
690 650 <?php endif; ?>
691 651 </div>
692 652 <?php endif; ?>
693 653
694 - </div>
654 + </div>
695 655
696 656 <div class="ui-e-message <?php echo $this->is_edit_mode() ? 'elementor-hidden' : ''; ?>">
697 - <?php if($this->is_edit_mode()) :
657 + <?php if ($this->is_edit_mode()) :
698 658 // Get custom messages if set, else use default
699 - $messages = Contact_Form_Service::get_default_messages();
659 + $messages = Form_Service::get_default_messages();
700 660 $success = isset($instance['success_message']) ? $instance['success_message'] : $messages['success'];
701 661 $error = isset($instance['error_message']) ? $instance['error_message'] : $messages['error'];
702 - ?>
703 - <span class="success"> <?php echo esc_html($success);?> </span> <br>
704 - <span class="error"> <?php echo esc_html($error);?> </span>
705 - <?php endif; ?>
662 + ?>
663 + <span class="success"> <?php echo esc_html($success); ?> </span> <br>
664 + <span class="error"> <?php echo esc_html($error); ?> </span>
665 + <?php endif; ?>
706 666 </div>
707 - </form>
708 - <?php
667 + </form>
668 +<?php
709 669
710 670 //add js to footer if recaptcha is enabled
711 - if($is_recaptcha_required){
671 + if ($is_recaptcha_required) {
712 672 add_action('wp_footer', [$this, 'TRAIT_recaptcha_key_js'], 999);
713 673 }
714 - }
674 + }
715 675 }
716 -\Elementor\Plugin::instance()->widgets_manager->register(new Newsletter());
676 +\Elementor\Plugin::instance()->widgets_manager->register(new Newsletter());