roles as $role_key => $role) { $roles[$role_key] = $role['name']; } return $roles; } /** * Render form header with logo and illustration */ protected function render_form_header($settings) { if ($settings['show_form_header'] !== 'yes') { return; } $has_logo = !empty($settings['form_logo']['url']); $has_illustration = !empty($settings['form_illustration']['url']); if (!$has_logo && !$has_illustration) { return; } $illustration_position = $settings['form_illustration_position']; $wrapper_class = 'king-addons-form-header'; if ($has_illustration) { $wrapper_class .= ' king-addons-form-header-' . $illustration_position; } ?>
<?php echo esc_attr(get_post_meta($settings['form_illustration']['id'], '_wp_attachment_image_alt', true)); ?>
<?php echo esc_attr(get_post_meta($settings['form_illustration']['id'], '_wp_attachment_image_alt', true)); ?>
can_use_premium_code__premium_only()) { return; } if ($settings['enable_social_login'] !== 'yes') { return; } $show_google = $settings['enable_google_login'] === 'yes' && !empty($settings['google_client_id']); $show_facebook = $settings['enable_facebook_login'] === 'yes' && !empty($settings['facebook_app_id']); if (!$show_google && !$show_facebook) { return; } ?>
can_use_premium_code__premium_only()) { return; } if (empty($settings['custom_fields'])) { return; } foreach ($settings['custom_fields'] as $index => $field) { $field_id = 'custom_field_' . $index; $field_name = 'custom_field_' . $index; $field_class = 'king-addons-form-field'; $field_label = !empty($field['field_label']) ? $field['field_label'] : 'Field ' . ($index + 1); if ($field['field_width'] === 'half') { $field_class .= ' king-addons-field-half'; } $required = $field['field_required'] === 'yes' ? 'required' : ''; ?>
>
$option) { $option = trim($option); if (empty($option)) continue; $parts = explode('|', $option); $value = trim($parts[0]); $label = isset($parts[1]) ? trim($parts[1]) : $value; $option_id = $field_id . '_' . $option_index; ?>
>
$option) { $option = trim($option); if (empty($option)) continue; $parts = explode('|', $option); $value = trim($parts[0]); $label = isset($parts[1]) ? trim($parts[1]) : $value; $option_id = $field_id . '_' . $option_index; ?>
>
>
get_id(); $recaptcha_id = 'recaptcha-' . $form_type . '-' . $widget_id; if ($settings['recaptcha_version'] === 'v2') { ?>
start_controls_section( 'section_general', [ 'label' => esc_html__('General', 'king-addons'), ] ); $this->add_control( 'default_form_type', [ 'label' => esc_html__('Default Form Type', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'login' => esc_html__('Login', 'king-addons'), 'register' => esc_html__('Register', 'king-addons'), ], 'default' => 'login', ] ); $this->add_control( 'show_labels', [ 'label' => esc_html__('Show Labels', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'enable_ajax', [ 'label' => esc_html__('Enable AJAX', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->end_controls_section(); // Form Header Section $this->start_controls_section( 'section_form_header', [ 'label' => esc_html__('Form Header', 'king-addons'), ] ); $this->add_control( 'show_form_header', [ 'label' => esc_html__('Show Form Header', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'form_logo', [ 'label' => esc_html__('Logo', 'king-addons'), 'type' => Controls_Manager::MEDIA, 'condition' => [ 'show_form_header' => 'yes', ], ] ); $this->add_responsive_control( 'form_logo_width', [ 'label' => esc_html__('Logo Width', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px', '%'], 'range' => [ 'px' => [ 'min' => 0, 'max' => 500, ], '%' => [ 'min' => 0, 'max' => 100, ], ], 'default' => [ 'unit' => 'px', 'size' => 150, ], 'condition' => [ 'show_form_header' => 'yes', 'form_logo[url]!' => '', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-header-logo img' => 'width: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'form_illustration', [ 'label' => esc_html__('Illustration', 'king-addons'), 'type' => Controls_Manager::MEDIA, 'condition' => [ 'show_form_header' => 'yes', ], ] ); $this->add_control( 'form_illustration_position', [ 'label' => esc_html__('Illustration Position', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'left' => esc_html__('Left', 'king-addons'), 'right' => esc_html__('Right', 'king-addons'), 'top' => esc_html__('Top', 'king-addons'), 'bottom' => esc_html__('Bottom', 'king-addons'), ], 'default' => 'left', 'condition' => [ 'show_form_header' => 'yes', 'form_illustration[url]!' => '', ], ] ); $this->add_responsive_control( 'form_illustration_width', [ 'label' => esc_html__('Illustration Width', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px', '%'], 'range' => [ 'px' => [ 'min' => 0, 'max' => 800, ], '%' => [ 'min' => 0, 'max' => 100, ], ], 'default' => [ 'unit' => '%', 'size' => 50, ], 'condition' => [ 'show_form_header' => 'yes', 'form_illustration[url]!' => '', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-illustration' => 'width: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); // Login Form Section $this->start_controls_section( 'section_login_form', [ 'label' => esc_html__('Login Form', 'king-addons'), ] ); $this->add_control( 'login_form_title', [ 'label' => esc_html__('Form Title', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Login to Your Account', 'king-addons'), 'placeholder' => esc_html__('Enter title', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'login_form_subtitle', [ 'label' => esc_html__('Form Subtitle', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'default' => esc_html__('Please enter your username and password to log in.', 'king-addons'), 'placeholder' => esc_html__('Enter subtitle', 'king-addons'), 'dynamic' => ['active' => true], ] ); $this->add_control( 'login_username_label', [ 'label' => esc_html__('Username/Email Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Username or Email', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'login_username_placeholder', [ 'label' => esc_html__('Username/Email Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Enter your username or email', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'login_password_label', [ 'label' => esc_html__('Password Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'login_password_placeholder', [ 'label' => esc_html__('Password Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Enter your password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'login_button_text', [ 'label' => esc_html__('Login Button Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Login', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_password_visibility_login', [ 'label' => esc_html__('Show Password Visibility Toggle', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'show_remember_me', [ 'label' => esc_html__('Show Remember Me', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'remember_me_text', [ 'label' => esc_html__('Remember Me Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Remember Me', 'king-addons'), 'condition' => [ 'show_remember_me' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_lost_password', [ 'label' => esc_html__('Show Lost Password Link', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'lost_password_text', [ 'label' => esc_html__('Lost Password Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Forgot Password?', 'king-addons'), 'condition' => [ 'show_lost_password' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_register_link', [ 'label' => esc_html__('Show Register Link', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'register_link_text', [ 'label' => esc_html__('Register Link Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__("Don't have an account? Register", 'king-addons'), 'condition' => [ 'show_register_link' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_lost_password_link', [ 'label' => esc_html__('Show Lost Password Link', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'lost_password_link_text', [ 'label' => esc_html__('Lost Password Link Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Forgot your password?', 'king-addons'), 'condition' => [ 'show_lost_password_link' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->end_controls_section(); // Email Notifications Section $this->start_controls_section( 'section_email_notifications', [ 'label' => esc_html__('Email Notifications', 'king-addons'), ] ); $this->add_control( 'enable_user_email', [ 'label' => esc_html__('Send Email to User', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'description' => esc_html__('Send a welcome email to the user after successful registration.', 'king-addons'), ] ); $this->add_control( 'user_email_subject', [ 'label' => esc_html__('User Email Subject', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Welcome to {site_name}!', 'king-addons'), 'condition' => [ 'enable_user_email' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); if (!king_addons_freemius()->can_use_premium_code__premium_only()) { \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'user_email_subject', ['']); } $this->add_control( 'user_email_content', [ 'label' => esc_html__('User Email Content', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'rows' => 10, '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", 'condition' => [ 'enable_user_email' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); if (!king_addons_freemius()->can_use_premium_code__premium_only()) { \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'user_email_content', ['']); } $this->add_control( 'enable_admin_email', [ 'label' => sprintf(__('Send Email to Admin %s', 'king-addons'), ''), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'description' => esc_html__('Send a notification email to the admin when a user registers.', 'king-addons'), 'classes' => 'king-addons-pro-control', ] ); if (!king_addons_freemius()->can_use_premium_code__premium_only()) { \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'enable_admin_email', ['yes']); } else { $this->add_control( 'admin_email_address', [ 'label' => esc_html__('Admin Email Address', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => get_option('admin_email'), 'condition' => [ 'enable_admin_email' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'admin_email_subject', [ 'label' => esc_html__('Admin Email Subject', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('New User Registration on {site_name}', 'king-addons'), 'condition' => [ 'enable_admin_email' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'admin_email_content', [ 'label' => esc_html__('Admin Email Content', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'rows' => 10, '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}", 'condition' => [ 'enable_admin_email' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); } $this->add_control( 'email_placeholders_info', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__('Available placeholders: {site_name}, {user_name}, {username}, {user_email}, {user_role}, {registration_date}', 'king-addons'), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info', ] ); $this->end_controls_section(); // Mailchimp Integration Section $this->start_controls_section( 'section_mailchimp_integration', [ 'label' => esc_html__('Mailchimp Integration', 'king-addons'), ] ); $this->add_control( 'enable_mailchimp_integration', [ 'label' => sprintf(__('Enable Mailchimp Integration %s', 'king-addons'), ''), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'description' => esc_html__('Automatically subscribe users to your Mailchimp list upon registration.', 'king-addons'), 'classes' => 'king-addons-pro-control', ] ); if (!king_addons_freemius()->can_use_premium_code__premium_only()) { \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'enable_mailchimp_integration', ['yes']); } else { $this->add_control( 'mailchimp_api_key', [ 'label' => esc_html__('Mailchimp API Key', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your Mailchimp API Key', 'king-addons'), 'condition' => [ 'enable_mailchimp_integration' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'mailchimp_list_id', [ 'label' => esc_html__('Mailchimp List ID', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your Mailchimp List ID', 'king-addons'), 'condition' => [ 'enable_mailchimp_integration' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'mailchimp_double_optin', [ 'label' => esc_html__('Double Opt-in', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'description' => esc_html__('Send confirmation email to subscribers.', 'king-addons'), 'condition' => [ 'enable_mailchimp_integration' => 'yes', ], ] ); $this->add_control( 'mailchimp_setup_info', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => sprintf( 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'), 'Mailchimp account' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info', 'condition' => [ 'enable_mailchimp_integration' => 'yes', ], ] ); } $this->end_controls_section(); // Register Actions Section $this->start_controls_section( 'section_register_actions', [ 'label' => esc_html__('Register Actions', 'king-addons'), ] ); $this->add_control( 'auto_login_after_register', [ 'label' => esc_html__('Auto Login After Registration', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'description' => esc_html__('Automatically log in the user after successful registration.', 'king-addons'), ] ); $this->add_control( 'redirect_after_register', [ 'label' => esc_html__('Redirect After Registration', 'king-addons'), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__('https://yoursite.com/welcome', 'king-addons'), 'dynamic' => ['active' => true], 'description' => esc_html__('Leave empty to stay on the current page.', 'king-addons'), ] ); $this->add_control( 'redirect_after_login', [ 'label' => esc_html__('Redirect After Login', 'king-addons'), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__('https://yoursite.com/dashboard', 'king-addons'), 'dynamic' => ['active' => true], 'description' => esc_html__('Leave empty to stay on the current page.', 'king-addons'), ] ); $this->add_control( 'redirect_logout_user', [ 'label' => esc_html__('Redirect Already Logged Users', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'description' => esc_html__('Redirect users who are already logged in.', 'king-addons'), ] ); $this->add_control( 'redirect_logout_url', [ 'label' => esc_html__('Redirect URL for Logged Users', 'king-addons'), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__('https://yoursite.com/dashboard', 'king-addons'), 'condition' => [ 'redirect_logout_user' => 'yes', ], 'dynamic' => ['active' => true], ] ); $this->end_controls_section(); // Lost Password Form Section $this->start_controls_section( 'section_lost_password_form', [ 'label' => esc_html__('Lost Password Form', 'king-addons'), 'condition' => [ 'show_lost_password_link' => 'yes', ], ] ); $this->add_control( 'lostpassword_form_title', [ 'label' => esc_html__('Form Title', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Lost Your Password?', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'lostpassword_form_subtitle', [ 'label' => esc_html__('Form Subtitle', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'default' => esc_html__('Enter your email address and we will send you a link to reset your password.', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'lostpassword_email_label', [ 'label' => esc_html__('Email Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Email', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'lostpassword_email_placeholder', [ 'label' => esc_html__('Email Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Enter your email address', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'lostpassword_button_text', [ 'label' => esc_html__('Button Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Reset Password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_login_link_from_lostpassword', [ 'label' => esc_html__('Show Login Link', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'login_link_text_from_lostpassword', [ 'label' => esc_html__('Login Link Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Back to Login', 'king-addons'), 'condition' => [ 'show_login_link_from_lostpassword' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->end_controls_section(); // Social Login Section $this->start_controls_section( 'section_social_login', [ 'label' => esc_html__('Social Login', 'king-addons'), ] ); $this->add_control( 'enable_social_login', [ 'label' => sprintf(__('Enable Social Login %s', 'king-addons'), ''), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'classes' => 'king-addons-pro-control', ] ); if (!king_addons_freemius()->can_use_premium_code__premium_only()) { \King_Addons\Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'login-register-form', 'enable_social_login', ['yes']); } else { $this->add_control( 'social_login_separator', [ 'label' => esc_html__('Show Separator', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'enable_social_login' => 'yes', ], ] ); $this->add_control( 'social_login_setup_note', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__('Note: Social login requires proper API setup. Google and Facebook apps need to be configured with valid credentials.', 'king-addons'), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', 'condition' => [ 'enable_social_login' => 'yes', ], ] ); // Google Login Settings $this->add_control( 'google_login_heading', [ 'label' => esc_html__('Google Login', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => [ 'enable_social_login' => 'yes', ], ] ); $this->add_control( 'enable_google_login', [ 'label' => esc_html__('Enable Google Login', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'condition' => [ 'enable_social_login' => 'yes', ], ] ); $this->add_control( 'google_client_id', [ 'label' => esc_html__('Google Client ID', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your Google Client ID', 'king-addons'), 'condition' => [ 'enable_social_login' => 'yes', 'enable_google_login' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'google_client_secret', [ 'label' => esc_html__('Google Client Secret', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your Google Client Secret', 'king-addons'), 'condition' => [ 'enable_social_login' => 'yes', 'enable_google_login' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'google_setup_instructions', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => sprintf( '

🔧 Google OAuth Setup Instructions:

  1. Go to Google Cloud Console
  2. Create a new project or select existing one
  3. Enable "Google+ API" in APIs & Services
  4. Go to "Credentials" → "Create Credentials" → "OAuth 2.0 Client IDs"
  5. Set Application type to "Web application"
  6. Add your domain to "Authorized JavaScript origins"
  7. Add redirect URI: %s
  8. Copy Client ID and Client Secret to fields above
', home_url('/wp-admin/admin-ajax.php?action=king_addons_google_callback') ), 'condition' => [ 'enable_social_login' => 'yes', 'enable_google_login' => 'yes', ], ] ); // Facebook Login Settings $this->add_control( 'facebook_login_heading', [ 'label' => esc_html__('Facebook Login', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => [ 'enable_social_login' => 'yes', ], ] ); $this->add_control( 'enable_facebook_login', [ 'label' => esc_html__('Enable Facebook Login', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'condition' => [ 'enable_social_login' => 'yes', ], ] ); $this->add_control( 'facebook_app_id', [ 'label' => esc_html__('Facebook App ID', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your Facebook App ID', 'king-addons'), 'condition' => [ 'enable_social_login' => 'yes', 'enable_facebook_login' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'facebook_app_secret', [ 'label' => esc_html__('Facebook App Secret', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your Facebook App Secret', 'king-addons'), 'condition' => [ 'enable_social_login' => 'yes', 'enable_facebook_login' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'facebook_setup_instructions', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => sprintf( '

🔧 Facebook OAuth Setup Instructions:

  1. Go to Facebook Developers
  2. Create a new app or select existing one
  3. Add "Facebook Login" product to your app
  4. Go to Facebook Login → Settings
  5. Add Valid OAuth Redirect URI: %s
  6. Get App ID and App Secret from App Settings → Basic
  7. Copy App ID and App Secret to fields above
  8. Make sure app is live (not in development mode)
', home_url('/wp-admin/admin-ajax.php?action=king_addons_facebook_callback') ), 'condition' => [ 'enable_social_login' => 'yes', 'enable_facebook_login' => 'yes', ], ] ); } $this->end_controls_section(); // reCAPTCHA Section $this->start_controls_section( 'section_recaptcha', [ 'label' => esc_html__('reCAPTCHA', 'king-addons'), ] ); $this->add_control( 'enable_recaptcha', [ 'label' => esc_html__('Enable reCAPTCHA', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'recaptcha_version', [ 'label' => esc_html__('reCAPTCHA Version', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'v2' => esc_html__('reCAPTCHA v2', 'king-addons'), 'v3' => esc_html__('reCAPTCHA v3', 'king-addons'), ], 'default' => 'v2', 'condition' => [ 'enable_recaptcha' => 'yes', ], ] ); $this->add_control( 'recaptcha_site_key', [ 'label' => esc_html__('Site Key', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your reCAPTCHA Site Key', 'king-addons'), 'condition' => [ 'enable_recaptcha' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'recaptcha_secret_key', [ 'label' => esc_html__('Secret Key', 'king-addons'), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__('Enter your reCAPTCHA Secret Key', 'king-addons'), 'condition' => [ 'enable_recaptcha' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'recaptcha_theme', [ 'label' => esc_html__('Theme', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'light' => esc_html__('Light', 'king-addons'), 'dark' => esc_html__('Dark', 'king-addons'), ], 'default' => 'light', 'condition' => [ 'enable_recaptcha' => 'yes', 'recaptcha_version' => 'v2', ], ] ); $this->add_control( 'recaptcha_size', [ 'label' => esc_html__('Size', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'normal' => esc_html__('Normal', 'king-addons'), 'compact' => esc_html__('Compact', 'king-addons'), ], 'default' => 'normal', 'condition' => [ 'enable_recaptcha' => 'yes', 'recaptcha_version' => 'v2', ], ] ); $this->add_control( 'recaptcha_score_threshold', [ 'label' => esc_html__('Score Threshold', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'range' => [ '' => [ 'min' => 0, 'max' => 1, 'step' => 0.1, ], ], 'default' => [ 'size' => 0.5, ], 'condition' => [ 'enable_recaptcha' => 'yes', 'recaptcha_version' => 'v3', ], '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'), ] ); $this->add_control( 'recaptcha_hide_badge', [ 'label' => esc_html__('Hide reCAPTCHA Badge', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', 'condition' => [ 'enable_recaptcha' => 'yes', 'recaptcha_version' => 'v3', ], 'description' => esc_html__('Hide the reCAPTCHA badge. Note: You must include the reCAPTCHA branding visibly in the user flow.', 'king-addons'), ] ); $this->add_control( 'recaptcha_apply_on', [ 'label' => esc_html__('Apply reCAPTCHA On', 'king-addons'), 'type' => Controls_Manager::SELECT2, 'multiple' => true, 'options' => [ 'login' => esc_html__('Login Form', 'king-addons'), 'register' => esc_html__('Register Form', 'king-addons'), 'lostpassword' => esc_html__('Lost Password Form', 'king-addons'), ], 'default' => ['login', 'register'], 'condition' => [ 'enable_recaptcha' => 'yes', ], ] ); $this->add_control( 'recaptcha_setup_note', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => sprintf( esc_html__('To use reCAPTCHA, you need to get API keys from %s. For more details, check the documentation.', 'king-addons'), 'Google reCAPTCHA' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info', 'condition' => [ 'enable_recaptcha' => 'yes', ], ] ); $this->end_controls_section(); // Register Form Section $this->start_controls_section( 'section_register_form', [ 'label' => esc_html__('Register Form', 'king-addons'), ] ); $this->add_control( 'register_form_title', [ 'label' => esc_html__('Form Title', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Create New Account', 'king-addons'), 'placeholder' => esc_html__('Enter title', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_form_subtitle', [ 'label' => esc_html__('Form Subtitle', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'default' => esc_html__('Create an account to enjoy awesome features.', 'king-addons'), 'placeholder' => esc_html__('Enter subtitle', 'king-addons'), 'dynamic' => ['active' => true], ] ); $this->add_control( 'register_email_label', [ 'label' => esc_html__('Email Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Email', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_email_placeholder', [ 'label' => esc_html__('Email Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Enter your email', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_username_label', [ 'label' => esc_html__('Username Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Username', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_username_placeholder', [ 'label' => esc_html__('Username Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Enter your username', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_password_label', [ 'label' => esc_html__('Password Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_password_placeholder', [ 'label' => esc_html__('Password Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Enter your password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_confirm_password_label', [ 'label' => esc_html__('Confirm Password Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Confirm Password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_confirm_password_placeholder', [ 'label' => esc_html__('Confirm Password Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Confirm your password', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_additional_fields_heading', [ 'label' => esc_html__('Additional Fields', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'show_first_name', [ 'label' => esc_html__('Show First Name', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'register_first_name_label', [ 'label' => esc_html__('First Name Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('First Name', 'king-addons'), 'condition' => [ 'show_first_name' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_first_name_placeholder', [ 'label' => esc_html__('First Name Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('First Name', 'king-addons'), 'condition' => [ 'show_first_name' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_last_name', [ 'label' => esc_html__('Show Last Name', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'register_last_name_label', [ 'label' => esc_html__('Last Name Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Last Name', 'king-addons'), 'condition' => [ 'show_last_name' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_last_name_placeholder', [ 'label' => esc_html__('Last Name Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Last Name', 'king-addons'), 'condition' => [ 'show_last_name' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_website', [ 'label' => esc_html__('Show Website', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'register_website_label', [ 'label' => esc_html__('Website Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Website', 'king-addons'), 'condition' => [ 'show_website' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_website_placeholder', [ 'label' => esc_html__('Website Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('https://yourwebsite.com', 'king-addons'), 'condition' => [ 'show_website' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_phone', [ 'label' => esc_html__('Show Phone', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'register_phone_label', [ 'label' => esc_html__('Phone Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Phone', 'king-addons'), 'condition' => [ 'show_phone' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_phone_placeholder', [ 'label' => esc_html__('Phone Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Phone Number', 'king-addons'), 'condition' => [ 'show_phone' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'register_button_text', [ 'label' => esc_html__('Register Button Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Register', 'king-addons'), 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'show_password_visibility_register', [ 'label' => esc_html__('Show Password Visibility Toggle', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'show_login_link', [ 'label' => esc_html__('Show Login Link', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', ] ); $this->add_control( 'login_link_text', [ 'label' => esc_html__('Login Link Text', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Already have an account? Login', 'king-addons'), 'condition' => [ 'show_login_link' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); // Custom Fields for Registration $this->add_control( 'custom_fields_heading', [ 'label' => sprintf(__('Custom Fields %s', 'king-addons'), ''), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); if (!king_addons_freemius()->can_use_premium_code__premium_only()) { $this->add_control( 'custom_fields_pro_notice', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => 'Custom Registration Fields are available
in the Pro version', 'content_classes' => 'king-addons-pro-notice', ] ); } else { $repeater = new \Elementor\Repeater(); $repeater->add_control( 'field_type', [ 'label' => esc_html__('Field Type', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'text' => esc_html__('Text', 'king-addons'), 'email' => esc_html__('Email', 'king-addons'), 'number' => esc_html__('Number', 'king-addons'), 'tel' => esc_html__('Phone', 'king-addons'), 'url' => esc_html__('URL', 'king-addons'), 'textarea' => esc_html__('Textarea', 'king-addons'), 'select' => esc_html__('Select', 'king-addons'), 'checkbox' => esc_html__('Checkbox', 'king-addons'), 'radio' => esc_html__('Radio', 'king-addons'), 'date' => esc_html__('Date', 'king-addons'), 'file' => esc_html__('File Upload', 'king-addons'), ], 'default' => 'text', ] ); $repeater->add_control( 'field_label', [ 'label' => esc_html__('Field Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Custom Field', 'king-addons'), 'dynamic' => ['active' => true], ] ); $repeater->add_control( 'field_placeholder', [ 'label' => esc_html__('Placeholder', 'king-addons'), 'type' => Controls_Manager::TEXT, 'dynamic' => ['active' => true], 'condition' => [ 'field_type!' => ['checkbox', 'radio', 'file'], ], ] ); $repeater->add_control( 'field_required', [ 'label' => esc_html__('Required', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $repeater->add_control( 'field_options', [ 'label' => esc_html__('Options', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'description' => esc_html__('Enter each option on a new line. For radio/checkbox use format: value|label', 'king-addons'), 'condition' => [ 'field_type' => ['select', 'checkbox', 'radio'], ], 'default' => "option1|Option 1\noption2|Option 2\noption3|Option 3", ] ); $repeater->add_control( 'field_width', [ 'label' => esc_html__('Field Width', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => [ 'full' => esc_html__('Full Width', 'king-addons'), 'half' => esc_html__('Half Width', 'king-addons'), ], 'default' => 'full', ] ); $this->add_control( 'custom_fields', [ 'label' => esc_html__('Additional Fields', 'king-addons'), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'title_field' => '{{{ field_label }}}', 'default' => [], ] ); } // User Role Selection $this->add_control( 'user_role_heading', [ 'label' => esc_html__('User Role', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'show_user_role_selection', [ 'label' => esc_html__('Show User Role Selection', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'user_role_label', [ 'label' => esc_html__('User Role Label', 'king-addons'), 'type' => Controls_Manager::TEXT, 'default' => esc_html__('Select Role', 'king-addons'), 'condition' => [ 'show_user_role_selection' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'allowed_user_roles', [ 'label' => esc_html__('Allowed User Roles', 'king-addons'), 'type' => Controls_Manager::SELECT2, 'multiple' => true, 'options' => $this->get_user_roles(), 'default' => ['subscriber'], 'condition' => [ 'show_user_role_selection' => 'yes', ], ] ); $this->add_control( 'default_user_role', [ 'label' => esc_html__('Default User Role', 'king-addons'), 'type' => Controls_Manager::SELECT, 'options' => $this->get_user_roles(), 'default' => 'subscriber', 'condition' => [ 'show_user_role_selection' => 'yes', ], ] ); // Terms & Conditions $this->add_control( 'terms_conditions_heading', [ 'label' => esc_html__('Terms & Conditions', 'king-addons'), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'show_terms_conditions', [ 'label' => esc_html__('Show Terms & Conditions', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'terms_conditions_text', [ 'label' => esc_html__('Terms & Conditions Text', 'king-addons'), 'type' => Controls_Manager::TEXTAREA, 'default' => esc_html__('I agree to the Terms & Conditions', 'king-addons'), 'condition' => [ 'show_terms_conditions' => 'yes', ], 'dynamic' => ['active' => true], 'ai' => ['active' => false], ] ); $this->add_control( 'terms_conditions_link', [ 'label' => esc_html__('Terms & Conditions Link', 'king-addons'), 'type' => Controls_Manager::URL, 'placeholder' => esc_html__('https://yoursite.com/terms', 'king-addons'), 'condition' => [ 'show_terms_conditions' => 'yes', ], 'dynamic' => ['active' => true], ] ); $this->add_control( 'terms_required', [ 'label' => esc_html__('Required', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Yes', 'king-addons'), 'label_off' => esc_html__('No', 'king-addons'), 'return_value' => 'yes', 'default' => 'yes', 'condition' => [ 'show_terms_conditions' => 'yes', ], ] ); $this->end_controls_section(); // Redirect Settings (Legacy - for backward compatibility) $this->start_controls_section( 'section_redirect', [ 'label' => esc_html__('Redirect Settings', 'king-addons'), ] ); $this->add_control( 'redirect_info_notice', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__('Note: Redirect settings have been moved to the "Register Actions" section above for better organization.', 'king-addons'), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info', ] ); $this->end_controls_section(); // Pro Features Section \King_Addons\Core::renderProFeaturesSection($this, '', Controls_Manager::RAW_HTML, 'login-register-form', [ 'Custom Registration Fields (Text, Email, Phone, File Upload, Select, Checkbox, Radio)', 'Advanced Social Login (Google, Facebook with OAuth Setup)', 'Mailchimp Integration with Double Opt-in Support', 'Advanced Email Notifications (Custom Templates, Placeholders)', 'Admin Email Notifications for New Registrations', 'Email Template Customization with Placeholders', 'Enhanced Security Features (Rate Limiting, File Validation)', 'Advanced Redirect Options (Role-based Redirects)', 'User Role Assignment & Selection', 'Advanced Form Validation (Client & Server Side)', 'File Upload Security & Validation', 'reCAPTCHA v2/v3 Integration', 'Custom Fields User Meta Storage', 'Priority Support & Updates' ]); // Style Controls Start Here $this->register_style_controls(); } protected function register_style_controls() { // Form Container Style $this->start_controls_section( 'section_form_container_style', [ 'label' => esc_html__('Form Container', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'form_container_padding', [ 'label' => esc_html__('Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '30', 'right' => '30', 'bottom' => '30', 'left' => '30', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-login-register-form' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'form_container_background', [ 'label' => esc_html__('Background Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#ffffff', 'selectors' => [ '{{WRAPPER}} .king-addons-login-register-form' => 'background-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'form_container_border', 'label' => esc_html__('Border', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-login-register-form', 'fields_options' => [ 'border' => [ 'default' => 'solid', ], 'width' => [ 'default' => [ 'top' => '1', 'right' => '1', 'bottom' => '1', 'left' => '1', 'unit' => 'px', ], ], 'color' => [ 'default' => '#e1e5e9', ], ], ] ); $this->add_control( 'form_container_border_radius', [ 'label' => esc_html__('Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'default' => [ 'top' => '8', 'right' => '8', 'bottom' => '8', 'left' => '8', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-login-register-form' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'form_container_box_shadow', 'label' => esc_html__('Box Shadow', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-login-register-form', 'fields_options' => [ 'box_shadow_type' => [ 'default' => 'yes', ], 'box_shadow' => [ 'default' => [ 'horizontal' => 0, 'vertical' => 4, 'blur' => 20, 'spread' => 0, 'color' => 'rgba(0,0,0,0.1)', ], ], ], ] ); $this->end_controls_section(); // Form Title Style $this->start_controls_section( 'section_form_title_style', [ 'label' => esc_html__('Form Title', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'form_title_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-title', ] ); $this->add_control( 'form_title_color', [ 'label' => esc_html__('Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#333333', 'selectors' => [ '{{WRAPPER}} .king-addons-form-title' => 'color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'form_title_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '0', 'right' => '0', 'bottom' => '10', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); // Form Subtitle Style $this->start_controls_section( 'section_form_subtitle_style', [ 'label' => esc_html__('Form Subtitle', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'form_subtitle_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-subtitle', ] ); $this->add_control( 'form_subtitle_color', [ 'label' => esc_html__('Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#666666', 'selectors' => [ '{{WRAPPER}} .king-addons-form-subtitle' => 'color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'form_subtitle_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '0', 'right' => '0', 'bottom' => '20', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-subtitle' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); // Input Fields Style $this->start_controls_section( 'section_input_fields_style', [ 'label' => esc_html__('Input Fields', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'input_fields_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-field input', ] ); $this->add_control( 'input_fields_color', [ 'label' => esc_html__('Text Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#333333', 'selectors' => [ '{{WRAPPER}} .king-addons-form-field input' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'input_fields_background', [ 'label' => esc_html__('Background Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#ffffff', 'selectors' => [ '{{WRAPPER}} .king-addons-form-field input' => 'background-color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'input_fields_padding', [ 'label' => esc_html__('Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '12', 'right' => '15', 'bottom' => '12', 'left' => '15', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-field input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'input_fields_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '0', 'right' => '0', 'bottom' => '15', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-field' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'input_fields_border', 'label' => esc_html__('Border', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-field input', ] ); $this->add_control( 'input_fields_border_radius', [ 'label' => esc_html__('Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'default' => [ 'top' => '3', 'right' => '3', 'bottom' => '3', 'left' => '3', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-field input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'input_fields_focus_color', [ 'label' => esc_html__('Focus Border Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#007cba', 'selectors' => [ '{{WRAPPER}} .king-addons-form-field input:focus' => 'border-color: {{VALUE}};', ], ] ); $this->end_controls_section(); // Labels Style $this->start_controls_section( 'section_labels_style', [ 'label' => esc_html__('Labels', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'show_labels' => 'yes', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'labels_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-field label', ] ); $this->add_control( 'labels_color', [ 'label' => esc_html__('Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#333333', 'selectors' => [ '{{WRAPPER}} .king-addons-form-field label' => 'color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'labels_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '0', 'right' => '0', 'bottom' => '5', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-field label' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); // Button Style $this->start_controls_section( 'section_button_style', [ 'label' => esc_html__('Buttons', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'button_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-button', ] ); $this->start_controls_tabs('button_style_tabs'); $this->start_controls_tab( 'button_normal_tab', [ 'label' => esc_html__('Normal', 'king-addons'), ] ); $this->add_control( 'button_color', [ 'label' => esc_html__('Text Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#ffffff', 'selectors' => [ '{{WRAPPER}} .king-addons-form-button' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'button_background', [ 'label' => esc_html__('Background Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#007cba', 'selectors' => [ '{{WRAPPER}} .king-addons-form-button' => 'background-color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'button_hover_tab', [ 'label' => esc_html__('Hover', 'king-addons'), ] ); $this->add_control( 'button_hover_color', [ 'label' => esc_html__('Text Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#ffffff', 'selectors' => [ '{{WRAPPER}} .king-addons-form-button:hover' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'button_hover_background', [ 'label' => esc_html__('Background Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#005a87', 'selectors' => [ '{{WRAPPER}} .king-addons-form-button:hover' => 'background-color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'button_padding', [ 'label' => esc_html__('Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '12', 'right' => '30', 'bottom' => '12', 'left' => '30', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->add_responsive_control( 'button_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '10', 'right' => '0', 'bottom' => '15', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-button' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'button_border', 'label' => esc_html__('Border', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-button', ] ); $this->add_control( 'button_border_radius', [ 'label' => esc_html__('Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'default' => [ 'top' => '3', 'right' => '3', 'bottom' => '3', 'left' => '3', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'button_width', [ 'label' => esc_html__('Width', 'king-addons'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px', '%'], 'range' => [ 'px' => [ 'min' => 0, 'max' => 1000, ], '%' => [ 'min' => 0, 'max' => 100, ], ], 'default' => [ 'unit' => '%', 'size' => 100, ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-button' => 'width: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); // Links Style $this->start_controls_section( 'section_links_style', [ 'label' => esc_html__('Links', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'links_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-link, {{WRAPPER}} .king-addons-form-toggle', ] ); $this->start_controls_tabs('links_style_tabs'); $this->start_controls_tab( 'links_normal_tab', [ 'label' => esc_html__('Normal', 'king-addons'), ] ); $this->add_control( 'links_color', [ 'label' => esc_html__('Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#007cba', 'selectors' => [ '{{WRAPPER}} .king-addons-form-link, {{WRAPPER}} .king-addons-form-toggle' => 'color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'links_hover_tab', [ 'label' => esc_html__('Hover', 'king-addons'), ] ); $this->add_control( 'links_hover_color', [ 'label' => esc_html__('Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#005a87', 'selectors' => [ '{{WRAPPER}} .king-addons-form-link:hover, {{WRAPPER}} .king-addons-form-toggle:hover' => 'color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_responsive_control( 'links_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '10', 'right' => '0', 'bottom' => '0', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-link, {{WRAPPER}} .king-addons-form-toggle' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'separator' => 'before', ] ); $this->end_controls_section(); // Messages Style $this->start_controls_section( 'section_messages_style', [ 'label' => esc_html__('Messages', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'messages_typography', 'label' => esc_html__('Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-form-message', ] ); $this->add_control( 'success_message_color', [ 'label' => esc_html__('Success Message Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#4caf50', 'selectors' => [ '{{WRAPPER}} .king-addons-form-message.success' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'error_message_color', [ 'label' => esc_html__('Error Message Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'default' => '#f44336', 'selectors' => [ '{{WRAPPER}} .king-addons-form-message.error' => 'color: {{VALUE}};', ], ] ); $this->add_responsive_control( 'messages_padding', [ 'label' => esc_html__('Padding', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '10', 'right' => '15', 'bottom' => '10', 'left' => '15', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-message' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'messages_margin', [ 'label' => esc_html__('Margin', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%', 'em'], 'default' => [ 'top' => '0', 'right' => '0', 'bottom' => '15', 'left' => '0', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-message' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'messages_border_radius', [ 'label' => esc_html__('Border Radius', 'king-addons'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'default' => [ 'top' => '3', 'right' => '3', 'bottom' => '3', 'left' => '3', 'unit' => 'px', ], 'selectors' => [ '{{WRAPPER}} .king-addons-form-message' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->end_controls_section(); } protected function render() { $settings = $this->get_settings_for_display(); if (king_addons_freemius()->can_use_premium_code__premium_only()) { $this->render_pro($settings); } else { $this->render_free($settings); } } /** * Render Pro version with all features */ private function render_pro($settings) { // Full implementation with all features $this->render_full_form($settings); } /** * Render Free version with limited features */ private function render_free($settings) { // Disable premium features for free users $settings['custom_fields'] = []; // No custom fields in free $settings['enable_social_login'] = 'no'; // No social login in free $settings['enable_mailchimp_integration'] = 'no'; // No Mailchimp in free $settings['enable_admin_email'] = 'no'; // No admin emails in free // Render with limited settings $this->render_full_form($settings); // Show upgrade notice if premium features are attempted if ($this->get_settings('enable_social_login') === 'yes' || $this->get_settings('enable_mailchimp_integration') === 'yes' || !empty($this->get_settings('custom_fields'))) { ?>

🔒 Premium Features Detected

You have configured premium features that require King Addons Pro.

Upgrade to Pro
get_id(); $default_form = $settings['default_form_type']; $enable_ajax = $settings['enable_ajax'] === 'yes'; $show_labels = $settings['show_labels'] === 'yes'; // Check if user registration is enabled $user_can_register = get_option('users_can_register'); // Check if user is already logged in and should be redirected if (is_user_logged_in() && $settings['redirect_logout_user'] === 'yes' && !empty($settings['redirect_logout_url']['url'])) { $redirect_url = $settings['redirect_logout_url']['url']; ?>
render_form_header($settings); ?>

render_recaptcha($settings, 'login'); ?>
render_social_login($settings, 'login'); ?>

render_custom_fields($settings, $show_labels); ?>
render_recaptcha($settings, 'register'); ?>
render_social_login($settings, 'register'); ?>