PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.78
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.78
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Login_Register_Form / Login_Register_Form.php

Login_Register_Form.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.78, at includes/widgets/Login_Register_Form/Login_Register_Form.php

3,428 lines 138.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace King_Addons;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Group_Control_Border;
7 use Elementor\Group_Control_Box_Shadow;
8 use Elementor\Group_Control_Typography;
9 use Elementor\Widget_Base;
10 use Elementor\Utils;
11
12 if (!defined('ABSPATH')) {
13 exit; // Exit if accessed directly.
14 }
15
16 /**
17 * Login Register Form Widget for King Addons
18 *
19 * @since 1.0.0
20 */
21 class Login_Register_Form extends Widget_Base
22 {
23 public function __construct($data = [], $args = null)
24 {
25 parent::__construct($data, $args);
26 }
27
28 public function get_name()
29 {
30 return 'king-addons-login-register-form';
31 }
32
33 public function get_title()
34 {
35 return esc_html__('Login | Register Form', 'king-addons');
36 }
37
38 public function get_icon()
39 {
40 return 'king-addons-icon king-addons-login-register-form';
41 }
42
43 public function get_categories()
44 {
45 return ['king-addons'];
46 }
47
48 public function get_keywords()
49 {
50 return ['login', 'register', 'form', 'user', 'authentication', 'sign in', 'sign up', 'king addons'];
51 }
52
53 public function get_script_depends()
54 {
55 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-login-register-form-script'];
56 }
57
58 public function get_style_depends()
59 {
60 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-login-register-form-style'];
61 }
62
63 public function get_custom_help_url()
64 {
65 return 'https://kingaddons.com/';
66 }
67
68 /**
69 * Get user roles for select control
70 */
71 protected function get_user_roles()
72 {
73 global $wp_roles;
74
75 if (!isset($wp_roles)) {
76 $wp_roles = new \WP_Roles();
77 }
78
79 $roles = [];
80 foreach ($wp_roles->roles as $role_key => $role) {
81 $roles[$role_key] = $role['name'];
82 }
83
84 return $roles;
85 }
86
87 /**
88 * Render form header with logo and illustration
89 */
90 protected function render_form_header($settings)
91 {
92 if ($settings['show_form_header'] !== 'yes') {
93 return;
94 }
95
96 $has_logo = !empty($settings['form_logo']['url']);
97 $has_illustration = !empty($settings['form_illustration']['url']);
98
99 if (!$has_logo && !$has_illustration) {
100 return;
101 }
102
103 $illustration_position = $settings['form_illustration_position'];
104 $wrapper_class = 'king-addons-form-header';
105
106 if ($has_illustration) {
107 $wrapper_class .= ' king-addons-form-header-' . $illustration_position;
108 }
109 ?>
110 <div class="<?php echo esc_attr($wrapper_class); ?>">
111 <?php if ($has_illustration && in_array($illustration_position, ['left', 'top'])): ?>
112 <div class="king-addons-form-illustration">
113 <img src="<?php echo esc_url($settings['form_illustration']['url']); ?>"
114 alt="<?php echo esc_attr(get_post_meta($settings['form_illustration']['id'], '_wp_attachment_image_alt', true)); ?>">
115 </div>
116 <?php endif; ?>
117
118 <div class="king-addons-form-header-content">
119 <?php if ($has_logo): ?>
120 <div class="king-addons-form-header-logo">
121 <img src="<?php echo esc_url($settings['form_logo']['url']); ?>"
122 alt="<?php echo esc_attr(get_post_meta($settings['form_logo']['id'], '_wp_attachment_image_alt', true)); ?>">
123 </div>
124 <?php endif; ?>
125 </div>
126
127 <?php if ($has_illustration && in_array($illustration_position, ['right', 'bottom'])): ?>
128 <div class="king-addons-form-illustration">
129 <img src="<?php echo esc_url($settings['form_illustration']['url']); ?>"
130 alt="<?php echo esc_attr(get_post_meta($settings['form_illustration']['id'], '_wp_attachment_image_alt', true)); ?>">
131 </div>
132 <?php endif; ?>
133 </div>
134 <?php
135 }
136
137 /**
138 * Render social login buttons
139 */
140 protected function render_social_login($settings, $context = 'login')
141 {
142 // Only render social login for Pro users
143 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
144 return;
145 }
146
147 if ($settings['enable_social_login'] !== 'yes') {
148 return;
149 }
150
151 $show_google = $settings['enable_google_login'] === 'yes' && !empty($settings['google_client_id']);
152 $show_facebook = $settings['enable_facebook_login'] === 'yes' && !empty($settings['facebook_app_id']);
153
154 if (!$show_google && !$show_facebook) {
155 return;
156 }
157 ?>
158 <div class="king-addons-social-login">
159 <?php if ($settings['social_login_separator'] === 'yes'): ?>
160 <div class="king-addons-social-separator">
161 <span><?php echo esc_html($settings['social_login_heading'] ?? 'Or login with:'); ?></span>
162 </div>
163 <?php endif; ?>
164
165 <div class="king-addons-social-buttons">
166 <?php if ($show_google): ?>
167 <button type="button" class="king-addons-social-button king-addons-google-login"
168 data-client-id="<?php echo esc_attr($settings['google_client_id']); ?>"
169 data-context="<?php echo esc_attr($context); ?>">
170 <svg width="18" height="18" viewBox="0 0 24 24">
171 <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
172 <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
173 <path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
174 <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
175 </svg>
176 <?php echo esc_html__('Continue with Google', 'king-addons'); ?>
177 </button>
178 <?php endif; ?>
179
180 <?php if ($show_facebook): ?>
181 <button type="button" class="king-addons-social-button king-addons-facebook-login"
182 data-app-id="<?php echo esc_attr($settings['facebook_app_id']); ?>"
183 data-context="<?php echo esc_attr($context); ?>">
184 <svg width="18" height="18" viewBox="0 0 24 24">
185 <path fill="#1877F2" d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/>
186 </svg>
187 <?php echo esc_html__('Continue with Facebook', 'king-addons'); ?>
188 </button>
189 <?php endif; ?>
190 </div>
191 </div>
192 <?php
193 }
194
195 /**
196 * Render custom fields
197 */
198 protected function render_custom_fields($settings, $show_labels = true)
199 {
200 // Only render custom fields for Pro users
201 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
202 return;
203 }
204
205 if (empty($settings['custom_fields'])) {
206 return;
207 }
208
209 foreach ($settings['custom_fields'] as $index => $field) {
210 $field_id = 'custom_field_' . $index;
211 $field_name = 'custom_field_' . $index;
212 $field_class = 'king-addons-form-field';
213 $field_label = !empty($field['field_label']) ? $field['field_label'] : 'Field ' . ($index + 1);
214
215 if ($field['field_width'] === 'half') {
216 $field_class .= ' king-addons-field-half';
217 }
218
219 $required = $field['field_required'] === 'yes' ? 'required' : '';
220 ?>
221 <div class="<?php echo esc_attr($field_class); ?>" data-field-label="<?php echo esc_attr($field_label); ?>">
222 <?php if ($show_labels && !empty($field['field_label'])): ?>
223 <label for="<?php echo esc_attr($field_id); ?>">
224 <?php echo esc_html($field['field_label']); ?>
225 <?php if ($required): ?><span class="required">*</span><?php endif; ?>
226 </label>
227 <?php endif; ?>
228
229 <?php
230 switch ($field['field_type']) {
231 case 'textarea':
232 ?>
233 <textarea id="<?php echo esc_attr($field_id); ?>"
234 name="<?php echo esc_attr($field_name); ?>"
235 placeholder="<?php echo esc_attr($field['field_placeholder']); ?>"
236 <?php echo $required; ?>
237 rows="4"></textarea>
238 <?php
239 break;
240
241 case 'select':
242 ?>
243 <select id="<?php echo esc_attr($field_id); ?>"
244 name="<?php echo esc_attr($field_name); ?>"
245 <?php echo $required; ?>>
246 <option value=""><?php echo esc_html__('Select an option', 'king-addons'); ?></option>
247 <?php
248 $options = explode("\n", $field['field_options']);
249 foreach ($options as $option) {
250 $option = trim($option);
251 if (empty($option)) continue;
252
253 $parts = explode('|', $option);
254 $value = trim($parts[0]);
255 $label = isset($parts[1]) ? trim($parts[1]) : $value;
256 ?>
257 <option value="<?php echo esc_attr($value); ?>"><?php echo esc_html($label); ?></option>
258 <?php
259 }
260 ?>
261 </select>
262 <?php
263 break;
264
265 case 'file':
266 ?>
267 <input type="file"
268 id="<?php echo esc_attr($field_id); ?>"
269 name="<?php echo esc_attr($field_name); ?>"
270 <?php echo $required; ?>>
271 <?php
272 break;
273
274 case 'checkbox':
275 ?>
276 <div class="king-addons-checkbox-group">
277 <?php
278 $options = explode("\n", $field['field_options']);
279 foreach ($options as $option_index => $option) {
280 $option = trim($option);
281 if (empty($option)) continue;
282
283 $parts = explode('|', $option);
284 $value = trim($parts[0]);
285 $label = isset($parts[1]) ? trim($parts[1]) : $value;
286 $option_id = $field_id . '_' . $option_index;
287 ?>
288 <div class="king-addons-checkbox-option">
289 <input type="checkbox"
290 id="<?php echo esc_attr($option_id); ?>"
291 name="<?php echo esc_attr($field_name); ?>"
292 value="<?php echo esc_attr($value); ?>"
293 <?php echo $required; ?>>
294 <label for="<?php echo esc_attr($option_id); ?>"><?php echo esc_html($label); ?></label>
295 </div>
296 <?php
297 }
298 ?>
299 </div>
300 <?php
301 break;
302
303 case 'radio':
304 ?>
305 <div class="king-addons-radio-group">
306 <?php
307 $options = explode("\n", $field['field_options']);
308 foreach ($options as $option_index => $option) {
309 $option = trim($option);
310 if (empty($option)) continue;
311
312 $parts = explode('|', $option);
313 $value = trim($parts[0]);
314 $label = isset($parts[1]) ? trim($parts[1]) : $value;
315 $option_id = $field_id . '_' . $option_index;
316 ?>
317 <div class="king-addons-radio-option">
318 <input type="radio"
319 id="<?php echo esc_attr($option_id); ?>"
320 name="<?php echo esc_attr($field_name); ?>"
321 value="<?php echo esc_attr($value); ?>"
322 <?php echo $required; ?>>
323 <label for="<?php echo esc_attr($option_id); ?>"><?php echo esc_html($label); ?></label>
324 </div>
325 <?php
326 }
327 ?>
328 </div>
329 <?php
330 break;
331
332 default:
333 ?>
334 <input type="<?php echo esc_attr($field['field_type']); ?>"
335 id="<?php echo esc_attr($field_id); ?>"
336 name="<?php echo esc_attr($field_name); ?>"
337 placeholder="<?php echo esc_attr($field['field_placeholder']); ?>"
338 <?php echo $required; ?>>
339 <?php
340 break;
341 }
342 ?>
343 </div>
344 <?php
345 }
346 }
347
348 /**
349 * Render reCAPTCHA element
350 */
351 protected function render_recaptcha($settings, $form_type)
352 {
353 if ($settings['enable_recaptcha'] !== 'yes' || empty($settings['recaptcha_site_key'])) {
354 return;
355 }
356
357 if (!in_array($form_type, $settings['recaptcha_apply_on'])) {
358 return;
359 }
360
361 $widget_id = $this->get_id();
362 $recaptcha_id = 'recaptcha-' . $form_type . '-' . $widget_id;
363
364 if ($settings['recaptcha_version'] === 'v2') {
365 ?>
366 <div class="king-addons-recaptcha-field">
367 <div id="<?php echo esc_attr($recaptcha_id); ?>"
368 class="king-addons-recaptcha-v2"
369 data-sitekey="<?php echo esc_attr($settings['recaptcha_site_key']); ?>"
370 data-theme="<?php echo esc_attr($settings['recaptcha_theme']); ?>"
371 data-size="<?php echo esc_attr($settings['recaptcha_size']); ?>">
372 </div>
373 </div>
374 <?php
375 } else {
376 // reCAPTCHA v3 is handled via JavaScript
377 ?>
378 <input type="hidden"
379 name="g-recaptcha-response"
380 class="king-addons-recaptcha-v3"
381 data-sitekey="<?php echo esc_attr($settings['recaptcha_site_key']); ?>"
382 data-action="<?php echo esc_attr($form_type); ?>"
383 data-threshold="<?php echo esc_attr($settings['recaptcha_score_threshold']['size']); ?>">
384 <?php
385 }
386 }
387
388 protected function register_controls()
389 {
390 // General Settings
391 $this->start_controls_section(
392 'section_general',
393 [
394 'label' => esc_html__('General', 'king-addons'),
395 ]
396 );
397
398 $this->add_control(
399 'default_form_type',
400 [
401 'label' => esc_html__('Default Form Type', 'king-addons'),
402 'type' => Controls_Manager::SELECT,
403 'options' => [
404 'login' => esc_html__('Login', 'king-addons'),
405 'register' => esc_html__('Register', 'king-addons'),
406 ],
407 'default' => 'login',
408 ]
409 );
410
411 $this->add_control(
412 'show_labels',
413 [
414 'label' => esc_html__('Show Labels', 'king-addons'),
415 'type' => Controls_Manager::SWITCHER,
416 'label_on' => esc_html__('Yes', 'king-addons'),
417 'label_off' => esc_html__('No', 'king-addons'),
418 'return_value' => 'yes',
419 'default' => 'yes',
420 ]
421 );
422
423 $this->add_control(
424 'enable_ajax',
425 [
426 'label' => esc_html__('Enable AJAX', 'king-addons'),
427 'type' => Controls_Manager::SWITCHER,
428 'label_on' => esc_html__('Yes', 'king-addons'),
429 'label_off' => esc_html__('No', 'king-addons'),
430 'return_value' => 'yes',
431 'default' => 'yes',
432 ]
433 );
434
435 $this->end_controls_section();
436
437 // Form Header Section
438 $this->start_controls_section(
439 'section_form_header',
440 [
441 'label' => esc_html__('Form Header', 'king-addons'),
442 ]
443 );
444
445 $this->add_control(
446 'show_form_header',
447 [
448 'label' => esc_html__('Show Form Header', 'king-addons'),
449 'type' => Controls_Manager::SWITCHER,
450 'label_on' => esc_html__('Yes', 'king-addons'),
451 'label_off' => esc_html__('No', 'king-addons'),
452 'return_value' => 'yes',
453 'default' => '',
454 ]
455 );
456
457 $this->add_control(
458 'form_logo',
459 [
460 'label' => esc_html__('Logo', 'king-addons'),
461 'type' => Controls_Manager::MEDIA,
462 'condition' => [
463 'show_form_header' => 'yes',
464 ],
465 ]
466 );
467
468 $this->add_responsive_control(
469 'form_logo_width',
470 [
471 'label' => esc_html__('Logo Width', 'king-addons'),
472 'type' => Controls_Manager::SLIDER,
473 'size_units' => ['px', '%'],
474 'range' => [
475 'px' => [
476 'min' => 0,
477 'max' => 500,
478 ],
479 '%' => [
480 'min' => 0,
481 'max' => 100,
482 ],
483 ],
484 'default' => [
485 'unit' => 'px',
486 'size' => 150,
487 ],
488 'condition' => [
489 'show_form_header' => 'yes',
490 'form_logo[url]!' => '',
491 ],
492 'selectors' => [
493 '{{WRAPPER}} .king-addons-form-header-logo img' => 'width: {{SIZE}}{{UNIT}};',
494 ],
495 ]
496 );
497
498 $this->add_control(
499 'form_illustration',
500 [
501 'label' => esc_html__('Illustration', 'king-addons'),
502 'type' => Controls_Manager::MEDIA,
503 'condition' => [
504 'show_form_header' => 'yes',
505 ],
506 ]
507 );
508
509 $this->add_control(
510 'form_illustration_position',
511 [
512 'label' => esc_html__('Illustration Position', 'king-addons'),
513 'type' => Controls_Manager::SELECT,
514 'options' => [
515 'left' => esc_html__('Left', 'king-addons'),
516 'right' => esc_html__('Right', 'king-addons'),
517 'top' => esc_html__('Top', 'king-addons'),
518 'bottom' => esc_html__('Bottom', 'king-addons'),
519 ],
520 'default' => 'left',
521 'condition' => [
522 'show_form_header' => 'yes',
523 'form_illustration[url]!' => '',
524 ],
525 ]
526 );
527
528 $this->add_responsive_control(
529 'form_illustration_width',
530 [
531 'label' => esc_html__('Illustration Width', 'king-addons'),
532 'type' => Controls_Manager::SLIDER,
533 'size_units' => ['px', '%'],
534 'range' => [
535 'px' => [
536 'min' => 0,
537 'max' => 800,
538 ],
539 '%' => [
540 'min' => 0,
541 'max' => 100,
542 ],
543 ],
544 'default' => [
545 'unit' => '%',
546 'size' => 50,
547 ],
548 'condition' => [
549 'show_form_header' => 'yes',
550 'form_illustration[url]!' => '',
551 ],
552 'selectors' => [
553 '{{WRAPPER}} .king-addons-form-illustration' => 'width: {{SIZE}}{{UNIT}};',
554 ],
555 ]
556 );
557
558 $this->end_controls_section();
559
560 // Login Form Section
561 $this->start_controls_section(
562 'section_login_form',
563 [
564 'label' => esc_html__('Login Form', 'king-addons'),
565 ]
566 );
567
568 $this->add_control(
569 'login_form_title',
570 [
571 'label' => esc_html__('Form Title', 'king-addons'),
572 'type' => Controls_Manager::TEXT,
573 'default' => esc_html__('Login to Your Account', 'king-addons'),
574 'placeholder' => esc_html__('Enter title', 'king-addons'),
575 'dynamic' => ['active' => true],
576 'ai' => ['active' => false],
577 ]
578 );
579
580 $this->add_control(
581 'login_form_subtitle',
582 [
583 'label' => esc_html__('Form Subtitle', 'king-addons'),
584 'type' => Controls_Manager::TEXTAREA,
585 'default' => esc_html__('Please enter your username and password to log in.', 'king-addons'),
586 'placeholder' => esc_html__('Enter subtitle', 'king-addons'),
587 'dynamic' => ['active' => true],
588 ]
589 );
590
591 $this->add_control(
592 'login_username_label',
593 [
594 'label' => esc_html__('Username/Email Label', 'king-addons'),
595 'type' => Controls_Manager::TEXT,
596 'default' => esc_html__('Username or Email', 'king-addons'),
597 'dynamic' => ['active' => true],
598 'ai' => ['active' => false],
599 ]
600 );
601
602 $this->add_control(
603 'login_username_placeholder',
604 [
605 'label' => esc_html__('Username/Email Placeholder', 'king-addons'),
606 'type' => Controls_Manager::TEXT,
607 'default' => esc_html__('Enter your username or email', 'king-addons'),
608 'dynamic' => ['active' => true],
609 'ai' => ['active' => false],
610 ]
611 );
612
613 $this->add_control(
614 'login_password_label',
615 [
616 'label' => esc_html__('Password Label', 'king-addons'),
617 'type' => Controls_Manager::TEXT,
618 'default' => esc_html__('Password', 'king-addons'),
619 'dynamic' => ['active' => true],
620 'ai' => ['active' => false],
621 ]
622 );
623
624 $this->add_control(
625 'login_password_placeholder',
626 [
627 'label' => esc_html__('Password Placeholder', 'king-addons'),
628 'type' => Controls_Manager::TEXT,
629 'default' => esc_html__('Enter your password', 'king-addons'),
630 'dynamic' => ['active' => true],
631 'ai' => ['active' => false],
632 ]
633 );
634
635 $this->add_control(
636 'login_button_text',
637 [
638 'label' => esc_html__('Login Button Text', 'king-addons'),
639 'type' => Controls_Manager::TEXT,
640 'default' => esc_html__('Login', 'king-addons'),
641 'dynamic' => ['active' => true],
642 'ai' => ['active' => false],
643 ]
644 );
645
646 $this->add_control(
647 'show_password_visibility_login',
648 [
649 'label' => esc_html__('Show Password Visibility Toggle', 'king-addons'),
650 'type' => Controls_Manager::SWITCHER,
651 'label_on' => esc_html__('Yes', 'king-addons'),
652 'label_off' => esc_html__('No', 'king-addons'),
653 'return_value' => 'yes',
654 'default' => 'yes',
655 ]
656 );
657
658 $this->add_control(
659 'show_remember_me',
660 [
661 'label' => esc_html__('Show Remember Me', 'king-addons'),
662 'type' => Controls_Manager::SWITCHER,
663 'label_on' => esc_html__('Yes', 'king-addons'),
664 'label_off' => esc_html__('No', 'king-addons'),
665 'return_value' => 'yes',
666 'default' => 'yes',
667 ]
668 );
669
670 $this->add_control(
671 'remember_me_text',
672 [
673 'label' => esc_html__('Remember Me Text', 'king-addons'),
674 'type' => Controls_Manager::TEXT,
675 'default' => esc_html__('Remember Me', 'king-addons'),
676 'condition' => [
677 'show_remember_me' => 'yes',
678 ],
679 'dynamic' => ['active' => true],
680 'ai' => ['active' => false],
681 ]
682 );
683
684 $this->add_control(
685 'show_lost_password',
686 [
687 'label' => esc_html__('Show Lost Password Link', 'king-addons'),
688 'type' => Controls_Manager::SWITCHER,
689 'label_on' => esc_html__('Yes', 'king-addons'),
690 'label_off' => esc_html__('No', 'king-addons'),
691 'return_value' => 'yes',
692 'default' => 'yes',
693 ]
694 );
695
696 $this->add_control(
697 'lost_password_text',
698 [
699 'label' => esc_html__('Lost Password Text', 'king-addons'),
700 'type' => Controls_Manager::TEXT,
701 'default' => esc_html__('Forgot Password?', 'king-addons'),
702 'condition' => [
703 'show_lost_password' => 'yes',
704 ],
705 'dynamic' => ['active' => true],
706 'ai' => ['active' => false],
707 ]
708 );
709
710 $this->add_control(
711 'show_register_link',
712 [
713 'label' => esc_html__('Show Register Link', 'king-addons'),
714 'type' => Controls_Manager::SWITCHER,
715 'label_on' => esc_html__('Yes', 'king-addons'),
716 'label_off' => esc_html__('No', 'king-addons'),
717 'return_value' => 'yes',
718 'default' => 'yes',
719 ]
720 );
721
722 $this->add_control(
723 'register_link_text',
724 [
725 'label' => esc_html__('Register Link Text', 'king-addons'),
726 'type' => Controls_Manager::TEXT,
727 'default' => esc_html__("Don't have an account? Register", 'king-addons'),
728 'condition' => [
729 'show_register_link' => 'yes',
730 ],
731 'dynamic' => ['active' => true],
732 'ai' => ['active' => false],
733 ]
734 );
735
736 $this->add_control(
737 'show_lost_password_link',
738 [
739 'label' => esc_html__('Show Lost Password Link', 'king-addons'),
740 'type' => Controls_Manager::SWITCHER,
741 'label_on' => esc_html__('Yes', 'king-addons'),
742 'label_off' => esc_html__('No', 'king-addons'),
743 'return_value' => 'yes',
744 'default' => 'yes',
745 ]
746 );
747
748 $this->add_control(
749 'lost_password_link_text',
750 [
751 'label' => esc_html__('Lost Password Link Text', 'king-addons'),
752 'type' => Controls_Manager::TEXT,
753 'default' => esc_html__('Forgot your password?', 'king-addons'),
754 'condition' => [
755 'show_lost_password_link' => 'yes',
756 ],
757 'dynamic' => ['active' => true],
758 'ai' => ['active' => false],
759 ]
760 );
761
762
763
764 $this->end_controls_section();
765
766 // Email Notifications Section
767 $this->start_controls_section(
768 'section_email_notifications',
769 [
770 'label' => esc_html__('Email Notifications', 'king-addons'),
771 ]
772 );
773
774 $this->add_control(
775 'enable_user_email',
776 [
777 'label' => esc_html__('Send Email to User', 'king-addons'),
778 'type' => Controls_Manager::SWITCHER,
779 'label_on' => esc_html__('Yes', 'king-addons'),
780 'label_off' => esc_html__('No', 'king-addons'),
781 'return_value' => 'yes',
782 'default' => 'yes',
783 'description' => esc_html__('Send a welcome email to the user after successful registration.', 'king-addons'),
784 ]
785 );
786
787 $this->add_control(
788 'user_email_subject',
789 [
790 'label' => esc_html__('User Email Subject', 'king-addons'),
791 'type' => Controls_Manager::TEXT,
792 'default' => esc_html__('Welcome to {site_name}!', 'king-addons'),
793 'condition' => [
794 'enable_user_email' => 'yes',
795 ],
796 'dynamic' => ['active' => true],
797 'ai' => ['active' => false],
798 ]
799 );
800
801 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
802 \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'user_email_subject', ['']);
803 }
804
805 $this->add_control(
806 'user_email_content',
807 [
808 'label' => esc_html__('User Email Content', 'king-addons'),
809 'type' => Controls_Manager::TEXTAREA,
810 'rows' => 10,
811 'default' => "Hello {user_name},\n\nWelcome to {site_name}!\n\nYour account has been successfully created.\n\nUsername: {username}\nEmail: {user_email}\n\nThank you for joining us!\n\nBest regards,\n{site_name} Team",
812 'condition' => [
813 'enable_user_email' => 'yes',
814 ],
815 'dynamic' => ['active' => true],
816 'ai' => ['active' => false],
817 ]
818 );
819
820 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
821 \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'user_email_content', ['']);
822 }
823
824 $this->add_control(
825 'enable_admin_email',
826 [
827 'label' => sprintf(__('Send Email to Admin %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
828 'type' => Controls_Manager::SWITCHER,
829 'label_on' => esc_html__('Yes', 'king-addons'),
830 'label_off' => esc_html__('No', 'king-addons'),
831 'return_value' => 'yes',
832 'default' => '',
833 'description' => esc_html__('Send a notification email to the admin when a user registers.', 'king-addons'),
834 'classes' => 'king-addons-pro-control',
835 ]
836 );
837
838 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
839 \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'enable_admin_email', ['yes']);
840 } else {
841 $this->add_control(
842 'admin_email_address',
843 [
844 'label' => esc_html__('Admin Email Address', 'king-addons'),
845 'type' => Controls_Manager::TEXT,
846 'default' => get_option('admin_email'),
847 'condition' => [
848 'enable_admin_email' => 'yes',
849 ],
850 'dynamic' => ['active' => true],
851 'ai' => ['active' => false],
852 ]
853 );
854
855 $this->add_control(
856 'admin_email_subject',
857 [
858 'label' => esc_html__('Admin Email Subject', 'king-addons'),
859 'type' => Controls_Manager::TEXT,
860 'default' => esc_html__('New User Registration on {site_name}', 'king-addons'),
861 'condition' => [
862 'enable_admin_email' => 'yes',
863 ],
864 'dynamic' => ['active' => true],
865 'ai' => ['active' => false],
866 ]
867 );
868
869 $this->add_control(
870 'admin_email_content',
871 [
872 'label' => esc_html__('Admin Email Content', 'king-addons'),
873 'type' => Controls_Manager::TEXTAREA,
874 'rows' => 10,
875 'default' => "Hello Admin,\n\nA new user has registered on {site_name}.\n\nUser Details:\nName: {user_name}\nUsername: {username}\nEmail: {user_email}\nRole: {user_role}\nRegistration Date: {registration_date}\n\nYou can view the user profile in the admin dashboard.\n\nBest regards,\n{site_name}",
876 'condition' => [
877 'enable_admin_email' => 'yes',
878 ],
879 'dynamic' => ['active' => true],
880 'ai' => ['active' => false],
881 ]
882 );
883 }
884
885 $this->add_control(
886 'email_placeholders_info',
887 [
888 'type' => Controls_Manager::RAW_HTML,
889 'raw' => esc_html__('Available placeholders: {site_name}, {user_name}, {username}, {user_email}, {user_role}, {registration_date}', 'king-addons'),
890 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
891 ]
892 );
893
894 $this->end_controls_section();
895
896 // Mailchimp Integration Section
897 $this->start_controls_section(
898 'section_mailchimp_integration',
899 [
900 'label' => esc_html__('Mailchimp Integration', 'king-addons'),
901 ]
902 );
903
904 $this->add_control(
905 'enable_mailchimp_integration',
906 [
907 'label' => sprintf(__('Enable Mailchimp Integration %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
908 'type' => Controls_Manager::SWITCHER,
909 'label_on' => esc_html__('Yes', 'king-addons'),
910 'label_off' => esc_html__('No', 'king-addons'),
911 'return_value' => 'yes',
912 'default' => '',
913 'description' => esc_html__('Automatically subscribe users to your Mailchimp list upon registration.', 'king-addons'),
914 'classes' => 'king-addons-pro-control',
915 ]
916 );
917
918 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
919 \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'enable_mailchimp_integration', ['yes']);
920 } else {
921 $this->add_control(
922 'mailchimp_api_key',
923 [
924 'label' => esc_html__('Mailchimp API Key', 'king-addons'),
925 'type' => Controls_Manager::TEXT,
926 'placeholder' => esc_html__('Enter your Mailchimp API Key', 'king-addons'),
927 'condition' => [
928 'enable_mailchimp_integration' => 'yes',
929 ],
930 'dynamic' => ['active' => true],
931 'ai' => ['active' => false],
932 'frontend_available' => false, // Security: prevent exposure to frontend/REST API
933 ]
934 );
935
936 $this->add_control(
937 'mailchimp_list_id',
938 [
939 'label' => esc_html__('Mailchimp List ID', 'king-addons'),
940 'type' => Controls_Manager::TEXT,
941 'placeholder' => esc_html__('Enter your Mailchimp List ID', 'king-addons'),
942 'condition' => [
943 'enable_mailchimp_integration' => 'yes',
944 ],
945 'dynamic' => ['active' => true],
946 'ai' => ['active' => false],
947 'frontend_available' => false, // Security: prevent exposure to frontend/REST API
948 ]
949 );
950
951 $this->add_control(
952 'mailchimp_double_optin',
953 [
954 'label' => esc_html__('Double Opt-in', 'king-addons'),
955 'type' => Controls_Manager::SWITCHER,
956 'label_on' => esc_html__('Yes', 'king-addons'),
957 'label_off' => esc_html__('No', 'king-addons'),
958 'return_value' => 'yes',
959 'default' => '',
960 'description' => esc_html__('Send confirmation email to subscribers.', 'king-addons'),
961 'condition' => [
962 'enable_mailchimp_integration' => 'yes',
963 ],
964 ]
965 );
966
967 $this->add_control(
968 'mailchimp_setup_info',
969 [
970 'type' => Controls_Manager::RAW_HTML,
971 'raw' => sprintf(
972 esc_html__('To get your API key and List ID, go to your %s and navigate to Account > Extras > API keys and Audience > Manage Audience > Settings > Audience name and defaults.', 'king-addons'),
973 '<a href="https://mailchimp.com/" target="_blank">Mailchimp account</a>'
974 ),
975 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
976 'condition' => [
977 'enable_mailchimp_integration' => 'yes',
978 ],
979 ]
980 );
981 }
982
983 $this->end_controls_section();
984
985 // Register Actions Section
986 $this->start_controls_section(
987 'section_register_actions',
988 [
989 'label' => esc_html__('Register Actions', 'king-addons'),
990 ]
991 );
992
993 $this->add_control(
994 'auto_login_after_register',
995 [
996 'label' => esc_html__('Auto Login After Registration', 'king-addons'),
997 'type' => Controls_Manager::SWITCHER,
998 'label_on' => esc_html__('Yes', 'king-addons'),
999 'label_off' => esc_html__('No', 'king-addons'),
1000 'return_value' => 'yes',
1001 'default' => 'yes',
1002 'description' => esc_html__('Automatically log in the user after successful registration.', 'king-addons'),
1003 ]
1004 );
1005
1006 $this->add_control(
1007 'redirect_after_register',
1008 [
1009 'label' => esc_html__('Redirect After Registration', 'king-addons'),
1010 'type' => Controls_Manager::URL,
1011 'placeholder' => esc_html__('https://yoursite.com/welcome', 'king-addons'),
1012 'dynamic' => ['active' => true],
1013 'description' => esc_html__('Leave empty to stay on the current page.', 'king-addons'),
1014 ]
1015 );
1016
1017 $this->add_control(
1018 'redirect_after_login',
1019 [
1020 'label' => esc_html__('Redirect After Login', 'king-addons'),
1021 'type' => Controls_Manager::URL,
1022 'placeholder' => esc_html__('https://yoursite.com/dashboard', 'king-addons'),
1023 'dynamic' => ['active' => true],
1024 'description' => esc_html__('Leave empty to stay on the current page.', 'king-addons'),
1025 ]
1026 );
1027
1028 $this->add_control(
1029 'redirect_logout_user',
1030 [
1031 'label' => esc_html__('Redirect Already Logged Users', 'king-addons'),
1032 'type' => Controls_Manager::SWITCHER,
1033 'label_on' => esc_html__('Yes', 'king-addons'),
1034 'label_off' => esc_html__('No', 'king-addons'),
1035 'return_value' => 'yes',
1036 'default' => '',
1037 'description' => esc_html__('Redirect users who are already logged in.', 'king-addons'),
1038 ]
1039 );
1040
1041 $this->add_control(
1042 'redirect_logout_url',
1043 [
1044 'label' => esc_html__('Redirect URL for Logged Users', 'king-addons'),
1045 'type' => Controls_Manager::URL,
1046 'placeholder' => esc_html__('https://yoursite.com/dashboard', 'king-addons'),
1047 'condition' => [
1048 'redirect_logout_user' => 'yes',
1049 ],
1050 'dynamic' => ['active' => true],
1051 ]
1052 );
1053
1054 $this->end_controls_section();
1055
1056 // Lost Password Form Section
1057 $this->start_controls_section(
1058 'section_lost_password_form',
1059 [
1060 'label' => esc_html__('Lost Password Form', 'king-addons'),
1061 'condition' => [
1062 'show_lost_password_link' => 'yes',
1063 ],
1064 ]
1065 );
1066
1067 $this->add_control(
1068 'lostpassword_form_title',
1069 [
1070 'label' => esc_html__('Form Title', 'king-addons'),
1071 'type' => Controls_Manager::TEXT,
1072 'default' => esc_html__('Lost Your Password?', 'king-addons'),
1073 'dynamic' => ['active' => true],
1074 'ai' => ['active' => false],
1075 ]
1076 );
1077
1078 $this->add_control(
1079 'lostpassword_form_subtitle',
1080 [
1081 'label' => esc_html__('Form Subtitle', 'king-addons'),
1082 'type' => Controls_Manager::TEXTAREA,
1083 'default' => esc_html__('Enter your email address and we will send you a link to reset your password.', 'king-addons'),
1084 'dynamic' => ['active' => true],
1085 'ai' => ['active' => false],
1086 ]
1087 );
1088
1089 $this->add_control(
1090 'lostpassword_email_label',
1091 [
1092 'label' => esc_html__('Email Label', 'king-addons'),
1093 'type' => Controls_Manager::TEXT,
1094 'default' => esc_html__('Email', 'king-addons'),
1095 'dynamic' => ['active' => true],
1096 'ai' => ['active' => false],
1097 ]
1098 );
1099
1100 $this->add_control(
1101 'lostpassword_email_placeholder',
1102 [
1103 'label' => esc_html__('Email Placeholder', 'king-addons'),
1104 'type' => Controls_Manager::TEXT,
1105 'default' => esc_html__('Enter your email address', 'king-addons'),
1106 'dynamic' => ['active' => true],
1107 'ai' => ['active' => false],
1108 ]
1109 );
1110
1111 $this->add_control(
1112 'lostpassword_button_text',
1113 [
1114 'label' => esc_html__('Button Text', 'king-addons'),
1115 'type' => Controls_Manager::TEXT,
1116 'default' => esc_html__('Reset Password', 'king-addons'),
1117 'dynamic' => ['active' => true],
1118 'ai' => ['active' => false],
1119 ]
1120 );
1121
1122 $this->add_control(
1123 'show_login_link_from_lostpassword',
1124 [
1125 'label' => esc_html__('Show Login Link', 'king-addons'),
1126 'type' => Controls_Manager::SWITCHER,
1127 'label_on' => esc_html__('Yes', 'king-addons'),
1128 'label_off' => esc_html__('No', 'king-addons'),
1129 'return_value' => 'yes',
1130 'default' => 'yes',
1131 ]
1132 );
1133
1134 $this->add_control(
1135 'login_link_text_from_lostpassword',
1136 [
1137 'label' => esc_html__('Login Link Text', 'king-addons'),
1138 'type' => Controls_Manager::TEXT,
1139 'default' => esc_html__('Back to Login', 'king-addons'),
1140 'condition' => [
1141 'show_login_link_from_lostpassword' => 'yes',
1142 ],
1143 'dynamic' => ['active' => true],
1144 'ai' => ['active' => false],
1145 ]
1146 );
1147
1148 $this->end_controls_section();
1149
1150 // Social Login Section
1151 $this->start_controls_section(
1152 'section_social_login',
1153 [
1154 'label' => esc_html__('Social Login', 'king-addons'),
1155 ]
1156 );
1157
1158 $this->add_control(
1159 'enable_social_login',
1160 [
1161 'label' => sprintf(__('Enable Social Login %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
1162 'type' => Controls_Manager::SWITCHER,
1163 'label_on' => esc_html__('Yes', 'king-addons'),
1164 'label_off' => esc_html__('No', 'king-addons'),
1165 'return_value' => 'yes',
1166 'default' => '',
1167 'classes' => 'king-addons-pro-control',
1168 ]
1169 );
1170
1171 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
1172 \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'enable_social_login', ['yes']);
1173 } else {
1174 $this->add_control(
1175 'social_login_separator',
1176 [
1177 'label' => esc_html__('Show Separator', 'king-addons'),
1178 'type' => Controls_Manager::SWITCHER,
1179 'label_on' => esc_html__('Yes', 'king-addons'),
1180 'label_off' => esc_html__('No', 'king-addons'),
1181 'return_value' => 'yes',
1182 'default' => 'yes',
1183 'condition' => [
1184 'enable_social_login' => 'yes',
1185 ],
1186 ]
1187 );
1188
1189 $this->add_control(
1190 'social_login_setup_note',
1191 [
1192 'type' => Controls_Manager::RAW_HTML,
1193 'raw' => esc_html__('Note: Social login requires proper API setup. Google and Facebook apps need to be configured with valid credentials.', 'king-addons'),
1194 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning',
1195 'condition' => [
1196 'enable_social_login' => 'yes',
1197 ],
1198 ]
1199 );
1200
1201 // Google Login Settings
1202 $this->add_control(
1203 'google_login_heading',
1204 [
1205 'label' => esc_html__('Google Login', 'king-addons'),
1206 'type' => Controls_Manager::HEADING,
1207 'separator' => 'before',
1208 'condition' => [
1209 'enable_social_login' => 'yes',
1210 ],
1211 ]
1212 );
1213
1214 $this->add_control(
1215 'enable_google_login',
1216 [
1217 'label' => esc_html__('Enable Google Login', 'king-addons'),
1218 'type' => Controls_Manager::SWITCHER,
1219 'label_on' => esc_html__('Yes', 'king-addons'),
1220 'label_off' => esc_html__('No', 'king-addons'),
1221 'return_value' => 'yes',
1222 'default' => '',
1223 'condition' => [
1224 'enable_social_login' => 'yes',
1225 ],
1226 ]
1227 );
1228
1229 $this->add_control(
1230 'google_client_id',
1231 [
1232 'label' => esc_html__('Google Client ID', 'king-addons'),
1233 'type' => Controls_Manager::TEXT,
1234 'placeholder' => esc_html__('Enter your Google Client ID', 'king-addons'),
1235 'condition' => [
1236 'enable_social_login' => 'yes',
1237 'enable_google_login' => 'yes',
1238 ],
1239 'dynamic' => ['active' => true],
1240 'ai' => ['active' => false],
1241 ]
1242 );
1243
1244 $this->add_control(
1245 'google_client_secret',
1246 [
1247 'label' => esc_html__('Google Client Secret', 'king-addons'),
1248 'type' => Controls_Manager::TEXT,
1249 'placeholder' => esc_html__('Enter your Google Client Secret', 'king-addons'),
1250 'condition' => [
1251 'enable_social_login' => 'yes',
1252 'enable_google_login' => 'yes',
1253 ],
1254 'dynamic' => ['active' => true],
1255 'ai' => ['active' => false],
1256 ]
1257 );
1258
1259 $this->add_control(
1260 'google_setup_instructions',
1261 [
1262 'type' => Controls_Manager::RAW_HTML,
1263 'raw' => sprintf(
1264 '<div style="background: #f8f9fa; padding: 15px; border-radius: 5px; margin: 10px 0;">
1265 <h4 style="margin: 0 0 10px 0;">🔧 Google OAuth Setup Instructions:</h4>
1266 <ol style="margin: 0; padding-left: 20px;">
1267 <li>Go to <a href="https://console.cloud.google.com/" target="_blank">Google Cloud Console</a></li>
1268 <li>Create a new project or select existing one</li>
1269 <li>Enable "Google+ API" in APIs & Services</li>
1270 <li>Go to "Credentials" → "Create Credentials" → "OAuth 2.0 Client IDs"</li>
1271 <li>Set Application type to "Web application"</li>
1272 <li>Add your domain to "Authorized JavaScript origins"</li>
1273 <li>Add redirect URI: <code>%s</code></li>
1274 <li>Copy Client ID and Client Secret to fields above</li>
1275 </ol>
1276 </div>',
1277 home_url('/wp-admin/admin-ajax.php?action=king_addons_google_callback')
1278 ),
1279 'condition' => [
1280 'enable_social_login' => 'yes',
1281 'enable_google_login' => 'yes',
1282 ],
1283 ]
1284 );
1285
1286 // Facebook Login Settings
1287 $this->add_control(
1288 'facebook_login_heading',
1289 [
1290 'label' => esc_html__('Facebook Login', 'king-addons'),
1291 'type' => Controls_Manager::HEADING,
1292 'separator' => 'before',
1293 'condition' => [
1294 'enable_social_login' => 'yes',
1295 ],
1296 ]
1297 );
1298
1299 $this->add_control(
1300 'enable_facebook_login',
1301 [
1302 'label' => esc_html__('Enable Facebook Login', 'king-addons'),
1303 'type' => Controls_Manager::SWITCHER,
1304 'label_on' => esc_html__('Yes', 'king-addons'),
1305 'label_off' => esc_html__('No', 'king-addons'),
1306 'return_value' => 'yes',
1307 'default' => '',
1308 'condition' => [
1309 'enable_social_login' => 'yes',
1310 ],
1311 ]
1312 );
1313
1314 $this->add_control(
1315 'facebook_app_id',
1316 [
1317 'label' => esc_html__('Facebook App ID', 'king-addons'),
1318 'type' => Controls_Manager::TEXT,
1319 'placeholder' => esc_html__('Enter your Facebook App ID', 'king-addons'),
1320 'condition' => [
1321 'enable_social_login' => 'yes',
1322 'enable_facebook_login' => 'yes',
1323 ],
1324 'dynamic' => ['active' => true],
1325 'ai' => ['active' => false],
1326 ]
1327 );
1328
1329 $this->add_control(
1330 'facebook_app_secret',
1331 [
1332 'label' => esc_html__('Facebook App Secret', 'king-addons'),
1333 'type' => Controls_Manager::TEXT,
1334 'placeholder' => esc_html__('Enter your Facebook App Secret', 'king-addons'),
1335 'condition' => [
1336 'enable_social_login' => 'yes',
1337 'enable_facebook_login' => 'yes',
1338 ],
1339 'dynamic' => ['active' => true],
1340 'ai' => ['active' => false],
1341 ]
1342 );
1343
1344 $this->add_control(
1345 'facebook_setup_instructions',
1346 [
1347 'type' => Controls_Manager::RAW_HTML,
1348 'raw' => sprintf(
1349 '<div style="background: #f8f9fa; padding: 15px; border-radius: 5px; margin: 10px 0;">
1350 <h4 style="margin: 0 0 10px 0;">🔧 Facebook OAuth Setup Instructions:</h4>
1351 <ol style="margin: 0; padding-left: 20px;">
1352 <li>Go to <a href="https://developers.facebook.com/" target="_blank">Facebook Developers</a></li>
1353 <li>Create a new app or select existing one</li>
1354 <li>Add "Facebook Login" product to your app</li>
1355 <li>Go to Facebook Login → Settings</li>
1356 <li>Add Valid OAuth Redirect URI: <code>%s</code></li>
1357 <li>Get App ID and App Secret from App Settings → Basic</li>
1358 <li>Copy App ID and App Secret to fields above</li>
1359 <li>Make sure app is live (not in development mode)</li>
1360 </ol>
1361 </div>',
1362 home_url('/wp-admin/admin-ajax.php?action=king_addons_facebook_callback')
1363 ),
1364 'condition' => [
1365 'enable_social_login' => 'yes',
1366 'enable_facebook_login' => 'yes',
1367 ],
1368 ]
1369 );
1370 }
1371
1372 $this->end_controls_section();
1373
1374 // reCAPTCHA Section
1375 $this->start_controls_section(
1376 'section_recaptcha',
1377 [
1378 'label' => esc_html__('reCAPTCHA', 'king-addons'),
1379 ]
1380 );
1381
1382 $this->add_control(
1383 'enable_recaptcha',
1384 [
1385 'label' => esc_html__('Enable reCAPTCHA', 'king-addons'),
1386 'type' => Controls_Manager::SWITCHER,
1387 'label_on' => esc_html__('Yes', 'king-addons'),
1388 'label_off' => esc_html__('No', 'king-addons'),
1389 'return_value' => 'yes',
1390 'default' => '',
1391 ]
1392 );
1393
1394 $this->add_control(
1395 'recaptcha_version',
1396 [
1397 'label' => esc_html__('reCAPTCHA Version', 'king-addons'),
1398 'type' => Controls_Manager::SELECT,
1399 'options' => [
1400 'v2' => esc_html__('reCAPTCHA v2', 'king-addons'),
1401 'v3' => esc_html__('reCAPTCHA v3', 'king-addons'),
1402 ],
1403 'default' => 'v2',
1404 'condition' => [
1405 'enable_recaptcha' => 'yes',
1406 ],
1407 ]
1408 );
1409
1410 $this->add_control(
1411 'recaptcha_site_key',
1412 [
1413 'label' => esc_html__('Site Key', 'king-addons'),
1414 'type' => Controls_Manager::TEXT,
1415 'placeholder' => esc_html__('Enter your reCAPTCHA Site Key', 'king-addons'),
1416 'condition' => [
1417 'enable_recaptcha' => 'yes',
1418 ],
1419 'dynamic' => ['active' => true],
1420 'ai' => ['active' => false],
1421 ]
1422 );
1423
1424 $this->add_control(
1425 'recaptcha_secret_key',
1426 [
1427 'label' => esc_html__('Secret Key', 'king-addons'),
1428 'type' => Controls_Manager::TEXT,
1429 'placeholder' => esc_html__('Enter your reCAPTCHA Secret Key', 'king-addons'),
1430 'condition' => [
1431 'enable_recaptcha' => 'yes',
1432 ],
1433 'dynamic' => ['active' => true],
1434 'ai' => ['active' => false],
1435 'frontend_available' => false, // Security: prevent exposure to frontend/REST API
1436 ]
1437 );
1438
1439 $this->add_control(
1440 'recaptcha_theme',
1441 [
1442 'label' => esc_html__('Theme', 'king-addons'),
1443 'type' => Controls_Manager::SELECT,
1444 'options' => [
1445 'light' => esc_html__('Light', 'king-addons'),
1446 'dark' => esc_html__('Dark', 'king-addons'),
1447 ],
1448 'default' => 'light',
1449 'condition' => [
1450 'enable_recaptcha' => 'yes',
1451 'recaptcha_version' => 'v2',
1452 ],
1453 ]
1454 );
1455
1456 $this->add_control(
1457 'recaptcha_size',
1458 [
1459 'label' => esc_html__('Size', 'king-addons'),
1460 'type' => Controls_Manager::SELECT,
1461 'options' => [
1462 'normal' => esc_html__('Normal', 'king-addons'),
1463 'compact' => esc_html__('Compact', 'king-addons'),
1464 ],
1465 'default' => 'normal',
1466 'condition' => [
1467 'enable_recaptcha' => 'yes',
1468 'recaptcha_version' => 'v2',
1469 ],
1470 ]
1471 );
1472
1473 $this->add_control(
1474 'recaptcha_score_threshold',
1475 [
1476 'label' => esc_html__('Score Threshold', 'king-addons'),
1477 'type' => Controls_Manager::SLIDER,
1478 'range' => [
1479 '' => [
1480 'min' => 0,
1481 'max' => 1,
1482 'step' => 0.1,
1483 ],
1484 ],
1485 'default' => [
1486 'size' => 0.5,
1487 ],
1488 'condition' => [
1489 'enable_recaptcha' => 'yes',
1490 'recaptcha_version' => 'v3',
1491 ],
1492 'description' => esc_html__('reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). Based on the score, you can take variable action in the context of your site.', 'king-addons'),
1493 ]
1494 );
1495
1496 $this->add_control(
1497 'recaptcha_hide_badge',
1498 [
1499 'label' => esc_html__('Hide reCAPTCHA Badge', 'king-addons'),
1500 'type' => Controls_Manager::SWITCHER,
1501 'label_on' => esc_html__('Yes', 'king-addons'),
1502 'label_off' => esc_html__('No', 'king-addons'),
1503 'return_value' => 'yes',
1504 'default' => '',
1505 'condition' => [
1506 'enable_recaptcha' => 'yes',
1507 'recaptcha_version' => 'v3',
1508 ],
1509 'description' => esc_html__('Hide the reCAPTCHA badge. Note: You must include the reCAPTCHA branding visibly in the user flow.', 'king-addons'),
1510 ]
1511 );
1512
1513 $this->add_control(
1514 'recaptcha_apply_on',
1515 [
1516 'label' => esc_html__('Apply reCAPTCHA On', 'king-addons'),
1517 'type' => Controls_Manager::SELECT2,
1518 'multiple' => true,
1519 'options' => [
1520 'login' => esc_html__('Login Form', 'king-addons'),
1521 'register' => esc_html__('Register Form', 'king-addons'),
1522 'lostpassword' => esc_html__('Lost Password Form', 'king-addons'),
1523 ],
1524 'default' => ['login', 'register'],
1525 'condition' => [
1526 'enable_recaptcha' => 'yes',
1527 ],
1528 ]
1529 );
1530
1531 $this->add_control(
1532 'recaptcha_setup_note',
1533 [
1534 'type' => Controls_Manager::RAW_HTML,
1535 'raw' => sprintf(
1536 esc_html__('To use reCAPTCHA, you need to get API keys from %s. For more details, check the documentation.', 'king-addons'),
1537 '<a href="https://www.google.com/recaptcha/" target="_blank">Google reCAPTCHA</a>'
1538 ),
1539 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
1540 'condition' => [
1541 'enable_recaptcha' => 'yes',
1542 ],
1543 ]
1544 );
1545
1546 $this->end_controls_section();
1547
1548 // Register Form Section
1549 $this->start_controls_section(
1550 'section_register_form',
1551 [
1552 'label' => esc_html__('Register Form', 'king-addons'),
1553 ]
1554 );
1555
1556 $this->add_control(
1557 'register_form_title',
1558 [
1559 'label' => esc_html__('Form Title', 'king-addons'),
1560 'type' => Controls_Manager::TEXT,
1561 'default' => esc_html__('Create New Account', 'king-addons'),
1562 'placeholder' => esc_html__('Enter title', 'king-addons'),
1563 'dynamic' => ['active' => true],
1564 'ai' => ['active' => false],
1565 ]
1566 );
1567
1568 $this->add_control(
1569 'register_form_subtitle',
1570 [
1571 'label' => esc_html__('Form Subtitle', 'king-addons'),
1572 'type' => Controls_Manager::TEXTAREA,
1573 'default' => esc_html__('Create an account to enjoy awesome features.', 'king-addons'),
1574 'placeholder' => esc_html__('Enter subtitle', 'king-addons'),
1575 'dynamic' => ['active' => true],
1576 ]
1577 );
1578
1579 $this->add_control(
1580 'register_email_label',
1581 [
1582 'label' => esc_html__('Email Label', 'king-addons'),
1583 'type' => Controls_Manager::TEXT,
1584 'default' => esc_html__('Email', 'king-addons'),
1585 'dynamic' => ['active' => true],
1586 'ai' => ['active' => false],
1587 ]
1588 );
1589
1590 $this->add_control(
1591 'register_email_placeholder',
1592 [
1593 'label' => esc_html__('Email Placeholder', 'king-addons'),
1594 'type' => Controls_Manager::TEXT,
1595 'default' => esc_html__('Enter your email', 'king-addons'),
1596 'dynamic' => ['active' => true],
1597 'ai' => ['active' => false],
1598 ]
1599 );
1600
1601 $this->add_control(
1602 'register_username_label',
1603 [
1604 'label' => esc_html__('Username Label', 'king-addons'),
1605 'type' => Controls_Manager::TEXT,
1606 'default' => esc_html__('Username', 'king-addons'),
1607 'dynamic' => ['active' => true],
1608 'ai' => ['active' => false],
1609 ]
1610 );
1611
1612 $this->add_control(
1613 'register_username_placeholder',
1614 [
1615 'label' => esc_html__('Username Placeholder', 'king-addons'),
1616 'type' => Controls_Manager::TEXT,
1617 'default' => esc_html__('Enter your username', 'king-addons'),
1618 'dynamic' => ['active' => true],
1619 'ai' => ['active' => false],
1620 ]
1621 );
1622
1623 $this->add_control(
1624 'register_password_label',
1625 [
1626 'label' => esc_html__('Password Label', 'king-addons'),
1627 'type' => Controls_Manager::TEXT,
1628 'default' => esc_html__('Password', 'king-addons'),
1629 'dynamic' => ['active' => true],
1630 'ai' => ['active' => false],
1631 ]
1632 );
1633
1634 $this->add_control(
1635 'register_password_placeholder',
1636 [
1637 'label' => esc_html__('Password Placeholder', 'king-addons'),
1638 'type' => Controls_Manager::TEXT,
1639 'default' => esc_html__('Enter your password', 'king-addons'),
1640 'dynamic' => ['active' => true],
1641 'ai' => ['active' => false],
1642 ]
1643 );
1644
1645 $this->add_control(
1646 'register_confirm_password_label',
1647 [
1648 'label' => esc_html__('Confirm Password Label', 'king-addons'),
1649 'type' => Controls_Manager::TEXT,
1650 'default' => esc_html__('Confirm Password', 'king-addons'),
1651 'dynamic' => ['active' => true],
1652 'ai' => ['active' => false],
1653 ]
1654 );
1655
1656 $this->add_control(
1657 'register_confirm_password_placeholder',
1658 [
1659 'label' => esc_html__('Confirm Password Placeholder', 'king-addons'),
1660 'type' => Controls_Manager::TEXT,
1661 'default' => esc_html__('Confirm your password', 'king-addons'),
1662 'dynamic' => ['active' => true],
1663 'ai' => ['active' => false],
1664 ]
1665 );
1666
1667 $this->add_control(
1668 'register_additional_fields_heading',
1669 [
1670 'label' => esc_html__('Additional Fields', 'king-addons'),
1671 'type' => Controls_Manager::HEADING,
1672 'separator' => 'before',
1673 ]
1674 );
1675
1676 $this->add_control(
1677 'show_first_name',
1678 [
1679 'label' => esc_html__('Show First Name', 'king-addons'),
1680 'type' => Controls_Manager::SWITCHER,
1681 'label_on' => esc_html__('Yes', 'king-addons'),
1682 'label_off' => esc_html__('No', 'king-addons'),
1683 'return_value' => 'yes',
1684 'default' => '',
1685 ]
1686 );
1687
1688 $this->add_control(
1689 'register_first_name_label',
1690 [
1691 'label' => esc_html__('First Name Label', 'king-addons'),
1692 'type' => Controls_Manager::TEXT,
1693 'default' => esc_html__('First Name', 'king-addons'),
1694 'condition' => [
1695 'show_first_name' => 'yes',
1696 ],
1697 'dynamic' => ['active' => true],
1698 'ai' => ['active' => false],
1699 ]
1700 );
1701
1702 $this->add_control(
1703 'register_first_name_placeholder',
1704 [
1705 'label' => esc_html__('First Name Placeholder', 'king-addons'),
1706 'type' => Controls_Manager::TEXT,
1707 'default' => esc_html__('First Name', 'king-addons'),
1708 'condition' => [
1709 'show_first_name' => 'yes',
1710 ],
1711 'dynamic' => ['active' => true],
1712 'ai' => ['active' => false],
1713 ]
1714 );
1715
1716 $this->add_control(
1717 'show_last_name',
1718 [
1719 'label' => esc_html__('Show Last Name', 'king-addons'),
1720 'type' => Controls_Manager::SWITCHER,
1721 'label_on' => esc_html__('Yes', 'king-addons'),
1722 'label_off' => esc_html__('No', 'king-addons'),
1723 'return_value' => 'yes',
1724 'default' => '',
1725 ]
1726 );
1727
1728 $this->add_control(
1729 'register_last_name_label',
1730 [
1731 'label' => esc_html__('Last Name Label', 'king-addons'),
1732 'type' => Controls_Manager::TEXT,
1733 'default' => esc_html__('Last Name', 'king-addons'),
1734 'condition' => [
1735 'show_last_name' => 'yes',
1736 ],
1737 'dynamic' => ['active' => true],
1738 'ai' => ['active' => false],
1739 ]
1740 );
1741
1742 $this->add_control(
1743 'register_last_name_placeholder',
1744 [
1745 'label' => esc_html__('Last Name Placeholder', 'king-addons'),
1746 'type' => Controls_Manager::TEXT,
1747 'default' => esc_html__('Last Name', 'king-addons'),
1748 'condition' => [
1749 'show_last_name' => 'yes',
1750 ],
1751 'dynamic' => ['active' => true],
1752 'ai' => ['active' => false],
1753 ]
1754 );
1755
1756 $this->add_control(
1757 'show_website',
1758 [
1759 'label' => esc_html__('Show Website', 'king-addons'),
1760 'type' => Controls_Manager::SWITCHER,
1761 'label_on' => esc_html__('Yes', 'king-addons'),
1762 'label_off' => esc_html__('No', 'king-addons'),
1763 'return_value' => 'yes',
1764 'default' => '',
1765 ]
1766 );
1767
1768 $this->add_control(
1769 'register_website_label',
1770 [
1771 'label' => esc_html__('Website Label', 'king-addons'),
1772 'type' => Controls_Manager::TEXT,
1773 'default' => esc_html__('Website', 'king-addons'),
1774 'condition' => [
1775 'show_website' => 'yes',
1776 ],
1777 'dynamic' => ['active' => true],
1778 'ai' => ['active' => false],
1779 ]
1780 );
1781
1782 $this->add_control(
1783 'register_website_placeholder',
1784 [
1785 'label' => esc_html__('Website Placeholder', 'king-addons'),
1786 'type' => Controls_Manager::TEXT,
1787 'default' => esc_html__('https://yourwebsite.com', 'king-addons'),
1788 'condition' => [
1789 'show_website' => 'yes',
1790 ],
1791 'dynamic' => ['active' => true],
1792 'ai' => ['active' => false],
1793 ]
1794 );
1795
1796 $this->add_control(
1797 'show_phone',
1798 [
1799 'label' => esc_html__('Show Phone', 'king-addons'),
1800 'type' => Controls_Manager::SWITCHER,
1801 'label_on' => esc_html__('Yes', 'king-addons'),
1802 'label_off' => esc_html__('No', 'king-addons'),
1803 'return_value' => 'yes',
1804 'default' => '',
1805 ]
1806 );
1807
1808 $this->add_control(
1809 'register_phone_label',
1810 [
1811 'label' => esc_html__('Phone Label', 'king-addons'),
1812 'type' => Controls_Manager::TEXT,
1813 'default' => esc_html__('Phone', 'king-addons'),
1814 'condition' => [
1815 'show_phone' => 'yes',
1816 ],
1817 'dynamic' => ['active' => true],
1818 'ai' => ['active' => false],
1819 ]
1820 );
1821
1822 $this->add_control(
1823 'register_phone_placeholder',
1824 [
1825 'label' => esc_html__('Phone Placeholder', 'king-addons'),
1826 'type' => Controls_Manager::TEXT,
1827 'default' => esc_html__('Phone Number', 'king-addons'),
1828 'condition' => [
1829 'show_phone' => 'yes',
1830 ],
1831 'dynamic' => ['active' => true],
1832 'ai' => ['active' => false],
1833 ]
1834 );
1835
1836 $this->add_control(
1837 'register_button_text',
1838 [
1839 'label' => esc_html__('Register Button Text', 'king-addons'),
1840 'type' => Controls_Manager::TEXT,
1841 'default' => esc_html__('Register', 'king-addons'),
1842 'dynamic' => ['active' => true],
1843 'ai' => ['active' => false],
1844 ]
1845 );
1846
1847 $this->add_control(
1848 'show_password_visibility_register',
1849 [
1850 'label' => esc_html__('Show Password Visibility Toggle', 'king-addons'),
1851 'type' => Controls_Manager::SWITCHER,
1852 'label_on' => esc_html__('Yes', 'king-addons'),
1853 'label_off' => esc_html__('No', 'king-addons'),
1854 'return_value' => 'yes',
1855 'default' => 'yes',
1856 ]
1857 );
1858
1859 $this->add_control(
1860 'show_login_link',
1861 [
1862 'label' => esc_html__('Show Login Link', 'king-addons'),
1863 'type' => Controls_Manager::SWITCHER,
1864 'label_on' => esc_html__('Yes', 'king-addons'),
1865 'label_off' => esc_html__('No', 'king-addons'),
1866 'return_value' => 'yes',
1867 'default' => 'yes',
1868 ]
1869 );
1870
1871 $this->add_control(
1872 'login_link_text',
1873 [
1874 'label' => esc_html__('Login Link Text', 'king-addons'),
1875 'type' => Controls_Manager::TEXT,
1876 'default' => esc_html__('Already have an account? Login', 'king-addons'),
1877 'condition' => [
1878 'show_login_link' => 'yes',
1879 ],
1880 'dynamic' => ['active' => true],
1881 'ai' => ['active' => false],
1882 ]
1883 );
1884
1885 // Custom Fields for Registration
1886 $this->add_control(
1887 'custom_fields_heading',
1888 [
1889 'label' => sprintf(__('Custom Fields %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
1890 'type' => Controls_Manager::HEADING,
1891 'separator' => 'before',
1892 ]
1893 );
1894
1895 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
1896 $this->add_control(
1897 'custom_fields_pro_notice',
1898 [
1899 'type' => Controls_Manager::RAW_HTML,
1900 'raw' => 'Custom Registration Fields are available<br> in the <strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-login-register-form-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
1901 'content_classes' => 'king-addons-pro-notice',
1902 ]
1903 );
1904 } else {
1905 $repeater = new \Elementor\Repeater();
1906
1907 $repeater->add_control(
1908 'field_type',
1909 [
1910 'label' => esc_html__('Field Type', 'king-addons'),
1911 'type' => Controls_Manager::SELECT,
1912 'options' => [
1913 'text' => esc_html__('Text', 'king-addons'),
1914 'email' => esc_html__('Email', 'king-addons'),
1915 'number' => esc_html__('Number', 'king-addons'),
1916 'tel' => esc_html__('Phone', 'king-addons'),
1917 'url' => esc_html__('URL', 'king-addons'),
1918 'textarea' => esc_html__('Textarea', 'king-addons'),
1919 'select' => esc_html__('Select', 'king-addons'),
1920 'checkbox' => esc_html__('Checkbox', 'king-addons'),
1921 'radio' => esc_html__('Radio', 'king-addons'),
1922 'date' => esc_html__('Date', 'king-addons'),
1923 'file' => esc_html__('File Upload', 'king-addons'),
1924 ],
1925 'default' => 'text',
1926 ]
1927 );
1928
1929 $repeater->add_control(
1930 'field_label',
1931 [
1932 'label' => esc_html__('Field Label', 'king-addons'),
1933 'type' => Controls_Manager::TEXT,
1934 'default' => esc_html__('Custom Field', 'king-addons'),
1935 'dynamic' => ['active' => true],
1936 ]
1937 );
1938
1939 $repeater->add_control(
1940 'field_placeholder',
1941 [
1942 'label' => esc_html__('Placeholder', 'king-addons'),
1943 'type' => Controls_Manager::TEXT,
1944 'dynamic' => ['active' => true],
1945 'condition' => [
1946 'field_type!' => ['checkbox', 'radio', 'file'],
1947 ],
1948 ]
1949 );
1950
1951 $repeater->add_control(
1952 'field_required',
1953 [
1954 'label' => esc_html__('Required', 'king-addons'),
1955 'type' => Controls_Manager::SWITCHER,
1956 'label_on' => esc_html__('Yes', 'king-addons'),
1957 'label_off' => esc_html__('No', 'king-addons'),
1958 'return_value' => 'yes',
1959 'default' => '',
1960 ]
1961 );
1962
1963 $repeater->add_control(
1964 'field_options',
1965 [
1966 'label' => esc_html__('Options', 'king-addons'),
1967 'type' => Controls_Manager::TEXTAREA,
1968 'description' => esc_html__('Enter each option on a new line. For radio/checkbox use format: value|label', 'king-addons'),
1969 'condition' => [
1970 'field_type' => ['select', 'checkbox', 'radio'],
1971 ],
1972 'default' => "option1|Option 1\noption2|Option 2\noption3|Option 3",
1973 ]
1974 );
1975
1976 $repeater->add_control(
1977 'field_width',
1978 [
1979 'label' => esc_html__('Field Width', 'king-addons'),
1980 'type' => Controls_Manager::SELECT,
1981 'options' => [
1982 'full' => esc_html__('Full Width', 'king-addons'),
1983 'half' => esc_html__('Half Width', 'king-addons'),
1984 ],
1985 'default' => 'full',
1986 ]
1987 );
1988
1989 $this->add_control(
1990 'custom_fields',
1991 [
1992 'label' => esc_html__('Additional Fields', 'king-addons'),
1993 'type' => Controls_Manager::REPEATER,
1994 'fields' => $repeater->get_controls(),
1995 'title_field' => '{{ field_label }}',
1996 'default' => [],
1997 ]
1998 );
1999 }
2000
2001 // User Role Selection
2002 $this->add_control(
2003 'user_role_heading',
2004 [
2005 'label' => esc_html__('User Role', 'king-addons'),
2006 'type' => Controls_Manager::HEADING,
2007 'separator' => 'before',
2008 ]
2009 );
2010
2011 $this->add_control(
2012 'show_user_role_selection',
2013 [
2014 'label' => esc_html__('Show User Role Selection', 'king-addons'),
2015 'type' => Controls_Manager::SWITCHER,
2016 'label_on' => esc_html__('Yes', 'king-addons'),
2017 'label_off' => esc_html__('No', 'king-addons'),
2018 'return_value' => 'yes',
2019 'default' => '',
2020 ]
2021 );
2022
2023 $this->add_control(
2024 'user_role_label',
2025 [
2026 'label' => esc_html__('User Role Label', 'king-addons'),
2027 'type' => Controls_Manager::TEXT,
2028 'default' => esc_html__('Select Role', 'king-addons'),
2029 'condition' => [
2030 'show_user_role_selection' => 'yes',
2031 ],
2032 'dynamic' => ['active' => true],
2033 'ai' => ['active' => false],
2034 ]
2035 );
2036
2037 $this->add_control(
2038 'allowed_user_roles',
2039 [
2040 'label' => esc_html__('Allowed User Roles', 'king-addons'),
2041 'type' => Controls_Manager::SELECT2,
2042 'multiple' => true,
2043 'options' => $this->get_user_roles(),
2044 'default' => ['subscriber'],
2045 'condition' => [
2046 'show_user_role_selection' => 'yes',
2047 ],
2048 ]
2049 );
2050
2051 $this->add_control(
2052 'default_user_role',
2053 [
2054 'label' => esc_html__('Default User Role', 'king-addons'),
2055 'type' => Controls_Manager::SELECT,
2056 'options' => $this->get_user_roles(),
2057 'default' => 'subscriber',
2058 'condition' => [
2059 'show_user_role_selection' => 'yes',
2060 ],
2061 ]
2062 );
2063
2064 // Terms & Conditions
2065 $this->add_control(
2066 'terms_conditions_heading',
2067 [
2068 'label' => esc_html__('Terms & Conditions', 'king-addons'),
2069 'type' => Controls_Manager::HEADING,
2070 'separator' => 'before',
2071 ]
2072 );
2073
2074 $this->add_control(
2075 'show_terms_conditions',
2076 [
2077 'label' => esc_html__('Show Terms & Conditions', 'king-addons'),
2078 'type' => Controls_Manager::SWITCHER,
2079 'label_on' => esc_html__('Yes', 'king-addons'),
2080 'label_off' => esc_html__('No', 'king-addons'),
2081 'return_value' => 'yes',
2082 'default' => '',
2083 ]
2084 );
2085
2086 $this->add_control(
2087 'terms_conditions_text',
2088 [
2089 'label' => esc_html__('Terms & Conditions Text', 'king-addons'),
2090 'type' => Controls_Manager::TEXTAREA,
2091 'default' => esc_html__('I agree to the Terms & Conditions', 'king-addons'),
2092 'condition' => [
2093 'show_terms_conditions' => 'yes',
2094 ],
2095 'dynamic' => ['active' => true],
2096 'ai' => ['active' => false],
2097 ]
2098 );
2099
2100 $this->add_control(
2101 'terms_conditions_link',
2102 [
2103 'label' => esc_html__('Terms & Conditions Link', 'king-addons'),
2104 'type' => Controls_Manager::URL,
2105 'placeholder' => esc_html__('https://yoursite.com/terms', 'king-addons'),
2106 'condition' => [
2107 'show_terms_conditions' => 'yes',
2108 ],
2109 'dynamic' => ['active' => true],
2110 ]
2111 );
2112
2113 $this->add_control(
2114 'terms_required',
2115 [
2116 'label' => esc_html__('Required', 'king-addons'),
2117 'type' => Controls_Manager::SWITCHER,
2118 'label_on' => esc_html__('Yes', 'king-addons'),
2119 'label_off' => esc_html__('No', 'king-addons'),
2120 'return_value' => 'yes',
2121 'default' => 'yes',
2122 'condition' => [
2123 'show_terms_conditions' => 'yes',
2124 ],
2125 ]
2126 );
2127
2128 $this->end_controls_section();
2129
2130 // Redirect Settings (Legacy - for backward compatibility)
2131 $this->start_controls_section(
2132 'section_redirect',
2133 [
2134 'label' => esc_html__('Redirect Settings', 'king-addons'),
2135 ]
2136 );
2137
2138 $this->add_control(
2139 'redirect_info_notice',
2140 [
2141 'type' => Controls_Manager::RAW_HTML,
2142 'raw' => esc_html__('Note: Redirect settings have been moved to the "Register Actions" section above for better organization.', 'king-addons'),
2143 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
2144 ]
2145 );
2146
2147 $this->end_controls_section();
2148
2149 // Pro Features Section
2150 \King_Addons\Core::renderProFeaturesSection($this, '', Controls_Manager::RAW_HTML, 'login-register-form', [
2151 'Custom Registration Fields (Text, Email, Phone, File Upload, Select, Checkbox, Radio)',
2152 'Advanced Social Login (Google, Facebook with OAuth Setup)',
2153 'Mailchimp Integration with Double Opt-in Support',
2154 'Advanced Email Notifications (Custom Templates, Placeholders)',
2155 'Admin Email Notifications for New Registrations',
2156 'Email Template Customization with Placeholders',
2157 'Enhanced Security Features (Rate Limiting, File Validation)',
2158 'Advanced Redirect Options (Role-based Redirects)',
2159 'User Role Assignment & Selection',
2160 'Advanced Form Validation (Client & Server Side)',
2161 'File Upload Security & Validation',
2162 'reCAPTCHA v2/v3 Integration',
2163 'Custom Fields User Meta Storage',
2164 'Priority Support & Updates'
2165 ]);
2166
2167 // Style Controls Start Here
2168 $this->register_style_controls();
2169 }
2170
2171 protected function register_style_controls()
2172 {
2173 // Form Container Style
2174 $this->start_controls_section(
2175 'section_form_container_style',
2176 [
2177 'label' => esc_html__('Form Container', 'king-addons'),
2178 'tab' => Controls_Manager::TAB_STYLE,
2179 ]
2180 );
2181
2182 $this->add_responsive_control(
2183 'form_container_padding',
2184 [
2185 'label' => esc_html__('Padding', 'king-addons'),
2186 'type' => Controls_Manager::DIMENSIONS,
2187 'size_units' => ['px', '%', 'em'],
2188 'default' => [
2189 'top' => '30',
2190 'right' => '30',
2191 'bottom' => '30',
2192 'left' => '30',
2193 'unit' => 'px',
2194 ],
2195 'selectors' => [
2196 '{{WRAPPER}} .king-addons-login-register-form' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2197 ],
2198 ]
2199 );
2200
2201 $this->add_control(
2202 'form_container_background',
2203 [
2204 'label' => esc_html__('Background Color', 'king-addons'),
2205 'type' => Controls_Manager::COLOR,
2206 'default' => '#ffffff',
2207 'selectors' => [
2208 '{{WRAPPER}} .king-addons-login-register-form' => 'background-color: {{VALUE}};',
2209 ],
2210 ]
2211 );
2212
2213 $this->add_group_control(
2214 Group_Control_Border::get_type(),
2215 [
2216 'name' => 'form_container_border',
2217 'label' => esc_html__('Border', 'king-addons'),
2218 'selector' => '{{WRAPPER}} .king-addons-login-register-form',
2219 'fields_options' => [
2220 'border' => [
2221 'default' => 'solid',
2222 ],
2223 'width' => [
2224 'default' => [
2225 'top' => '1',
2226 'right' => '1',
2227 'bottom' => '1',
2228 'left' => '1',
2229 'unit' => 'px',
2230 ],
2231 ],
2232 'color' => [
2233 'default' => '#e1e5e9',
2234 ],
2235 ],
2236 ]
2237 );
2238
2239 $this->add_control(
2240 'form_container_border_radius',
2241 [
2242 'label' => esc_html__('Border Radius', 'king-addons'),
2243 'type' => Controls_Manager::DIMENSIONS,
2244 'size_units' => ['px', '%'],
2245 'default' => [
2246 'top' => '8',
2247 'right' => '8',
2248 'bottom' => '8',
2249 'left' => '8',
2250 'unit' => 'px',
2251 ],
2252 'selectors' => [
2253 '{{WRAPPER}} .king-addons-login-register-form' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2254 ],
2255 ]
2256 );
2257
2258 $this->add_group_control(
2259 Group_Control_Box_Shadow::get_type(),
2260 [
2261 'name' => 'form_container_box_shadow',
2262 'label' => esc_html__('Box Shadow', 'king-addons'),
2263 'selector' => '{{WRAPPER}} .king-addons-login-register-form',
2264 'fields_options' => [
2265 'box_shadow_type' => [
2266 'default' => 'yes',
2267 ],
2268 'box_shadow' => [
2269 'default' => [
2270 'horizontal' => 0,
2271 'vertical' => 4,
2272 'blur' => 20,
2273 'spread' => 0,
2274 'color' => 'rgba(0,0,0,0.1)',
2275 ],
2276 ],
2277 ],
2278 ]
2279 );
2280
2281 $this->end_controls_section();
2282
2283 // Form Title Style
2284 $this->start_controls_section(
2285 'section_form_title_style',
2286 [
2287 'label' => esc_html__('Form Title', 'king-addons'),
2288 'tab' => Controls_Manager::TAB_STYLE,
2289 ]
2290 );
2291
2292 $this->add_group_control(
2293 Group_Control_Typography::get_type(),
2294 [
2295 'name' => 'form_title_typography',
2296 'label' => esc_html__('Typography', 'king-addons'),
2297 'selector' => '{{WRAPPER}} .king-addons-form-title',
2298 ]
2299 );
2300
2301 $this->add_control(
2302 'form_title_color',
2303 [
2304 'label' => esc_html__('Color', 'king-addons'),
2305 'type' => Controls_Manager::COLOR,
2306 'default' => '#333333',
2307 'selectors' => [
2308 '{{WRAPPER}} .king-addons-form-title' => 'color: {{VALUE}};',
2309 ],
2310 ]
2311 );
2312
2313 $this->add_responsive_control(
2314 'form_title_margin',
2315 [
2316 'label' => esc_html__('Margin', 'king-addons'),
2317 'type' => Controls_Manager::DIMENSIONS,
2318 'size_units' => ['px', '%', 'em'],
2319 'default' => [
2320 'top' => '0',
2321 'right' => '0',
2322 'bottom' => '10',
2323 'left' => '0',
2324 'unit' => 'px',
2325 ],
2326 'selectors' => [
2327 '{{WRAPPER}} .king-addons-form-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2328 ],
2329 ]
2330 );
2331
2332 $this->end_controls_section();
2333
2334 // Form Subtitle Style
2335 $this->start_controls_section(
2336 'section_form_subtitle_style',
2337 [
2338 'label' => esc_html__('Form Subtitle', 'king-addons'),
2339 'tab' => Controls_Manager::TAB_STYLE,
2340 ]
2341 );
2342
2343 $this->add_group_control(
2344 Group_Control_Typography::get_type(),
2345 [
2346 'name' => 'form_subtitle_typography',
2347 'label' => esc_html__('Typography', 'king-addons'),
2348 'selector' => '{{WRAPPER}} .king-addons-form-subtitle',
2349 ]
2350 );
2351
2352 $this->add_control(
2353 'form_subtitle_color',
2354 [
2355 'label' => esc_html__('Color', 'king-addons'),
2356 'type' => Controls_Manager::COLOR,
2357 'default' => '#666666',
2358 'selectors' => [
2359 '{{WRAPPER}} .king-addons-form-subtitle' => 'color: {{VALUE}};',
2360 ],
2361 ]
2362 );
2363
2364 $this->add_responsive_control(
2365 'form_subtitle_margin',
2366 [
2367 'label' => esc_html__('Margin', 'king-addons'),
2368 'type' => Controls_Manager::DIMENSIONS,
2369 'size_units' => ['px', '%', 'em'],
2370 'default' => [
2371 'top' => '0',
2372 'right' => '0',
2373 'bottom' => '20',
2374 'left' => '0',
2375 'unit' => 'px',
2376 ],
2377 'selectors' => [
2378 '{{WRAPPER}} .king-addons-form-subtitle' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2379 ],
2380 ]
2381 );
2382
2383 $this->end_controls_section();
2384
2385 // Input Fields Style
2386 $this->start_controls_section(
2387 'section_input_fields_style',
2388 [
2389 'label' => esc_html__('Input Fields', 'king-addons'),
2390 'tab' => Controls_Manager::TAB_STYLE,
2391 ]
2392 );
2393
2394 $this->add_group_control(
2395 Group_Control_Typography::get_type(),
2396 [
2397 'name' => 'input_fields_typography',
2398 'label' => esc_html__('Typography', 'king-addons'),
2399 'selector' => '{{WRAPPER}} .king-addons-form-field input',
2400 ]
2401 );
2402
2403 $this->add_control(
2404 'input_fields_color',
2405 [
2406 'label' => esc_html__('Text Color', 'king-addons'),
2407 'type' => Controls_Manager::COLOR,
2408 'default' => '#333333',
2409 'selectors' => [
2410 '{{WRAPPER}} .king-addons-form-field input' => 'color: {{VALUE}};',
2411 ],
2412 ]
2413 );
2414
2415 $this->add_control(
2416 'input_fields_background',
2417 [
2418 'label' => esc_html__('Background Color', 'king-addons'),
2419 'type' => Controls_Manager::COLOR,
2420 'default' => '#ffffff',
2421 'selectors' => [
2422 '{{WRAPPER}} .king-addons-form-field input' => 'background-color: {{VALUE}};',
2423 ],
2424 ]
2425 );
2426
2427 $this->add_responsive_control(
2428 'input_fields_padding',
2429 [
2430 'label' => esc_html__('Padding', 'king-addons'),
2431 'type' => Controls_Manager::DIMENSIONS,
2432 'size_units' => ['px', '%', 'em'],
2433 'default' => [
2434 'top' => '12',
2435 'right' => '15',
2436 'bottom' => '12',
2437 'left' => '15',
2438 'unit' => 'px',
2439 ],
2440 'selectors' => [
2441 '{{WRAPPER}} .king-addons-form-field input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2442 ],
2443 ]
2444 );
2445
2446 $this->add_responsive_control(
2447 'input_fields_margin',
2448 [
2449 'label' => esc_html__('Margin', 'king-addons'),
2450 'type' => Controls_Manager::DIMENSIONS,
2451 'size_units' => ['px', '%', 'em'],
2452 'default' => [
2453 'top' => '0',
2454 'right' => '0',
2455 'bottom' => '15',
2456 'left' => '0',
2457 'unit' => 'px',
2458 ],
2459 'selectors' => [
2460 '{{WRAPPER}} .king-addons-form-field' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2461 ],
2462 ]
2463 );
2464
2465 $this->add_group_control(
2466 Group_Control_Border::get_type(),
2467 [
2468 'name' => 'input_fields_border',
2469 'label' => esc_html__('Border', 'king-addons'),
2470 'selector' => '{{WRAPPER}} .king-addons-form-field input',
2471 ]
2472 );
2473
2474 $this->add_control(
2475 'input_fields_border_radius',
2476 [
2477 'label' => esc_html__('Border Radius', 'king-addons'),
2478 'type' => Controls_Manager::DIMENSIONS,
2479 'size_units' => ['px', '%'],
2480 'default' => [
2481 'top' => '3',
2482 'right' => '3',
2483 'bottom' => '3',
2484 'left' => '3',
2485 'unit' => 'px',
2486 ],
2487 'selectors' => [
2488 '{{WRAPPER}} .king-addons-form-field input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2489 ],
2490 ]
2491 );
2492
2493 $this->add_control(
2494 'input_fields_focus_color',
2495 [
2496 'label' => esc_html__('Focus Border Color', 'king-addons'),
2497 'type' => Controls_Manager::COLOR,
2498 'default' => '#007cba',
2499 'selectors' => [
2500 '{{WRAPPER}} .king-addons-form-field input:focus' => 'border-color: {{VALUE}};',
2501 ],
2502 ]
2503 );
2504
2505 $this->end_controls_section();
2506
2507 // Labels Style
2508 $this->start_controls_section(
2509 'section_labels_style',
2510 [
2511 'label' => esc_html__('Labels', 'king-addons'),
2512 'tab' => Controls_Manager::TAB_STYLE,
2513 'condition' => [
2514 'show_labels' => 'yes',
2515 ],
2516 ]
2517 );
2518
2519 $this->add_group_control(
2520 Group_Control_Typography::get_type(),
2521 [
2522 'name' => 'labels_typography',
2523 'label' => esc_html__('Typography', 'king-addons'),
2524 'selector' => '{{WRAPPER}} .king-addons-form-field label',
2525 ]
2526 );
2527
2528 $this->add_control(
2529 'labels_color',
2530 [
2531 'label' => esc_html__('Color', 'king-addons'),
2532 'type' => Controls_Manager::COLOR,
2533 'default' => '#333333',
2534 'selectors' => [
2535 '{{WRAPPER}} .king-addons-form-field label' => 'color: {{VALUE}};',
2536 ],
2537 ]
2538 );
2539
2540 $this->add_responsive_control(
2541 'labels_margin',
2542 [
2543 'label' => esc_html__('Margin', 'king-addons'),
2544 'type' => Controls_Manager::DIMENSIONS,
2545 'size_units' => ['px', '%', 'em'],
2546 'default' => [
2547 'top' => '0',
2548 'right' => '0',
2549 'bottom' => '5',
2550 'left' => '0',
2551 'unit' => 'px',
2552 ],
2553 'selectors' => [
2554 '{{WRAPPER}} .king-addons-form-field label' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2555 ],
2556 ]
2557 );
2558
2559 $this->end_controls_section();
2560
2561 // Button Style
2562 $this->start_controls_section(
2563 'section_button_style',
2564 [
2565 'label' => esc_html__('Buttons', 'king-addons'),
2566 'tab' => Controls_Manager::TAB_STYLE,
2567 ]
2568 );
2569
2570 $this->add_group_control(
2571 Group_Control_Typography::get_type(),
2572 [
2573 'name' => 'button_typography',
2574 'label' => esc_html__('Typography', 'king-addons'),
2575 'selector' => '{{WRAPPER}} .king-addons-form-button',
2576 ]
2577 );
2578
2579 $this->start_controls_tabs('button_style_tabs');
2580
2581 $this->start_controls_tab(
2582 'button_normal_tab',
2583 [
2584 'label' => esc_html__('Normal', 'king-addons'),
2585 ]
2586 );
2587
2588 $this->add_control(
2589 'button_color',
2590 [
2591 'label' => esc_html__('Text Color', 'king-addons'),
2592 'type' => Controls_Manager::COLOR,
2593 'default' => '#ffffff',
2594 'selectors' => [
2595 '{{WRAPPER}} .king-addons-form-button' => 'color: {{VALUE}};',
2596 ],
2597 ]
2598 );
2599
2600 $this->add_control(
2601 'button_background',
2602 [
2603 'label' => esc_html__('Background Color', 'king-addons'),
2604 'type' => Controls_Manager::COLOR,
2605 'default' => '#007cba',
2606 'selectors' => [
2607 '{{WRAPPER}} .king-addons-form-button' => 'background-color: {{VALUE}};',
2608 ],
2609 ]
2610 );
2611
2612 $this->end_controls_tab();
2613
2614 $this->start_controls_tab(
2615 'button_hover_tab',
2616 [
2617 'label' => esc_html__('Hover', 'king-addons'),
2618 ]
2619 );
2620
2621 $this->add_control(
2622 'button_hover_color',
2623 [
2624 'label' => esc_html__('Text Color', 'king-addons'),
2625 'type' => Controls_Manager::COLOR,
2626 'default' => '#ffffff',
2627 'selectors' => [
2628 '{{WRAPPER}} .king-addons-form-button:hover' => 'color: {{VALUE}};',
2629 ],
2630 ]
2631 );
2632
2633 $this->add_control(
2634 'button_hover_background',
2635 [
2636 'label' => esc_html__('Background Color', 'king-addons'),
2637 'type' => Controls_Manager::COLOR,
2638 'default' => '#005a87',
2639 'selectors' => [
2640 '{{WRAPPER}} .king-addons-form-button:hover' => 'background-color: {{VALUE}};',
2641 ],
2642 ]
2643 );
2644
2645 $this->end_controls_tab();
2646
2647 $this->end_controls_tabs();
2648
2649 $this->add_responsive_control(
2650 'button_padding',
2651 [
2652 'label' => esc_html__('Padding', 'king-addons'),
2653 'type' => Controls_Manager::DIMENSIONS,
2654 'size_units' => ['px', '%', 'em'],
2655 'default' => [
2656 'top' => '12',
2657 'right' => '30',
2658 'bottom' => '12',
2659 'left' => '30',
2660 'unit' => 'px',
2661 ],
2662 'selectors' => [
2663 '{{WRAPPER}} .king-addons-form-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2664 ],
2665 'separator' => 'before',
2666 ]
2667 );
2668
2669 $this->add_responsive_control(
2670 'button_margin',
2671 [
2672 'label' => esc_html__('Margin', 'king-addons'),
2673 'type' => Controls_Manager::DIMENSIONS,
2674 'size_units' => ['px', '%', 'em'],
2675 'default' => [
2676 'top' => '10',
2677 'right' => '0',
2678 'bottom' => '15',
2679 'left' => '0',
2680 'unit' => 'px',
2681 ],
2682 'selectors' => [
2683 '{{WRAPPER}} .king-addons-form-button' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2684 ],
2685 ]
2686 );
2687
2688 $this->add_group_control(
2689 Group_Control_Border::get_type(),
2690 [
2691 'name' => 'button_border',
2692 'label' => esc_html__('Border', 'king-addons'),
2693 'selector' => '{{WRAPPER}} .king-addons-form-button',
2694 ]
2695 );
2696
2697 $this->add_control(
2698 'button_border_radius',
2699 [
2700 'label' => esc_html__('Border Radius', 'king-addons'),
2701 'type' => Controls_Manager::DIMENSIONS,
2702 'size_units' => ['px', '%'],
2703 'default' => [
2704 'top' => '3',
2705 'right' => '3',
2706 'bottom' => '3',
2707 'left' => '3',
2708 'unit' => 'px',
2709 ],
2710 'selectors' => [
2711 '{{WRAPPER}} .king-addons-form-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2712 ],
2713 ]
2714 );
2715
2716 $this->add_responsive_control(
2717 'button_width',
2718 [
2719 'label' => esc_html__('Width', 'king-addons'),
2720 'type' => Controls_Manager::SLIDER,
2721 'size_units' => ['px', '%'],
2722 'range' => [
2723 'px' => [
2724 'min' => 0,
2725 'max' => 1000,
2726 ],
2727 '%' => [
2728 'min' => 0,
2729 'max' => 100,
2730 ],
2731 ],
2732 'default' => [
2733 'unit' => '%',
2734 'size' => 100,
2735 ],
2736 'selectors' => [
2737 '{{WRAPPER}} .king-addons-form-button' => 'width: {{SIZE}}{{UNIT}};',
2738 ],
2739 ]
2740 );
2741
2742 $this->end_controls_section();
2743
2744 // Links Style
2745 $this->start_controls_section(
2746 'section_links_style',
2747 [
2748 'label' => esc_html__('Links', 'king-addons'),
2749 'tab' => Controls_Manager::TAB_STYLE,
2750 ]
2751 );
2752
2753 $this->add_group_control(
2754 Group_Control_Typography::get_type(),
2755 [
2756 'name' => 'links_typography',
2757 'label' => esc_html__('Typography', 'king-addons'),
2758 'selector' => '{{WRAPPER}} .king-addons-form-link, {{WRAPPER}} .king-addons-form-toggle',
2759 ]
2760 );
2761
2762 $this->start_controls_tabs('links_style_tabs');
2763
2764 $this->start_controls_tab(
2765 'links_normal_tab',
2766 [
2767 'label' => esc_html__('Normal', 'king-addons'),
2768 ]
2769 );
2770
2771 $this->add_control(
2772 'links_color',
2773 [
2774 'label' => esc_html__('Color', 'king-addons'),
2775 'type' => Controls_Manager::COLOR,
2776 'default' => '#007cba',
2777 'selectors' => [
2778 '{{WRAPPER}} .king-addons-form-link, {{WRAPPER}} .king-addons-form-toggle' => 'color: {{VALUE}};',
2779 ],
2780 ]
2781 );
2782
2783 $this->end_controls_tab();
2784
2785 $this->start_controls_tab(
2786 'links_hover_tab',
2787 [
2788 'label' => esc_html__('Hover', 'king-addons'),
2789 ]
2790 );
2791
2792 $this->add_control(
2793 'links_hover_color',
2794 [
2795 'label' => esc_html__('Color', 'king-addons'),
2796 'type' => Controls_Manager::COLOR,
2797 'default' => '#005a87',
2798 'selectors' => [
2799 '{{WRAPPER}} .king-addons-form-link:hover, {{WRAPPER}} .king-addons-form-toggle:hover' => 'color: {{VALUE}};',
2800 ],
2801 ]
2802 );
2803
2804 $this->end_controls_tab();
2805
2806 $this->end_controls_tabs();
2807
2808 $this->add_responsive_control(
2809 'links_margin',
2810 [
2811 'label' => esc_html__('Margin', 'king-addons'),
2812 'type' => Controls_Manager::DIMENSIONS,
2813 'size_units' => ['px', '%', 'em'],
2814 'default' => [
2815 'top' => '10',
2816 'right' => '0',
2817 'bottom' => '0',
2818 'left' => '0',
2819 'unit' => 'px',
2820 ],
2821 'selectors' => [
2822 '{{WRAPPER}} .king-addons-form-link, {{WRAPPER}} .king-addons-form-toggle' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2823 ],
2824 'separator' => 'before',
2825 ]
2826 );
2827
2828 $this->end_controls_section();
2829
2830 // Messages Style
2831 $this->start_controls_section(
2832 'section_messages_style',
2833 [
2834 'label' => esc_html__('Messages', 'king-addons'),
2835 'tab' => Controls_Manager::TAB_STYLE,
2836 ]
2837 );
2838
2839 $this->add_group_control(
2840 Group_Control_Typography::get_type(),
2841 [
2842 'name' => 'messages_typography',
2843 'label' => esc_html__('Typography', 'king-addons'),
2844 'selector' => '{{WRAPPER}} .king-addons-form-message',
2845 ]
2846 );
2847
2848 $this->add_control(
2849 'success_message_color',
2850 [
2851 'label' => esc_html__('Success Message Color', 'king-addons'),
2852 'type' => Controls_Manager::COLOR,
2853 'default' => '#4caf50',
2854 'selectors' => [
2855 '{{WRAPPER}} .king-addons-form-message.success' => 'color: {{VALUE}};',
2856 ],
2857 ]
2858 );
2859
2860 $this->add_control(
2861 'error_message_color',
2862 [
2863 'label' => esc_html__('Error Message Color', 'king-addons'),
2864 'type' => Controls_Manager::COLOR,
2865 'default' => '#f44336',
2866 'selectors' => [
2867 '{{WRAPPER}} .king-addons-form-message.error' => 'color: {{VALUE}};',
2868 ],
2869 ]
2870 );
2871
2872 $this->add_responsive_control(
2873 'messages_padding',
2874 [
2875 'label' => esc_html__('Padding', 'king-addons'),
2876 'type' => Controls_Manager::DIMENSIONS,
2877 'size_units' => ['px', '%', 'em'],
2878 'default' => [
2879 'top' => '10',
2880 'right' => '15',
2881 'bottom' => '10',
2882 'left' => '15',
2883 'unit' => 'px',
2884 ],
2885 'selectors' => [
2886 '{{WRAPPER}} .king-addons-form-message' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2887 ],
2888 ]
2889 );
2890
2891 $this->add_responsive_control(
2892 'messages_margin',
2893 [
2894 'label' => esc_html__('Margin', 'king-addons'),
2895 'type' => Controls_Manager::DIMENSIONS,
2896 'size_units' => ['px', '%', 'em'],
2897 'default' => [
2898 'top' => '0',
2899 'right' => '0',
2900 'bottom' => '15',
2901 'left' => '0',
2902 'unit' => 'px',
2903 ],
2904 'selectors' => [
2905 '{{WRAPPER}} .king-addons-form-message' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2906 ],
2907 ]
2908 );
2909
2910 $this->add_control(
2911 'messages_border_radius',
2912 [
2913 'label' => esc_html__('Border Radius', 'king-addons'),
2914 'type' => Controls_Manager::DIMENSIONS,
2915 'size_units' => ['px', '%'],
2916 'default' => [
2917 'top' => '3',
2918 'right' => '3',
2919 'bottom' => '3',
2920 'left' => '3',
2921 'unit' => 'px',
2922 ],
2923 'selectors' => [
2924 '{{WRAPPER}} .king-addons-form-message' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
2925 ],
2926 ]
2927 );
2928
2929 $this->end_controls_section();
2930 }
2931
2932 protected function render()
2933 {
2934 $settings = $this->get_settings_for_display();
2935
2936 if (king_addons_freemius()->can_use_premium_code__premium_only()) {
2937 $this->render_pro($settings);
2938 } else {
2939 $this->render_free($settings);
2940 }
2941 }
2942
2943 /**
2944 * Render Pro version with all features
2945 */
2946 private function render_pro($settings)
2947 {
2948 // Full implementation with all features
2949 $this->render_full_form($settings);
2950 }
2951
2952 /**
2953 * Render Free version with limited features
2954 */
2955 private function render_free($settings)
2956 {
2957 // Disable premium features for free users
2958 $settings['custom_fields'] = []; // No custom fields in free
2959 $settings['enable_social_login'] = 'no'; // No social login in free
2960 $settings['enable_mailchimp_integration'] = 'no'; // No Mailchimp in free
2961 $settings['enable_admin_email'] = 'no'; // No admin emails in free
2962
2963 // Render with limited settings
2964 $this->render_full_form($settings);
2965
2966 // Show upgrade notice if premium features are attempted
2967 if ($this->get_settings('enable_social_login') === 'yes' ||
2968 $this->get_settings('enable_mailchimp_integration') === 'yes' ||
2969 !empty($this->get_settings('custom_fields'))) {
2970 ?>
2971 <div class="king-addons-pro-notice-widget" style="text-align: center; padding: 20px; background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 8px; margin: 10px 0;">
2972 <h4 style="margin: 0 0 10px 0; color: #495057;">🔒 Premium Features Detected</h4>
2973 <p style="margin: 0 0 15px 0; color: #6c757d;">You have configured premium features that require King Addons Pro.</p>
2974 <a href="https://kingaddons.com/pricing/?utm_source=kng-widget-login-register-form-frontend-upgrade-pro&utm_medium=widget&utm_campaign=kng"
2975 target="_blank"
2976 style="display: inline-block; padding: 10px 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; text-decoration: none; border-radius: 5px; font-weight: 500;">
2977 Upgrade to Pro
2978 </a>
2979 </div>
2980 <?php
2981 }
2982 }
2983
2984 /**
2985 * Full form rendering (used by both free and pro)
2986 */
2987 private function render_full_form($settings)
2988 {
2989 $widget_id = $this->get_id();
2990 $post_id = get_the_ID();
2991 if (empty($post_id)) {
2992 $post_id = get_queried_object_id();
2993 }
2994 $default_form = $settings['default_form_type'];
2995 $enable_ajax = $settings['enable_ajax'] === 'yes';
2996 $show_labels = $settings['show_labels'] === 'yes';
2997
2998 // Check if user registration is enabled
2999 $user_can_register = get_option('users_can_register');
3000
3001 // Check if user is already logged in and should be redirected
3002 if (is_user_logged_in() && $settings['redirect_logout_user'] === 'yes' && !empty($settings['redirect_logout_url']['url'])) {
3003 $redirect_url = $settings['redirect_logout_url']['url'];
3004 ?>
3005 <script>
3006 window.location.href = '<?php echo esc_js($redirect_url); ?>';
3007 </script>
3008 <?php
3009 return;
3010 }
3011
3012 // Enqueue reCAPTCHA API if enabled
3013 if ($settings['enable_recaptcha'] === 'yes' && !empty($settings['recaptcha_site_key'])) {
3014 $recaptcha_url = 'https://www.google.com/recaptcha/api.js';
3015 if ($settings['recaptcha_version'] === 'v3') {
3016 $recaptcha_url .= '?render=' . $settings['recaptcha_site_key'];
3017 }
3018 wp_enqueue_script('google-recaptcha', $recaptcha_url, [], null, true);
3019 }
3020
3021 // Enqueue Social Login APIs if enabled
3022 if ($settings['enable_social_login'] === 'yes') {
3023 // Google Sign-In API
3024 if ($settings['enable_google_login'] === 'yes' && !empty($settings['google_client_id'])) {
3025 wp_enqueue_script('google-signin-api', 'https://accounts.google.com/gsi/client', [], null, true);
3026 }
3027
3028 // Facebook SDK
3029 if ($settings['enable_facebook_login'] === 'yes' && !empty($settings['facebook_app_id'])) {
3030 $fb_app_id = $settings['facebook_app_id'];
3031 $fb_script = "
3032 window.fbAsyncInit = function() {
3033 FB.init({
3034 appId: '{$fb_app_id}',
3035 cookie: true,
3036 xfbml: true,
3037 version: 'v18.0'
3038 });
3039 };
3040 (function(d, s, id){
3041 var js, fjs = d.getElementsByTagName(s)[0];
3042 if (d.getElementById(id)) {return;}
3043 js = d.createElement(s); js.id = id;
3044 js.src = 'https://connect.facebook.net/en_US/sdk.js';
3045 fjs.parentNode.insertBefore(js, fjs);
3046 }(document, 'script', 'facebook-jssdk'));
3047 ";
3048 wp_add_inline_script('king-addons-login-register-form-script', $fb_script);
3049 }
3050 }
3051
3052 // AJAX handlers are now registered in constructor
3053
3054 ?>
3055 <div class="king-addons-login-register-form-wrapper"
3056 data-widget-id="<?php echo esc_attr($widget_id); ?>"
3057 data-post-id="<?php echo esc_attr(absint($post_id)); ?>"
3058 data-ajax="<?php echo $enable_ajax ? 'true' : 'false'; ?>"
3059 data-recaptcha-threshold="<?php echo esc_attr($settings['recaptcha_score_threshold']['size'] ?? '0.5'); ?>"
3060 data-redirect-login="<?php echo esc_attr($settings['redirect_after_login']['url'] ?? ''); ?>"
3061 data-redirect-register="<?php echo esc_attr($settings['redirect_after_register']['url'] ?? ''); ?>"
3062 data-terms-required="<?php echo esc_attr($settings['terms_required'] ?? 'no'); ?>"
3063 data-enable-user-email="<?php echo esc_attr($settings['enable_user_email'] ?? 'yes'); ?>"
3064 data-user-email-subject="<?php echo esc_attr($settings['user_email_subject'] ?? ''); ?>"
3065 data-user-email-content="<?php echo esc_attr($settings['user_email_content'] ?? ''); ?>"
3066 data-enable-admin-email="<?php echo esc_attr($settings['enable_admin_email'] ?? 'no'); ?>"
3067 data-admin-email-address="<?php echo esc_attr($settings['admin_email_address'] ?? ''); ?>"
3068 data-admin-email-subject="<?php echo esc_attr($settings['admin_email_subject'] ?? ''); ?>"
3069 data-admin-email-content="<?php echo esc_attr($settings['admin_email_content'] ?? ''); ?>"
3070 data-enable-mailchimp="<?php echo esc_attr($settings['enable_mailchimp_integration'] ?? 'no'); ?>"
3071 data-enable-social-login="<?php echo esc_attr($settings['enable_social_login'] ?? 'no'); ?>"
3072 data-google-client-id="<?php echo esc_attr($settings['google_client_id'] ?? ''); ?>"
3073 data-facebook-app-id="<?php echo esc_attr($settings['facebook_app_id'] ?? ''); ?>"
3074 data-auto-login="<?php echo esc_attr($settings['auto_login_after_register'] ?? 'yes'); ?>">
3075
3076 <!-- Form Messages Container -->
3077 <div class="king-addons-form-message" style="display: none;"></div>
3078
3079 <?php $this->render_form_header($settings); ?>
3080
3081 <!-- Login Form -->
3082 <div class="king-addons-login-register-form king-addons-login-form <?php echo $default_form === 'register' ? 'king-addons-form-hidden' : ''; ?>"
3083 id="king-addons-login-form-<?php echo esc_attr($widget_id); ?>">
3084
3085 <?php if (!empty($settings['login_form_title'])): ?>
3086 <h3 class="king-addons-form-title"><?php echo esc_html($settings['login_form_title']); ?></h3>
3087 <?php endif; ?>
3088
3089 <?php if (!empty($settings['login_form_subtitle'])): ?>
3090 <p class="king-addons-form-subtitle"><?php echo esc_html($settings['login_form_subtitle']); ?></p>
3091 <?php endif; ?>
3092
3093 <div class="king-addons-form-message"></div>
3094
3095 <form class="king-addons-form" method="post">
3096 <?php wp_nonce_field('king_addons_login_action', 'king_addons_login_nonce'); ?>
3097
3098 <div class="king-addons-form-field">
3099 <?php if ($show_labels && !empty($settings['login_username_label'])): ?>
3100 <label for="king-addons-login-username-<?php echo esc_attr($widget_id); ?>">
3101 <?php echo esc_html($settings['login_username_label']); ?>
3102 </label>
3103 <?php endif; ?>
3104 <input type="text"
3105 id="king-addons-login-username-<?php echo esc_attr($widget_id); ?>"
3106 name="username"
3107 placeholder="<?php echo esc_attr($settings['login_username_placeholder']); ?>"
3108 required>
3109 </div>
3110
3111 <div class="king-addons-form-field <?php echo esc_attr($settings['show_password_visibility_login'] === 'yes' ? 'king-addons-password-field' : ''); ?>">
3112 <?php if ($show_labels && !empty($settings['login_password_label'])): ?>
3113 <label for="king-addons-login-password-<?php echo esc_attr($widget_id); ?>">
3114 <?php echo esc_html($settings['login_password_label']); ?>
3115 </label>
3116 <?php endif; ?>
3117 <div class="king-addons-password-input-wrapper">
3118 <input type="password"
3119 id="king-addons-login-password-<?php echo esc_attr($widget_id); ?>"
3120 name="password"
3121 placeholder="<?php echo esc_attr($settings['login_password_placeholder']); ?>"
3122 required>
3123 <?php if ($settings['show_password_visibility_login'] === 'yes'): ?>
3124 <button type="button" class="king-addons-password-toggle" aria-label="Toggle password visibility">
3125 <span class="king-addons-password-toggle-icon">👁</span>
3126 </button>
3127 <?php endif; ?>
3128 </div>
3129 </div>
3130
3131 <?php if ($settings['show_remember_me'] === 'yes'): ?>
3132 <div class="king-addons-form-field king-addons-checkbox-field">
3133 <label>
3134 <input type="checkbox" name="remember" value="1">
3135 <?php echo esc_html($settings['remember_me_text']); ?>
3136 </label>
3137 </div>
3138 <?php endif; ?>
3139
3140 <?php $this->render_recaptcha($settings, 'login'); ?>
3141
3142 <div class="king-addons-form-field">
3143 <button type="submit" class="king-addons-form-button king-addons-login-button">
3144 <?php echo esc_html($settings['login_button_text']); ?>
3145 </button>
3146 </div>
3147
3148 <div class="king-addons-form-links">
3149 <?php if ($settings['show_lost_password_link'] === 'yes'): ?>
3150 <span class="king-addons-form-toggle" data-toggle="lostpassword">
3151 <?php echo esc_html($settings['lost_password_link_text']); ?>
3152 </span>
3153 <?php endif; ?>
3154
3155 <?php if ($user_can_register && $settings['show_register_link'] === 'yes'): ?>
3156 <span class="king-addons-form-toggle" data-toggle="register">
3157 <?php echo esc_html($settings['register_link_text']); ?>
3158 </span>
3159 <?php endif; ?>
3160 </div>
3161 </form>
3162
3163 <?php $this->render_social_login($settings, 'login'); ?>
3164 </div>
3165
3166 <!-- Register Form -->
3167 <?php if ($user_can_register): ?>
3168 <div class="king-addons-login-register-form king-addons-register-form <?php echo $default_form === 'login' ? 'king-addons-form-hidden' : ''; ?>"
3169 id="king-addons-register-form-<?php echo esc_attr($widget_id); ?>">
3170
3171 <?php if (!empty($settings['register_form_title'])): ?>
3172 <h3 class="king-addons-form-title"><?php echo esc_html($settings['register_form_title']); ?></h3>
3173 <?php endif; ?>
3174
3175 <?php if (!empty($settings['register_form_subtitle'])): ?>
3176 <p class="king-addons-form-subtitle"><?php echo esc_html($settings['register_form_subtitle']); ?></p>
3177 <?php endif; ?>
3178
3179 <div class="king-addons-form-message"></div>
3180
3181 <form class="king-addons-form" method="post">
3182 <?php wp_nonce_field('king_addons_register_action', 'king_addons_register_nonce'); ?>
3183
3184 <?php if ($settings['show_first_name'] === 'yes'): ?>
3185 <div class="king-addons-form-field">
3186 <?php if ($show_labels && !empty($settings['register_first_name_label'])): ?>
3187 <label for="king-addons-register-first-name-<?php echo esc_attr($widget_id); ?>">
3188 <?php echo esc_html($settings['register_first_name_label']); ?>
3189 </label>
3190 <?php endif; ?>
3191 <input type="text"
3192 id="king-addons-register-first-name-<?php echo esc_attr($widget_id); ?>"
3193 name="first_name"
3194 placeholder="<?php echo esc_attr($settings['register_first_name_placeholder']); ?>">
3195 </div>
3196 <?php endif; ?>
3197
3198 <?php if ($settings['show_last_name'] === 'yes'): ?>
3199 <div class="king-addons-form-field">
3200 <?php if ($show_labels && !empty($settings['register_last_name_label'])): ?>
3201 <label for="king-addons-register-last-name-<?php echo esc_attr($widget_id); ?>">
3202 <?php echo esc_html($settings['register_last_name_label']); ?>
3203 </label>
3204 <?php endif; ?>
3205 <input type="text"
3206 id="king-addons-register-last-name-<?php echo esc_attr($widget_id); ?>"
3207 name="last_name"
3208 placeholder="<?php echo esc_attr($settings['register_last_name_placeholder']); ?>">
3209 </div>
3210 <?php endif; ?>
3211
3212 <div class="king-addons-form-field">
3213 <?php if ($show_labels && !empty($settings['register_email_label'])): ?>
3214 <label for="king-addons-register-email-<?php echo esc_attr($widget_id); ?>">
3215 <?php echo esc_html($settings['register_email_label']); ?>
3216 </label>
3217 <?php endif; ?>
3218 <input type="email"
3219 id="king-addons-register-email-<?php echo esc_attr($widget_id); ?>"
3220 name="email"
3221 placeholder="<?php echo esc_attr($settings['register_email_placeholder']); ?>"
3222 required>
3223 </div>
3224
3225 <div class="king-addons-form-field">
3226 <?php if ($show_labels && !empty($settings['register_username_label'])): ?>
3227 <label for="king-addons-register-username-<?php echo esc_attr($widget_id); ?>">
3228 <?php echo esc_html($settings['register_username_label']); ?>
3229 </label>
3230 <?php endif; ?>
3231 <input type="text"
3232 id="king-addons-register-username-<?php echo esc_attr($widget_id); ?>"
3233 name="username"
3234 placeholder="<?php echo esc_attr($settings['register_username_placeholder']); ?>"
3235 required>
3236 </div>
3237
3238 <?php if ($settings['show_website'] === 'yes'): ?>
3239 <div class="king-addons-form-field">
3240 <?php if ($show_labels && !empty($settings['register_website_label'])): ?>
3241 <label for="king-addons-register-website-<?php echo esc_attr($widget_id); ?>">
3242 <?php echo esc_html($settings['register_website_label']); ?>
3243 </label>
3244 <?php endif; ?>
3245 <input type="url"
3246 id="king-addons-register-website-<?php echo esc_attr($widget_id); ?>"
3247 name="website"
3248 placeholder="<?php echo esc_attr($settings['register_website_placeholder']); ?>">
3249 </div>
3250 <?php endif; ?>
3251
3252 <?php if ($settings['show_phone'] === 'yes'): ?>
3253 <div class="king-addons-form-field">
3254 <?php if ($show_labels && !empty($settings['register_phone_label'])): ?>
3255 <label for="king-addons-register-phone-<?php echo esc_attr($widget_id); ?>">
3256 <?php echo esc_html($settings['register_phone_label']); ?>
3257 </label>
3258 <?php endif; ?>
3259 <input type="tel"
3260 id="king-addons-register-phone-<?php echo esc_attr($widget_id); ?>"
3261 name="phone"
3262 placeholder="<?php echo esc_attr($settings['register_phone_placeholder']); ?>">
3263 </div>
3264 <?php endif; ?>
3265
3266 <div class="king-addons-form-field <?php echo esc_attr($settings['show_password_visibility_register'] === 'yes' ? 'king-addons-password-field' : ''); ?>">
3267 <?php if ($show_labels && !empty($settings['register_password_label'])): ?>
3268 <label for="king-addons-register-password-<?php echo esc_attr($widget_id); ?>">
3269 <?php echo esc_html($settings['register_password_label']); ?>
3270 </label>
3271 <?php endif; ?>
3272 <div class="king-addons-password-input-wrapper">
3273 <input type="password"
3274 id="king-addons-register-password-<?php echo esc_attr($widget_id); ?>"
3275 name="password"
3276 placeholder="<?php echo esc_attr($settings['register_password_placeholder']); ?>"
3277 required>
3278 <?php if ($settings['show_password_visibility_register'] === 'yes'): ?>
3279 <button type="button" class="king-addons-password-toggle" aria-label="Toggle password visibility">
3280 <span class="king-addons-password-toggle-icon">👁</span>
3281 </button>
3282 <?php endif; ?>
3283 </div>
3284 </div>
3285
3286 <div class="king-addons-form-field <?php echo esc_attr($settings['show_password_visibility_register'] === 'yes' ? 'king-addons-password-field' : ''); ?>">
3287 <?php if ($show_labels && !empty($settings['register_confirm_password_label'])): ?>
3288 <label for="king-addons-register-confirm-password-<?php echo esc_attr($widget_id); ?>">
3289 <?php echo esc_html($settings['register_confirm_password_label']); ?>
3290 </label>
3291 <?php endif; ?>
3292 <div class="king-addons-password-input-wrapper">
3293 <input type="password"
3294 id="king-addons-register-confirm-password-<?php echo esc_attr($widget_id); ?>"
3295 name="confirm_password"
3296 placeholder="<?php echo esc_attr($settings['register_confirm_password_placeholder']); ?>"
3297 required>
3298 <?php if ($settings['show_password_visibility_register'] === 'yes'): ?>
3299 <button type="button" class="king-addons-password-toggle" aria-label="Toggle password visibility">
3300 <span class="king-addons-password-toggle-icon">👁</span>
3301 </button>
3302 <?php endif; ?>
3303 </div>
3304 </div>
3305
3306 <?php $this->render_custom_fields($settings, $show_labels); ?>
3307
3308 <?php if ($settings['show_user_role_selection'] === 'yes' && !empty($settings['allowed_user_roles'])): ?>
3309 <div class="king-addons-form-field">
3310 <?php if ($show_labels && !empty($settings['user_role_label'])): ?>
3311 <label for="king-addons-register-user-role-<?php echo esc_attr($widget_id); ?>">
3312 <?php echo esc_html($settings['user_role_label']); ?>
3313 </label>
3314 <?php endif; ?>
3315 <select id="king-addons-register-user-role-<?php echo esc_attr($widget_id); ?>" name="user_role">
3316 <?php
3317 $user_roles = $this->get_user_roles();
3318 foreach ($settings['allowed_user_roles'] as $role_key):
3319 if (isset($user_roles[$role_key])):
3320 ?>
3321 <option value="<?php echo esc_attr($role_key); ?>"
3322 <?php selected($settings['default_user_role'], $role_key); ?>>
3323 <?php echo esc_html($user_roles[$role_key]); ?>
3324 </option>
3325 <?php
3326 endif;
3327 endforeach;
3328 ?>
3329 </select>
3330 </div>
3331 <?php endif; ?>
3332
3333 <?php if ($settings['show_terms_conditions'] === 'yes'): ?>
3334 <div class="king-addons-form-field king-addons-checkbox-field">
3335 <label>
3336 <input type="checkbox" name="terms_conditions" value="1"
3337 <?php echo esc_attr($settings['terms_required'] === 'yes' ? 'required' : ''); ?>>
3338 <?php
3339 if (!empty($settings['terms_conditions_link']['url'])):
3340 $link_target = $settings['terms_conditions_link']['is_external'] ? '_blank' : '_self';
3341 $link_nofollow = $settings['terms_conditions_link']['nofollow'] ? 'rel="nofollow"' : '';
3342 ?>
3343 <a href="<?php echo esc_url($settings['terms_conditions_link']['url']); ?>"
3344 target="<?php echo esc_attr($link_target); ?>"
3345 <?php echo $link_nofollow; ?>>
3346 <?php echo esc_html($settings['terms_conditions_text']); ?>
3347 </a>
3348 <?php else: ?>
3349 <?php echo esc_html($settings['terms_conditions_text']); ?>
3350 <?php endif; ?>
3351 </label>
3352 </div>
3353 <?php endif; ?>
3354
3355 <?php $this->render_recaptcha($settings, 'register'); ?>
3356
3357 <div class="king-addons-form-field">
3358 <button type="submit" class="king-addons-form-button king-addons-register-button">
3359 <?php echo esc_html($settings['register_button_text']); ?>
3360 </button>
3361 </div>
3362
3363 <div class="king-addons-form-links">
3364 <?php if ($settings['show_login_link'] === 'yes'): ?>
3365 <span class="king-addons-form-toggle" data-toggle="login">
3366 <?php echo esc_html($settings['login_link_text']); ?>
3367 </span>
3368 <?php endif; ?>
3369 </div>
3370 </form>
3371
3372 <?php $this->render_social_login($settings, 'register'); ?>
3373 </div>
3374 <?php endif; ?>
3375
3376 <?php if ($settings['show_lost_password_link'] === 'yes'): ?>
3377 <div class="king-addons-lost-password-form" id="lost-password-form-<?php echo esc_attr($widget_id); ?>" style="display: none;">
3378
3379 <?php if (!empty($settings['lostpassword_form_title'])): ?>
3380 <h3 class="king-addons-form-title"><?php echo esc_html($settings['lostpassword_form_title']); ?></h3>
3381 <?php endif; ?>
3382
3383 <?php if (!empty($settings['lostpassword_form_subtitle'])): ?>
3384 <p class="king-addons-form-subtitle"><?php echo esc_html($settings['lostpassword_form_subtitle']); ?></p>
3385 <?php endif; ?>
3386
3387 <div class="king-addons-form-message"></div>
3388
3389 <form class="king-addons-form" method="post">
3390 <?php wp_nonce_field('king_addons_lostpassword_action', 'king_addons_lostpassword_nonce'); ?>
3391
3392 <div class="king-addons-form-field">
3393 <?php if ($show_labels && !empty($settings['lostpassword_email_label'])): ?>
3394 <label for="king-addons-lostpassword-email-<?php echo esc_attr($widget_id); ?>">
3395 <?php echo esc_html($settings['lostpassword_email_label']); ?>
3396 </label>
3397 <?php endif; ?>
3398 <input type="email"
3399 id="king-addons-lostpassword-email-<?php echo esc_attr($widget_id); ?>"
3400 name="user_login"
3401 placeholder="<?php echo esc_attr($settings['lostpassword_email_placeholder']); ?>"
3402 required>
3403 </div>
3404
3405 <div class="king-addons-form-field">
3406 <button type="submit" class="king-addons-form-button king-addons-lostpassword-button">
3407 <?php echo esc_html($settings['lostpassword_button_text']); ?>
3408 </button>
3409 </div>
3410
3411 <div class="king-addons-form-links">
3412 <?php if ($settings['show_login_link_from_lostpassword'] === 'yes'): ?>
3413 <span class="king-addons-form-toggle" data-toggle="login">
3414 <?php echo esc_html($settings['login_link_text_from_lostpassword']); ?>
3415 </span>
3416 <?php endif; ?>
3417 </div>
3418 </form>
3419 </div>
3420 <?php endif; ?>
3421 </div>
3422 <?php
3423 }
3424
3425
3426
3427
3428 }