PluginProbe
User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor / 4.0.3
User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor v4.0.3
4.0.3 4.0.2 4.0.1 4.0.0 3.16.6 3.16.5 3.16.4 3.16.3 3.16.2 3.16.1 3.16.0 3.15.9 3.9.9 3.9.5 3.9.6 3.9.7 3.9.8 1.1.7 1.1.8 1.1.9 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 341 releases
← All changes | front-end/login.php +727 -173 2.0.2 → 4.0.3 View file →
@@ -1,173 +1,727 @@
1 -<?php
2 -// add hidden input to our form to identify that is a profile builder form
3 -function wppb_login_form_bottom( $form_part, $args ){
4 - // we set this id in the wp_login_form() function
5 - if( $args['id_submit'] == 'wppb-submit' ){
6 - if( in_the_loop() )
7 - $form_location = 'page';
8 - else
9 - $form_location = 'widget';
10 -
11 - $form_part = '<input type="hidden" name="wppb_login" value="true"/>';
12 - $form_part .= '<input type="hidden" name="wppb_form_location" value="'. $form_location .'"/>';
13 - $form_part .= '<input type="hidden" name="wppb_request_url" value="'.wppb_curpageurl().'"/>';
14 - }
15 -
16 - return $form_part;
17 -}
18 -add_filter( 'login_form_bottom', 'wppb_login_form_bottom', 10, 2 );
19 -
20 -// when email login is enabled we need to change the post data for the username
21 -function wppb_change_login_with_email(){
22 - if( !empty( $_POST['log'] ) ){
23 - // only do this for our form
24 - if( isset( $_POST['wppb_login'] ) ){
25 - global $wpdb, $_POST;
26 -
27 - $wppb_generalSettings = get_option( 'wppb_general_settings' );
28 -
29 - // if this setting is active, the posted username is, in fact the user's email
30 - if( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'email' ) ){
31 - $username = $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM $wpdb->users WHERE user_email= %s LIMIT 1", trim( $_POST['log'] ) ) );
32 -
33 - if( !empty( $username ) )
34 - $_POST['log'] = $username;
35 -
36 - else{
37 - // if we don't have a username for the email entered we can't have an empty username because we will receive a field empty error
38 - $_POST['log'] = 'this_is_an_invalid_email'.time();
39 - }
40 - }
41 - }
42 - }
43 -}
44 -add_action( 'login_init', 'wppb_change_login_with_email' );
45 -
46 -// login redirect filter. used to redirect from wp-login.php if it errors out
47 -function wppb_login_redirect( $redirect_to, $redirect_url, $user ){
48 - // if login action initialized by our form
49 - if( isset( $_POST['wppb_login'] ) ){
50 - if( is_wp_error( $user ) ){
51 - // if we don't have a succesfull login we must redirect to the url of the form, so make sure this happens
52 - $redirect_to = $_POST['wppb_request_url'];
53 - $request_form_location = $_POST['wppb_form_location'];
54 - $error_string = $user->get_error_message();
55 -
56 - // if login with email is enabled change the word username with email
57 - $wppb_generalSettings = get_option('wppb_general_settings');
58 - if( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'email' ) ){
59 - $siteURL = home_url( '/wp-login.php?action=lostpassword' );
60 - $siteURL = apply_filters( 'wppb_pre_login_url_filter', $siteURL );
61 -
62 - if( $user->get_error_code() == 'incorrect_password' ){
63 - $error_string = '<strong>'. __( 'ERROR', 'profilebuilder' ) .'</strong>: '. __( 'The password you entered is incorrect.', 'profilebuilder' ) .' ';
64 - $error_string .= '<a href="'. $siteURL .'" title="'. __( 'Password Lost and Found.', 'profilebuilder' ) .'">'. __( 'Lost your password', 'profilebuilder' ) .'</a>?';
65 - }
66 -
67 - /* maybe also change the recover password link */
68 - $error_string = str_replace( home_url( '/wp-login.php?action=lostpassword' ), $siteURL, $error_string );
69 -
70 - $error_string = str_replace( 'username', 'email', $error_string );
71 - }
72 -
73 - // if the error string is empty it means that none of the fields were completed
74 - if( empty( $error_string ) ){
75 - $error_string = '<strong>'. __( 'ERROR', 'profilebuilder' ) .'</strong>: '. __( 'Both fields are empty.', 'profilebuilder' ) .' ';
76 - $error_string = apply_filters( 'wppb_login_empty_fields_error_message', $error_string );
77 - }
78 -
79 - $error_string = apply_filters( 'wppb_login_wp_error_message', $error_string, $user );
80 -
81 - // encode the error string and send it as a GET parameter
82 - $arr_params = array ( 'loginerror' => urlencode( base64_encode( $error_string ) ), 'request_form_location' => $request_form_location );
83 - $redirect_to = add_query_arg( $arr_params, $redirect_to );
84 - wp_safe_redirect( $redirect_to );
85 - }
86 - else{
87 - // we don't have an error make sure to remove the error from the query arg
88 - $redirect_to = remove_query_arg( 'loginerror', $redirect_to );
89 - }
90 - }
91 -
92 - return $redirect_to;
93 -}
94 -add_filter( 'login_redirect', 'wppb_login_redirect', 10, 3 );
95 -
96 -
97 -/* shortcode function */
98 -function wppb_front_end_login( $atts ){
99 - extract( shortcode_atts( array( 'display' => true, 'redirect' => '' ), $atts ) );
100 -
101 - $wppb_generalSettings = get_option('wppb_general_settings');
102 -
103 - if( !is_user_logged_in() ){
104 - // set up the form arguments
105 - $form_args = array( 'echo' => false, 'id_submit' => 'wppb-submit' );
106 -
107 - // maybe set up the redirect argument
108 - if( empty( $redirect ) ){
109 - $wppb_module_settings = get_option( 'wppb_module_settings' );
110 - if( $wppb_module_settings['wppb_customRedirect'] == 'show' ){
111 - //check to see if the redirect location is not an empty string and is activated
112 - $login_redirect_settings = get_option( 'customRedirectSettings' );
113 -
114 - // set up the redirect argument to our redirect page
115 - if( ( trim( $login_redirect_settings['afterLoginTarget'] ) != '' ) && ( $login_redirect_settings['afterLogin'] == 'yes' ) ){
116 - $redirect_to = trim( $login_redirect_settings['afterLoginTarget'] );
117 - if( wppb_check_missing_http( $redirect_to ) )
118 - $redirect_to = 'http://'. $redirect_to;
119 -
120 - $form_args['redirect'] = $redirect_to;
121 - }
122 - }
123 - }
124 - else
125 - $form_args['redirect'] = trim( $redirect );
126 -
127 - // change the label argument for username is login with email is enabled
128 - if ( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'email' ) )
129 - $form_args['label_username'] = __( 'Email', 'profilebuilder' );
130 -
131 - // initialize our form variable
132 - $login_form = '';
133 -
134 - // display our login errors
135 - if( isset( $_GET['loginerror'] ) || isset( $_POST['loginerror'] ) ){
136 - $loginerror = isset( $_GET['loginerror'] ) ? $_GET['loginerror'] : $_POST['loginerror'];
137 - $loginerror = '<p class="wppb-error">'.urldecode( base64_decode( $loginerror ) ).'</p><!-- .error -->';
138 - if( isset( $_GET['request_form_location'] ) ){
139 - if( $_GET['request_form_location'] == 'widget' && !in_the_loop() ){
140 - $login_form .= $loginerror;
141 - }
142 - elseif( $_GET['request_form_location'] == 'page' && in_the_loop() ){
143 - $login_form .= $loginerror;
144 - }
145 - }
146 - }
147 -
148 - // build our form
149 - $login_form .= '<div id="wppb-login-wrap" class="wppb-user-forms">';
150 - $login_form .= wp_login_form( $form_args );
151 - $login_form .= '</div>';
152 -
153 - return $login_form;
154 -
155 - }else{
156 - $user_ID = get_current_user_id();
157 - $wppb_user = get_userdata( $user_ID );
158 -
159 - if( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'email' ) )
160 - $display_name = $wppb_user->user_email;
161 -
162 - elseif($wppb_user->display_name !== '')
163 - $display_name = $wppb_user->user_login;
164 -
165 - else
166 - $display_name = $wppb_user->display_name;
167 -
168 - $loged_in_message = '<p class="wppb-alert">'.sprintf(__( 'You are currently logged in as %1$s. %2$s', 'profilebuilder' ), '<a href="'.$authorPostsUrl = get_author_posts_url( $wppb_user->ID ).'" title="'.$display_name.'">'.$display_name.'</a>', '<a href="'.wp_logout_url( $redirectTo = wppb_curpageurl() ).'" title="'.__( 'Log out of this account', 'profilebuilder' ).'">'. __( 'Log out', 'profilebuilder').' &raquo;</a>' ) . '</p><!-- .alert-->';
169 -
170 - return apply_filters( 'wppb_login_message', $loged_in_message, $wppb_user->ID, $display_name );
171 -
172 - }
173 -}
1 +<?php
2 +if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3 +
4 +add_action( 'init', 'wppb_process_login' );
5 +function wppb_process_login(){
6 +
7 + if( !isset($_REQUEST['wppb_login']) )
8 + return;
9 +
10 + do_action( 'login_init' );
11 + do_action( "login_form_login" );
12 + do_action( 'wppb_process_login_start' );
13 +
14 + if( !isset( $_POST['CSRFToken-wppb'] ) || ! wp_verify_nonce( sanitize_text_field( $_POST['CSRFToken-wppb'] ), 'wppb_login' ) )
15 + return;
16 +
17 + $secure_cookie = '';
18 + // If the user wants ssl but the session is not ssl, force a secure cookie.
19 + if ( !empty($_POST['log']) && !force_ssl_admin() ) {
20 + $user_name = sanitize_user($_POST['log']);
21 + $user = get_user_by( 'login', $user_name );
22 +
23 + if ( ! $user && strpos( $user_name, '@' ) ) {
24 + $user = get_user_by( 'email', $user_name );
25 + }
26 +
27 + if ( $user ) {
28 + if ( get_user_option('use_ssl', $user->ID) ) {
29 + $secure_cookie = true;
30 + force_ssl_admin(true);
31 + }
32 + }
33 + }
34 +
35 + $redirect_to = '';
36 + if ( isset( $_REQUEST['redirect_to'] ) ) {
37 + $redirect_to = wppb_sanitize_request_url( $_REQUEST['redirect_to'] );
38 + }
39 +
40 + $user = wp_signon( array(), $secure_cookie );
41 +
42 + if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
43 + if ( headers_sent() ) {
44 + /* translators: 1: Browser cookie documentation URL, 2: Support forums URL */
45 + $user = new WP_Error( 'test_cookie', sprintf( __( '<strong>ERROR:</strong> Cookies are blocked due to unexpected output. For help, please see <a href="%1$s">this documentation</a> or try the <a href="%2$s">support forums</a>.', 'profile-builder' ),
46 + 'https://codex.wordpress.org/Cookies', 'https://wordpress.org/support/' ) );
47 + }
48 + }
49 +
50 + $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) ? wppb_sanitize_request_url( $_REQUEST['redirect_to'] ) : '';
51 + /**
52 + * Filters the login redirect URL.
53 + */
54 + $redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
55 +
56 + do_action( 'wppb_process_login_end' );
57 +
58 + if ( !is_wp_error($user) ) {
59 + if ( $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) {
60 + // If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
61 + if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
62 + $redirect_to = user_admin_url();
63 + elseif ( is_multisite() && !$user->has_cap('read') )
64 + $redirect_to = get_dashboard_url( $user->ID );
65 + elseif ( !$user->has_cap('edit_posts') )
66 + $redirect_to = $user->has_cap( 'read' ) ? admin_url( 'profile.php' ) : home_url();
67 +
68 + wp_redirect( $redirect_to );
69 + exit();
70 + }
71 + wp_safe_redirect($redirect_to);
72 + exit();
73 + }
74 + else{
75 + wp_safe_redirect($redirect_to);
76 + exit();
77 + }
78 +}
79 +/**
80 + * Provides a simple login form
81 + *
82 + * The login format HTML is echoed by default. Pass a false value for `$echo` to return it instead.
83 + *
84 + * @param array $args {
85 + * Optional. Array of options to control the form output. Default empty array.
86 + *
87 + * @type bool $echo Whether to display the login form or return the form HTML code.
88 + * Default true (echo).
89 + * @type string $redirect URL to redirect to. Must be absolute, as in "https://example.com/mypage/".
90 + * Default is to redirect back to the request URI.
91 + * @type string $form_id ID attribute value for the form. Default 'loginform'.
92 + * @type string $label_username Label for the username or email address field. Default 'Username or Email Address'.
93 + * @type string $label_username Label for the username or email address field. Default 'Username or Email Address'.
94 + * @type string $login_username_input_type Type of input field for the username or email address.
95 + * @type string $label_remember Label for the remember field. Default 'Remember Me'.
96 + * @type string $label_log_in Label for the submit button. Default 'Log In'.
97 + * @type string $id_username ID attribute value for the username field. Default 'user_login'.
98 + * @type string $id_password ID attribute value for the password field. Default 'user_pass'.
99 + * @type string $id_remember ID attribute value for the remember field. Default 'rememberme'.
100 + * @type string $id_submit ID attribute value for the submit button. Default 'wp-submit'.
101 + * @type bool $remember Whether to display the "rememberme" checkbox in the form.
102 + * @type string $value_username Default value for the username field. Default empty.
103 + * @type bool $value_remember Whether the "Remember Me" checkbox should be checked by default.
104 + * Default false (unchecked).
105 + *
106 + * }
107 + * @return string|void String when retrieving.
108 + */
109 +function wppb_login_form( $args = array() ) {
110 +
111 + $default_redirect = '';
112 + if( isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) )
113 + $default_redirect = esc_url_raw( ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
114 +
115 + $defaults = array(
116 + 'echo' => true,
117 + // Default 'redirect' value takes the user back to the request URI.
118 + 'redirect' => $default_redirect,
119 + 'form_id' => 'wppb-loginform',
120 + 'form_classes' => array(),
121 + 'label_username' => __( 'Username or Email Address', 'profile-builder' ),
122 + 'login_username_input_type' => 'text',
123 + 'label_password' => __( 'Password', 'profile-builder' ),
124 + 'label_remember' => __( 'Remember Me', 'profile-builder' ),
125 + 'label_log_in' => __( 'Log In', 'profile-builder' ),
126 + 'id_username' => 'wppb_user_login',
127 + 'id_password' => 'wppb_user_pass',
128 + 'id_remember' => 'rememberme',
129 + 'id_submit' => 'wp-submit',
130 + 'remember' => true,
131 + 'value_username' => '',
132 + // Set 'value_remember' to true to default the "Remember me" checkbox to checked.
133 + 'value_remember' => false,
134 + 'is_ajax_form' => false,
135 + );
136 +
137 + /**
138 + * Filters the default login form output arguments.
139 + */
140 + $args = wp_parse_args( $args, apply_filters( 'login_form_defaults', $defaults ) );
141 +
142 + /**
143 + * Filters content to display at the top of the login form.
144 + */
145 + $login_form_top = apply_filters( 'login_form_top', '', $args );
146 +
147 + /**
148 + * Filters content to display in the middle of the login form.
149 + */
150 + $login_form_middle = apply_filters( 'login_form_middle', '', $args );
151 +
152 + /**
153 + * Filters content to display at the bottom of the login form.
154 + */
155 + $login_form_bottom = apply_filters( 'login_form_bottom', '', $args );
156 +
157 + if( !empty( $args['is_ajax_form'] ) ){
158 + $args['form_classes'][] = 'wppb-ajax-form';
159 + }
160 +
161 + $args['form_classes'] = implode( ' ', $args['form_classes'] );
162 +
163 + if( in_the_loop() )
164 + $form_location = 'page';
165 + else
166 + $form_location = 'widget';
167 +
168 + // if an error is being shown pass the original referer forward
169 + if( isset( $_GET['wppb_referer_url'] ) ){
170 + $wppb_referer_url = wppb_sanitize_request_url( $_GET['wppb_referer_url'] );
171 + } else {
172 + $wppb_referer_url = wppb_sanitize_request_url( isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : '' );
173 + }
174 +
175 + $form = '
176 + <form name="' . esc_attr( $args['form_id'] ) . '" id="' . esc_attr( $args['form_id'] ) . '" class="' . esc_attr( $args['form_classes'] ) . '" action="'. esc_url( wppb_curpageurl() ) .'" method="post">
177 + ' . $login_form_top . '
178 + <p class="wppb-form-field login-username'. apply_filters( 'wppb_login_field_extra_css_class', '', $args['id_username']) .'">
179 + <label for="' . esc_attr( $args['id_username'] ) . '">' . esc_html( $args['label_username'] ) . '</label>
180 + <input type="' . esc_attr( $args['login_username_input_type'] ) . '" name="log" id="' . esc_attr( $args['id_username'] ) . '" class="input" value="' . esc_attr( $args['value_username'] ) . '" size="20" />
181 + </p>
182 + <p class="wppb-form-field login-password'. apply_filters( 'wppb_login_field_extra_css_class', '', $args['id_password']) .'">
183 + <label for="' . esc_attr( $args['id_password'] ) . '">' . esc_html( $args['label_password'] ) . '</label>
184 + <span class="wppb-password-field-container">
185 + <input type="password" name="pwd" id="' . esc_attr( $args['id_password'] ) . '" class="input" value="" size="20" '. apply_filters( 'wppb_login_password_extra_attributes', '' ) .'/>
186 + '. wppb_password_visibility_toggle_html() .' <!-- add the HTML for the visibility toggle -->
187 + </span>
188 + </p>';
189 +
190 + $form .='
191 +
192 + ' . $login_form_middle . '
193 + ' . ( $args['remember'] ? '<p class="wppb-form-field login-remember"><input name="rememberme" type="checkbox" id="' . esc_attr( $args['id_remember'] ) . '" value="forever"' . ( $args['value_remember'] ? ' checked="checked"' : '' ) . ' /><label for="' . esc_attr( $args['id_remember'] ) . '">' . esc_html( $args['label_remember'] ) . '</label></p>' : '' ) . '
194 + <p class="login-submit form-submit">
195 + <input type="submit" name="wp-submit" id="' . esc_attr( $args['id_submit'] ) . '" class="'. esc_attr( apply_filters( 'wppb_login_submit_class', "button button-primary" ) ) . '" value="' . esc_attr( $args['label_log_in'] ) . '"' . apply_filters( 'wppb_login_submit_button_extra_attributes', '' ) . ' />
196 + <input type="hidden" name="redirect_to" value="' . esc_url( $args['redirect'] ) . '" />
197 + </p>
198 + <input type="hidden" name="wppb_login" value="true"/>
199 + <input type="hidden" name="wppb_form_location" value="'. esc_attr( $form_location ) .'"/>
200 + <input type="hidden" name="wppb_request_url" value="'. esc_url( wppb_curpageurl() ).'"/>
201 + <input type="hidden" name="wppb_lostpassword_url" value="'.esc_url( $args['lostpassword_url'] ).'"/>
202 + <input type="hidden" name="wppb_redirect_priority" value="'. esc_attr( isset( $args['redirect_priority'] ) ? $args['redirect_priority'] : '' ) .'"/>
203 + <input type="hidden" name="wppb_referer_url" value="'. esc_url( $wppb_referer_url ) .'"/>
204 + '. wp_nonce_field( 'wppb_login', 'CSRFToken-wppb', true, false ) .'
205 + <input type="hidden" name="wppb_redirect_check" value="true"/>
206 + ' . $login_form_bottom . '
207 + </form>';
208 +
209 + // Remove whitespace if login_username_input_type is set to email
210 + if ( $args['login_username_input_type'] == 'email' ) {
211 + $form .= '<script>window.onload = function() { jQuery(document).ready(function($) { $("input[name=\"log\"]").on("keyup", function() { $(this).val( $.trim($(this).val()) ); }); }); }</script>';
212 + }
213 +
214 + if ( $args['echo'] )
215 + echo $form; /* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */ /* escaped above */
216 + else
217 + return $form;
218 +}
219 +
220 +// when email login is enabled we need to change the post data for the username
221 +function wppb_change_login_with_email(){
222 + if( !empty( $_POST['log'] ) ){
223 + // only do this for our form
224 + if( isset( $_POST['wppb_login'] ) ){
225 + global $wpdb, $_POST, $wp_version;
226 + // apply filter to allow stripping slashes if necessary
227 + $_POST['log'] = apply_filters( 'wppb_before_processing_email_from_forms', sanitize_text_field( $_POST['log'] ) );
228 +
229 + /* since version 4.5 there is in the core the option to login with email so we don't need the bellow code but for backward compatibility we will keep it */
230 + if( version_compare( $wp_version, '4.5.0' ) >= 0 && apply_filters( 'wppb_allow_login_with_username_when_is_set_to_email', false ) )
231 + return;
232 +
233 + $wppb_generalSettings = get_option( 'wppb_general_settings' );
234 +
235 + // if this setting is active, the posted username is, in fact the user's email
236 + if( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'email' ) ){
237 + if( !is_email( $_POST['log'] ) && !apply_filters( 'wppb_allow_login_with_username_when_is_set_to_email', false ) ){
238 + $_POST['log'] = 'this_is_an_invalid_email' . time();
239 + }
240 + else {
241 + $username = $wpdb->get_var($wpdb->prepare("SELECT user_login FROM $wpdb->users WHERE user_email= %s LIMIT 1", sanitize_email($_POST['log'])));
242 +
243 + if (!empty($username))
244 + $_POST['log'] = $username;
245 +
246 + else {
247 + // if we don't have a username for the email entered we can't have an empty username because we will receive a field empty error
248 + $_POST['log'] = 'this_is_an_invalid_email' . time();
249 + }
250 + }
251 + }
252 +
253 + // if this setting is active, the posted username is, in fact the user's email or username
254 + if( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'usernameemail' ) ) {
255 + if( is_email( $_POST['log'] ) ) {
256 +
257 + $username = $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM $wpdb->users WHERE user_email= %s LIMIT 1", sanitize_email( $_POST['log'] ) ) );
258 +
259 + // the username can have the format of an email address, so if we can't find a user that has an account with the detected email, we set the username as that email
260 + if( empty( $username ) )
261 + $username = sanitize_user( $_POST['log'] );
262 +
263 + } else {
264 + $username = sanitize_user( $_POST['log'] );
265 + }
266 +
267 + if( !empty( $username ) )
268 + $_POST['log'] = $username;
269 + else {
270 + // if we don't have a username for the email entered we can't have an empty username because we will receive a field empty error
271 + $_POST['log'] = 'this_is_an_invalid_email'.time();
272 + }
273 + }
274 + }
275 + }
276 +}
277 +add_action( 'login_init', 'wppb_change_login_with_email' );
278 +
279 +function wppb_resend_confirmation_email() {
280 + if( !isset( $_GET['wppb-action'] ) || $_GET['wppb-action'] != 'resend_email_confirmation' || !isset( $_GET['email'] ))
281 + return;
282 +
283 + $user_email = base64_decode( sanitize_text_field( $_GET['email'] ));
284 +
285 + $transient_check_key = Wordpress_Creation_Kit_PB::wck_generate_slug( $user_email );
286 + $transient_check = get_transient('wppb_confirmation_email_already_sent_'.$transient_check_key);
287 +
288 + if ( $transient_check === false ) {
289 +
290 + if ( !isset( $_GET['_wpnonce'] ) || !wp_verify_nonce(sanitize_text_field( $_GET['_wpnonce'] ), 'wppb_confirmation_url_nonce' ))
291 + return;
292 +
293 + include_once(plugin_dir_path(__FILE__) . '../features/email-confirmation/email-confirmation.php');
294 +
295 + if ( file_exists( WPPB_PLUGIN_DIR . '/assets/lib/class-mustache-templates/class-mustache-templates.php' ) )
296 + include_once( WPPB_PLUGIN_DIR . '/assets/lib/class-mustache-templates/class-mustache-templates.php' );
297 +
298 + global $wpdb;
299 + $sql_result = $wpdb->get_row( $wpdb->prepare("SELECT * FROM " . $wpdb->base_prefix . "signups WHERE user_email = %s", $user_email ), ARRAY_A );
300 +
301 + // if the email address exists in wp_signups table, resend Confirmation Email and redirect to display notification
302 + if ( $sql_result ) {
303 + wppb_signup_user_notification( sanitize_text_field( $sql_result['user_login'] ), sanitize_email( $sql_result['user_email'] ), $sql_result['activation_key'], $sql_result['meta'] );
304 + $transient_key = Wordpress_Creation_Kit_PB::wck_generate_slug( $user_email );
305 + set_transient('wppb_confirmation_email_already_sent_' . $transient_key, true, 900 );
306 + $error_string = '<strong>' . __( 'SUCCESS: ', 'profile-builder') . '</strong>' . sprintf( __( 'Activation email sent to %s', 'profile-builder' ), $user_email );
307 + $wppb_success_message_nonce = wp_create_nonce( 'wppb_login_error_'.$error_string);
308 + $current_url = wppb_curpageurl();
309 + $arr_params = array('loginerror' => urlencode(base64_encode($error_string)), '_wpnonce' => $wppb_success_message_nonce, 'request_form_location' => 'page', 'wppb_message_type' => 'success');
310 + $redirect_to = add_query_arg($arr_params, $current_url);
311 + wp_safe_redirect($redirect_to);
312 + exit();
313 + }
314 +
315 + }
316 +}
317 +add_action('init', 'wppb_resend_confirmation_email');
318 +
319 +function wppb_change_error_message($error_message) {
320 +
321 + $wppb_generalSettings = get_option( 'wppb_general_settings' );
322 +
323 + if (empty( $wppb_generalSettings['emailConfirmation'] ) || $wppb_generalSettings['emailConfirmation'] !== 'yes')
324 + return $error_message;
325 +
326 + if( isset( $_REQUEST['log'] ) ){
327 + global $wpdb;
328 + $check_user = sanitize_text_field( $_REQUEST['log'] );
329 +
330 + if ( is_email( $check_user ))
331 + $sql_result = $wpdb->get_row( $wpdb->prepare("SELECT * FROM " . $wpdb->base_prefix . "signups WHERE user_email = %s", sanitize_email( $check_user )), ARRAY_A );
332 + else {
333 + $sql_result = $wpdb->get_row( $wpdb->prepare("SELECT * FROM " . $wpdb->base_prefix . "signups WHERE user_login = %s", sanitize_user( $check_user )), ARRAY_A );
334 + if ( $sql_result )
335 + $check_user = $sql_result['user_email'];
336 + }
337 +
338 + // if the email address exists in wp_signups table, display message and link to resend Confirmation Email
339 + if ( isset($sql_result) ) {
340 + $confirmation_url_nonce = wp_create_nonce( 'wppb_confirmation_url_nonce' );
341 + $current_url = strtok( wppb_curpageurl(), '?' );
342 + $arr_params = array('email' => base64_encode( $check_user ), 'wppb-action' => 'resend_email_confirmation', '_wpnonce' => $confirmation_url_nonce);
343 + $confirmation_url = add_query_arg($arr_params, $current_url);
344 + $error_message = '<strong>' . __('ERROR: ', 'profile-builder') . '</strong>' . sprintf( __( 'You need to confirm your Email Address before logging in! </br>To resend the Confirmation Email %1$sclick here%2$s.', 'profile-builder' ), '<a href="' . esc_url( $confirmation_url ) . '" title="Resend Confirmation Email">', '</a>' );
345 + }
346 + }
347 +
348 + return $error_message;
349 +
350 +}
351 +add_filter('wppb_login_invalid_username_error_message', 'wppb_change_error_message');
352 +
353 +/**
354 + * Remove email login when username login is selected
355 + * inspiration from https://wordpress.org/plugins/no-login-by-email-address/
356 + */
357 +$wppb_generalSettings = get_option( 'wppb_general_settings' );
358 +if( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'username' ) ) {
359 + function wppb_login_username_label()
360 + {
361 + add_filter('gettext', 'wppb_login_username_label_change', 20, 3);
362 + function wppb_login_username_label_change($translated_text, $text, $domain)
363 + {
364 + if ($text === 'Username or Email') {
365 + $translated_text = __( 'Username', 'profile-builder' );
366 + }
367 + return $translated_text;
368 + }
369 + }
370 +
371 + add_action('login_head', 'wppb_login_username_label');
372 +
373 + /**
374 + * Filter wp_login_form username default
375 + *
376 + */
377 + function wppb_change_login_username_label($defaults)
378 + {
379 + $defaults['label_username'] = __( 'Username', 'profile-builder' );
380 + return $defaults;
381 + }
382 +
383 + add_filter('login_form_defaults', 'wppb_change_login_username_label');
384 +
385 + /**
386 + * Remove email/password authentication
387 + *
388 + */
389 + remove_filter('authenticate', 'wp_authenticate_email_password', 20);
390 +}
391 +
392 +// login redirect filter. used to redirect from wp-login.php if it errors out
393 +function wppb_login_redirect( $redirect_to, $requested_redirect_to, $user ){
394 + // custom redirect after login on default wp login form
395 + if( ! isset( $_POST['wppb_login'] ) && ! is_wp_error( $user ) ) {
396 + $original_redirect_to = $redirect_to;
397 +
398 + // we don't have an error make sure to remove the error from the query arg
399 + $redirect_to = remove_query_arg( 'loginerror', $redirect_to );
400 +
401 + // CHECK FOR REDIRECT
402 + $redirect_to = wppb_get_redirect_url( 'normal', 'after_login', $redirect_to, $user );
403 + $redirect_to = apply_filters( 'wppb_after_login_redirect_url', $redirect_to );
404 +
405 + if ( $redirect_to === '' ){
406 + $redirect_to = $original_redirect_to;
407 + }
408 + }
409 +
410 + // if login action initialized by our form
411 + if( isset( $_POST['wppb_login'] ) ){
412 + if( is_wp_error( $user ) ) {
413 + // if we don't have a successful login we must redirect to the url of the form, so make sure this happens
414 + if( isset( $_POST['wppb_request_url'] ) )
415 + $redirect_to = wppb_sanitize_request_url( $_POST['wppb_request_url'] );
416 + if( isset( $_POST['wppb_form_location'] ) )
417 + $request_form_location = sanitize_text_field( $_POST['wppb_form_location'] );
418 + $error_string = $user->get_error_message();
419 +
420 + $wppb_generalSettings = get_option('wppb_general_settings');
421 +
422 + if (isset($wppb_generalSettings['loginWith'])) {
423 +
424 + $lost_pass_url = site_url('/wp-login.php?action=lostpassword');
425 + // if the Login shortcode has a lostpassword argument set, give the lost password error link that value
426 + $lost_pass_url_input = wppb_sanitize_request_url( $_POST['wppb_lostpassword_url'] ?? '' );
427 + if ( $lost_pass_url_input !== '' ) {
428 + $lost_pass_url = $lost_pass_url_input;
429 + if ( wppb_check_missing_http( $lost_pass_url ) )
430 + $lost_pass_url = "http://" . $lost_pass_url;
431 + }
432 + //apply filter to allow changing Lost your Password link
433 + $lost_pass_url = apply_filters('wppb_pre_login_url_filter', $lost_pass_url);
434 +
435 + /* start building the error string */
436 + if( in_array( $user->get_error_code(), array( 'empty_username', 'empty_password', 'invalid_username', 'incorrect_password' ) ) )
437 + $error_string = '<strong>' . __('ERROR: ', 'profile-builder') . '</strong>';
438 +
439 + if ( $user->get_error_code() == 'empty_password' ) {
440 + $error_string .= __( 'The password field is empty.', 'profile-builder' ) . ' ';
441 + }
442 +
443 + if ( $user->get_error_code() == 'empty_username' ) {
444 + if ($wppb_generalSettings['loginWith'] == 'email')// if login with email is enabled change the word username with email
445 + $error_string .= __('The email field is empty.', 'profile-builder') . ' ';
446 + else if( $wppb_generalSettings['loginWith'] == 'usernameemail' )// if login with username and email is enabled change the word username with username or email
447 + $error_string .= __('The username/email field is empty', 'profile-builder') . ' ';
448 + else
449 + $error_string .= __('The username field is empty', 'profile-builder') . ' ';
450 + }
451 +
452 + if( apply_filters( 'wppb_login_use_old_error_messages', false ) ) {
453 +
454 + if ( $user->get_error_code() == 'incorrect_password' ) {
455 + $error_string .= __('The password you entered is incorrect.', 'profile-builder') . ' ';
456 + }
457 +
458 + if ( $user->get_error_code() == 'invalid_username' ) {
459 + if ($wppb_generalSettings['loginWith'] == 'email')// if login with email is enabled change the word username with email
460 + $error_string .= __('Invalid email.', 'profile-builder') . ' ';
461 + else if( $wppb_generalSettings['loginWith'] == 'usernameemail' )// if login with username and email is enabled change the word username with username or email
462 + $error_string .= __('Invalid username or email.', 'profile-builder') . ' ';
463 + else
464 + $error_string .= __('Invalid username.', 'profile-builder') . ' ';
465 +
466 + $error_string = apply_filters('wppb_login_invalid_username_error_message', $error_string);
467 + }
468 +
469 + } else if( in_array( $user->get_error_code(), array( 'incorrect_password', 'invalid_username' ) ) ) {
470 + $error_string .= __( 'The credentials you entered are incorrect.', 'profile-builder' ) . ' ';
471 + }
472 +
473 + if( $user->get_error_code() == 'incorrect_password' || $user->get_error_code() == 'invalid_username' && empty( $message_check = apply_filters('wppb_login_invalid_username_error_message', '' )))
474 + $error_string .= '<a href="' . esc_url( $lost_pass_url ) . '" title="' . __('Password Lost and Found.', 'profile-builder') . '">' . __('Lost your password?', 'profile-builder') . '</a>';
475 +
476 + }
477 +
478 + // if the error string is empty it means that none of the fields were completed
479 + if (empty($error_string) || ( in_array( 'empty_username', $user->get_error_codes() ) && in_array( 'empty_password', $user->get_error_codes() ) ) ) {
480 + $error_string = '<strong>' . __('ERROR: ', 'profile-builder') . '</strong>' . __('Both fields are empty.', 'profile-builder') . ' ';
481 + $error_string = apply_filters('wppb_login_empty_fields_error_message', $error_string);
482 + }
483 +
484 + $error_string = apply_filters('wppb_login_wp_error_message', $error_string, $user);
485 + $wppb_error_string_nonce = wp_create_nonce( 'wppb_login_error_'.$error_string );
486 +
487 + // encode the error string and send it as a GET parameter
488 + $referer_url = wppb_sanitize_request_url( $_POST['wppb_referer_url'] ?? '' );
489 + if ( $referer_url !== '' ) {
490 + $arr_params = array('loginerror' => urlencode(base64_encode($error_string)), '_wpnonce' => $wppb_error_string_nonce, 'request_form_location' => $request_form_location, 'wppb_referer_url' => urlencode( $referer_url ));
491 + } else {
492 + $arr_params = array('loginerror' => urlencode(base64_encode($error_string)), '_wpnonce' => $wppb_error_string_nonce, 'request_form_location' => $request_form_location);
493 + }
494 +
495 + if ($user->get_error_code() == 'wppb_login_auth') {
496 + $arr_params['login_auth'] = 'true';
497 + }
498 +
499 + $redirect_to = add_query_arg($arr_params, $redirect_to);
500 + }
501 + else{
502 + // we don't have an error make sure to remove the error from the query arg
503 + $redirect_to = remove_query_arg( 'loginerror', $redirect_to );
504 +
505 + // CHECK FOR REDIRECT
506 + if( isset( $_POST['wppb_redirect_priority'] ) )
507 + $redirect_to = wppb_get_redirect_url( sanitize_text_field( $_POST['wppb_redirect_priority'] ), 'after_login', $redirect_to, $user );
508 +
509 + $redirect_to = apply_filters( 'wppb_after_login_redirect_url', $redirect_to );
510 +
511 + // This should not be empty, if we don't have a redirect, set it to the current page URL
512 + if( empty( $redirect_to ) )
513 + $redirect_to = wppb_curpageurl();
514 + }
515 + }
516 +
517 + // if "wppb_message_type = success" is present the message will show up in a green box instead of red
518 + if ( isset( $_GET['wppb_message_type'] ) && $_GET['wppb_message_type'] == 'success' )
519 + $redirect_to = remove_query_arg( 'wppb_message_type', $redirect_to );
520 +
521 + return $redirect_to;
522 +}
523 +add_filter( 'login_redirect', 'wppb_login_redirect', 20, 3 );
524 +
525 +
526 +/* shortcode function */
527 +function wppb_front_end_login( $atts ){
528 + global $wppb_shortcode_on_front;
529 + $wppb_shortcode_on_front = true;
530 + global $wppb_login_shortcode_on_front;
531 + $wppb_login_shortcode_on_front = true;
532 + /* define a global so we now we have the shortcode login present */
533 + global $wppb_login_shortcode;
534 + $wppb_login_shortcode = true;
535 +
536 + $atts = shortcode_atts( array(
537 + 'display' => true,
538 + 'redirect' => '',
539 + 'redirect_url' => '',
540 + 'logout_redirect_url' => wppb_curpageurl(),
541 + 'redirect_priority' => 'normal',
542 + 'register_url' => '',
543 + 'lostpassword_url' => '',
544 + 'show_2fa_field' => '',
545 + 'block' => false,
546 + 'ajax' => false,
547 + ), $atts, 'wppb-login' );
548 +
549 + $display = $atts['display'];
550 + $redirect = $atts['redirect'];
551 + $redirect_url = $atts['redirect_url'];
552 + $logout_redirect_url = $atts['logout_redirect_url'];
553 + $redirect_priority = $atts['redirect_priority'];
554 + $register_url = $atts['register_url'];
555 + $lostpassword_url = $atts['lostpassword_url'];
556 + $show_2fa_field = $atts['show_2fa_field'];
557 + $block = $atts['block'];
558 + $ajax = $atts['ajax'];
559 +
560 + $is_ajax_form = false;
561 + if( defined( 'WPPB_PAID_PLUGIN_DIR' ) && $ajax === 'true' && file_exists( WPPB_PAID_PLUGIN_DIR . '/features/ajax/assets/forms-ajax-validation.js' ) ) {
562 + wp_enqueue_script( 'wppb-forms-ajax-validation-script', WPPB_PAID_PLUGIN_URL . 'features/ajax/assets/forms-ajax-validation.js', array( 'jquery' ), PROFILE_BUILDER_VERSION, true );
563 + wp_localize_script( 'wppb-forms-ajax-validation-script', 'submitButtonData', array( 'processingText' => __('Processing...', 'profile-builder') ) );
564 + $is_ajax_form = true;
565 + }
566 +
567 + $wppb_generalSettings = get_option('wppb_general_settings');
568 +
569 + // check if the form is being displayed in the Elementor editor
570 + $is_elementor_edit_mode_or_divi_ajax = false;
571 + if( class_exists ( '\Elementor\Plugin' ) ){
572 + $is_elementor_edit_mode_or_divi_ajax = \Elementor\Plugin::$instance->editor->is_edit_mode();
573 + }
574 +
575 + if ( is_array( $_POST ) && array_key_exists( 'action', $_POST ) && $_POST['action'] === 'wppb_divi_extension_ajax' ) {
576 + $is_elementor_edit_mode_or_divi_ajax = true;
577 + }
578 +
579 + if( !is_user_logged_in() || $is_elementor_edit_mode_or_divi_ajax || $block === 'true' ){
580 + // set up the form arguments
581 + $form_args = array( 'echo' => false, 'id_submit' => 'wppb-submit', 'is_ajax_form' => $is_ajax_form );
582 +
583 + // maybe set up the redirect argument
584 + if( ! empty( $redirect ) ) {
585 + $redirect_url = $redirect;
586 + }
587 +
588 + if ( ! empty( $redirect_url ) ) {
589 + if( $redirect_priority == 'top' ) {
590 + $form_args['redirect_priority'] = 'top';
591 + } else {
592 + $form_args['redirect_priority'] = 'normal';
593 + }
594 +
595 + $form_args['redirect'] = trim( $redirect_url );
596 + }
597 +
598 + $form_args['login_username_input_type'] = 'text';
599 +
600 + // change the label argument for username is login with email is enabled
601 + if ( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'email' ) ) {
602 + $form_args['label_username'] = __('Email', 'profile-builder');
603 + $form_args['login_username_input_type'] = 'email';
604 + }
605 +
606 + if ( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'username' ) ) {
607 + $form_args['label_username'] = __('Username', 'profile-builder');
608 + }
609 +
610 + // change the label argument for username on login with username or email when Username and Email is enabled
611 + if ( isset( $wppb_generalSettings['loginWith'] ) && ( $wppb_generalSettings['loginWith'] == 'usernameemail' ) )
612 + $form_args['label_username'] = __( 'Username or Email', 'profile-builder' );
613 +
614 + // Check if 2fa is required
615 + if( class_exists( 'WPPB_Two_Factor_Authenticator' ) ){
616 + $wppb_auth = new WPPB_Two_Factor_Authenticator;
617 + $wppb_two_factor_authentication_settings = get_option( 'wppb_two_factor_authentication_settings', 'not_found' );
618 + if ( ( isset( $_GET['login_auth'] ) && $_GET['login_auth'] === 'true' ) ||
619 + ( ( isset($wppb_two_factor_authentication_settings['enabled']) && $wppb_two_factor_authentication_settings['enabled'] === 'yes' ) && $show_2fa_field === 'yes' ) ){
620 + add_action( 'login_form_middle', array( $wppb_auth, 'auth_code_field') );
621 + }
622 + }
623 +
624 + // initialize our form variable
625 + $login_form = '';
626 +
627 + // display our login errors
628 + if( ( isset( $_GET['loginerror'] ) || isset( $_POST['loginerror'] ) ) && isset( $_GET['_wpnonce'] ) ){
629 + $error_string = urldecode( base64_decode( isset( $_GET['loginerror'] ) ? sanitize_text_field( $_GET['loginerror'] ) : sanitize_text_field( $_POST['loginerror'] ) ) );
630 + if( wp_verify_nonce( sanitize_text_field( $_GET['_wpnonce'] ), 'wppb_login_error_'. $error_string ) ) {
631 + if ( isset( $_GET['wppb_message_type'] ) && $_GET['wppb_message_type'] == 'success' )
632 + $message_type = 'wppb-success';
633 + else $message_type = 'wppb-error';
634 + $loginerror = '<p class="'. $message_type .'" role="alert">' . wp_kses_post(str_replace( '-wppb-plus-', '+', $error_string)) . '</p><!-- .error -->';
635 + if (isset($_GET['request_form_location'])) {
636 + if ($_GET['request_form_location'] === 'widget' && !in_the_loop()) {
637 + $login_form .= $loginerror;
638 + } elseif ($_GET['request_form_location'] === 'page' && in_the_loop()) {
639 + $login_form .= $loginerror;
640 + }
641 + }
642 + }
643 + }
644 + // build our form
645 + $login_form .= '<div id="wppb-login-wrap" class="wppb-user-forms">';
646 +
647 + if ( empty( $lostpassword_url ) )
648 + $lostpassword_url = ( !empty( $wppb_generalSettings['lost_password_page'] ) ) ? $wppb_generalSettings['lost_password_page'] : '';
649 +
650 + $form_args['lostpassword_url'] = $lostpassword_url;
651 + $login_form .= wppb_login_form( apply_filters( 'wppb_login_form_args', $form_args ) );
652 +
653 + if ((!empty($register_url)) || (!empty($lostpassword_url))) {
654 + $login_form .= '<p class="login-register-lost-password">';
655 + $i = 0;
656 + if (!empty($register_url)) {
657 + if ( wppb_check_missing_http( $register_url ) ) $register_url = "http://" . $register_url;
658 + $login_form .= '<a class="login-register" href="' . esc_url($register_url) . '">'. apply_filters('wppb_login_register_text', __('Register','profile-builder')) .'</a>';
659 + $i++;
660 + }
661 + if (!empty($lostpassword_url)) {
662 + if ($i != 0) $login_form .= '<span class="login-separator"> | </span>';
663 + if ( wppb_check_missing_http( $lostpassword_url ) ) $lostpassword_url = "http://" . $lostpassword_url;
664 + $login_form .= '<a class="login-lost-password" href="'. esc_url($lostpassword_url) .'">'. apply_filters('wppb_login_lostpass_text', __('Lost your password?','profile-builder')) .'</a>';
665 + }
666 + $login_form .= '</p>';
667 + }
668 +
669 + $login_form .= apply_filters( 'wppb_login_form_bottom', '', $form_args );
670 +
671 + $login_form .= '</div>';
672 + return apply_filters('wppb_login_form_before_content_output', $login_form, $form_args);
673 +
674 + }else{
675 + $user_ID = get_current_user_id();
676 + $wppb_user = get_userdata( $user_ID );
677 +
678 + $login_with = isset( $wppb_generalSettings['loginWith'] ) ? $wppb_generalSettings['loginWith'] : '';
679 +
680 + // Email login: always show the email. Username+email: show email when the login is the auto-generated slug from that email.
681 + if ( $login_with === 'email' ) {
682 + $display_name = $wppb_user->user_email;
683 + } elseif ( $login_with === 'usernameemail'
684 + && $wppb_user->user_login === Wordpress_Creation_Kit_PB::wck_generate_slug( trim( $wppb_user->user_email ) ) ) {
685 + $display_name = $wppb_user->user_email;
686 + } elseif ( $wppb_user->display_name !== '' ) {
687 + $display_name = $wppb_user->display_name;
688 + } else {
689 + $display_name = $wppb_user->user_login;
690 + }
691 +
692 + $logged_in_message = '<p class="wppb-alert" role="alert">';
693 +
694 + // CHECK FOR REDIRECT
695 + $logout_redirect_url = wppb_get_redirect_url( $redirect_priority, 'after_logout', $logout_redirect_url, $wppb_user );
696 + $logout_redirect_url = apply_filters( 'wppb_after_logout_redirect_url', $logout_redirect_url );
697 +
698 + $logout_url = '<a href="'.wp_logout_url( $logout_redirect_url ).'" class="wppb-logout-url" title="'.__( 'Log out of this account', 'profile-builder' ).'">'. __('Log out &raquo;','profile-builder').'</a>';
699 + $logged_in_message .= sprintf(__( 'You are currently logged in as %1$s. %2$s', 'profile-builder' ), $display_name, $logout_url );
700 +
701 + $logged_in_message .= '</p><!-- .wppb-alert-->';
702 +
703 + return apply_filters( 'wppb_login_message', $logged_in_message, $wppb_user->ID, $display_name );
704 + }
705 +}
706 +
707 +function wppb_login_security_check( $user, $password ) {
708 + if( apply_filters( 'wppb_enable_csrf_token_login_form', false ) ){
709 + if (isset($_POST['wppb_login'])) {
710 + if (!isset($_POST['CSRFToken-wppb']) || !wp_verify_nonce( sanitize_text_field( $_POST['CSRFToken-wppb'] ), 'wppb_login')) {
711 + $errorMessage = __('You are not allowed to do this.', 'profile-builder');
712 + return new WP_Error('wppb_login_csrf_token_error', $errorMessage);
713 + }
714 + }
715 + }
716 +
717 + return $user;
718 +}
719 +add_filter( 'wp_authenticate_user', 'wppb_login_security_check', 10, 2 );
720 +
721 +
722 +// include missing scripts needed on Elementor Pages (Form inside an Elementor Popup)
723 +function wppb_login_scripts_and_styles() {
724 + if ( is_plugin_active('elementor-pro/elementor-pro.php') && defined( 'WPPB_PAID_PLUGIN_URL' ) )
725 + wp_enqueue_script( 'wppb_elementor_popup_script', WPPB_PAID_PLUGIN_URL . 'features/elementor-pro/assets/js/elementor-popup.js', array('jquery') );
726 +}
727 +add_action( 'elementor/frontend/after_enqueue_scripts', 'wppb_login_scripts_and_styles' );