1 ), $redirect ); } /** * Filter to modify the admin action redirect. * * @param array $redirect The admin redirect. */ wp_safe_redirect( esc_url_raw( apply_filters( 'user_registration_admin_action_redirect', $redirect ) ) ); exit; } } /** * Admin notice after resend verification email sent. * * @since 1.9.4 */ public function ur_admin_notice_resend_verification_sent() { echo '

' . esc_html__( 'Verification Email Sent Successfully !! ', 'user-registration' ) . '

'; } /** * Add the column header for the email status column * * @param array $columns Column. * * @return array */ public function add_column_head( $columns ) { if ( ! current_user_can( 'edit_user' ) ) { return $columns; } $the_columns['ur_user_user_status'] = esc_html__( 'Status', 'user-registration' ); $newcol = array_slice( $columns, 0, -1 ); $newcol = array_merge( $newcol, $the_columns ); $columns = array_merge( $newcol, array_slice( $columns, 1 ) ); return $columns; } /** * Enqueque CSS to load notice * * @return void */ public function ur_enqueue_script() { wp_register_style( 'user-registration-css', UR()->plugin_url() . '/assets/css/user-registration.css', array(), UR_VERSION ); wp_enqueue_style( 'user-registration-css' ); } /** * Successful registration message. */ public function custom_registration_message() { $default = __( 'User successfully registered. Login to continue.', 'user-registration' ); $message = get_option( 'user_registration_successful_email_verified_message', $default ); $message = ur_string_translation( 0, 'user_registration_successful_email_verified_message', $message ); return ur_print_notice( $message ); } /** * Email Successfully verified and waiting for admin approval Message. */ public function custom_email_confirmed_admin_await_message() { $default = __( 'Email has successfully been verified. Now, please wait until the admin approves you to give access for the login.', 'user-registration' ); $message = get_option( 'user_registration_pro_email_verified_admin_approval_await_message', $default ); $message = ur_string_translation( 0, 'user_registration_pro_email_verified_admin_approval_await_message', $message ); return ur_print_notice( $message ); } /** * Token mismatch message. */ public function custom_registration_error_message() { return ur_print_notice( esc_html__( 'Token Mismatch!', 'user-registration' ), 'error' ); } /** * Token expired message. */ public function custom_token_expired_message() { return ur_print_notice( esc_html__( 'Token Expired . Please request for new verification email.', 'user-registration' ), 'error' ); } /** * Resend verification email message. */ public function custom_resend_email_token_message() { return ur_print_notice( esc_html__( 'Verification Email Sent!', 'user-registration' ) ); } /** * Resend verification email error message. */ public function custom_resend_email_token_error_message() { return ur_print_notice( esc_html__( 'User does not exist!', 'user-registration' ), 'error' ); } /** * Compare user token with token in url * * @return void */ public function check_token_before_authenticate() { $user_reg_successful = false; add_action( 'login_enqueue_scripts', array( $this, 'ur_enqueue_script' ), 1 ); // Condition for resending token. if (isset($_GET['ur_resend_id']) && isset($_GET['ur_resend_token']) && ur_string_to_bool($_GET['ur_resend_token'])) { //phpcs:ignore; if ( empty( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( wp_unslash( sanitize_key( $_REQUEST['_wpnonce'] ) ), 'ur_resend_token' ) ) { die( esc_html__( 'Action failed. Please refresh the page and retry.', 'user-registration' ) ); } $output = crypt_the_string( sanitize_text_field( wp_unslash( $_GET['ur_resend_id'] ) ), 'd' ); $output = explode( '_', $output ); $user_id = absint( $output[0] ); $user = get_user_by( 'id', $user_id ); $form_id = ur_get_form_id_by_userid( $user_id ); $login_option = ur_get_user_login_option( $user_id ); if ( $user && ( 'email_confirmation' === $login_option || 'admin_approval_after_email_confirmation' === $login_option ) ) { $this->set_email_status( array(), '', $user_id ); /** * Filter hook to modify the email attachment resending token. * Default value is empty array. */ $attachments = apply_filters( 'user_registration_email_attachment_resending_token', array() ); $name_value = ur_get_user_extra_fields( $user_id ); // Get selected email template id for specific form. $template_id = ur_get_single_post_meta( $form_id, 'user_registration_select_email_template' ); UR_Emailer::send_mail_to_user( $user->user_email, $user->user_login, $user_id, '', $name_value, $attachments, $template_id ); add_filter( 'login_message', array( $this, 'custom_resend_email_token_message' ) ); add_filter( 'user_registration_login_form_before_notice', array( $this, 'custom_resend_email_token_message' ) ); } else { add_filter( 'login_message', array( $this, 'custom_resend_email_token_error_message' ) ); add_filter( 'user_registration_login_form_before_notice', array( $this, 'custom_resend_email_token_error_message' ) ); } } if ( ! isset( $_GET['ur_token'] ) ) { return; } else { $ur_token = str_split( sanitize_text_field( wp_unslash( $_GET['ur_token'] ) ), 50 ); $token_string = $ur_token[1]; if ( 2 < count( $ur_token ) ) { unset( $ur_token[0] ); $token_string = join( '', $ur_token ); } $output = crypt_the_string( $token_string, 'd' ); $output = explode( '_', $output ); $user_id = absint( $output[0] ); $user_token = get_user_meta( $user_id, 'ur_confirm_email_token', true ); if ( empty( $user_token ) ) { return; } $form_id = ur_get_form_id_by_userid( $user_id ); // Check if the token matches the token value stored in db. $login_option = ur_get_user_login_option( $user_id ); if ( $user_token === $_GET['ur_token'] && ( 'email_confirmation' === $login_option || 'admin_approval_after_email_confirmation' === $login_option ) ) { $token_expiration_duration = 24 * 60 * 60; /** * Filter hook to modify the token expiration duration. * Default email confirmation token expiration duration is 24 hour. */ $token_expiration_duration = apply_filters( 'user_registration_email_confirmation_token_expiration_duration', $token_expiration_duration ); if ( isset( $output[1] ) && time() > ( $output[1] + $token_expiration_duration ) ) { add_filter( 'login_message', array( $this, 'custom_token_expired_message' ) ); add_filter( 'user_registration_login_form_before_notice', array( $this, 'custom_token_expired_message' ) ); } else { $user_reg_successful = true; update_user_meta( $user_id, 'ur_confirm_email', 1 ); delete_user_meta( $user_id, 'ur_confirm_email_token' ); $user = get_user_by( 'id', $user_id ); /** * Filter hook to modify the email attachment resending token. * Default value is empty array. */ $attachments = apply_filters( 'user_registration_email_attachment_resending_token', array() ); $name_value = ur_get_user_extra_fields( $user_id ); // Get selected email template id for specific form. $template_id = ur_get_single_post_meta( $form_id, 'user_registration_select_email_template' ); UR_Emailer::send_mail_to_user( $user->user_email, $user->user_login, $user_id, '', $name_value, $attachments, $template_id ); if ( 'admin_approval_after_email_confirmation' === $login_option ) { add_filter( 'login_message', array( $this, 'custom_email_confirmed_admin_await_message' ) ); add_filter( 'user_registration_login_form_before_notice', array( $this, 'custom_email_confirmed_admin_await_message' ) ); } else { $allow_automatic_user_login = apply_filters( 'user_registration_allow_automatic_user_login_email_confirmation', true ); // Sets the toast container and its value in the cookie. $toast_success_message = esc_html__('User Registered successfully','user-registration'); $toast_success_message = apply_filters('user_registration_approval_confirmation_message', $toast_success_message); $toast_content = '
×
'; setcookie('urm_toast_content', $toast_content, time() + 5, "/", "", false, false); setcookie('urm_toast_success_message', $toast_success_message, time() + 5, "/", "", false, false); add_filter( 'login_message', array( $this, 'custom_registration_message' ) ); add_filter( 'user_registration_login_form_before_notice', array( $this, 'custom_registration_message' ) ); if ( $allow_automatic_user_login ) { /** * Action hook to check the token complete. * * @param array $user_id The user ID. * @param bool $user_reg_successful The user registration successful. */ do_action( 'user_registration_check_token_complete', $user_id, $user_reg_successful ); ur_automatic_user_login( $user ); } } } } else { add_filter( 'login_message', array( $this, 'custom_registration_error_message' ) ); add_filter( 'user_registration_login_form_before_notice', array( $this, 'custom_registration_error_message' ) ); } /** * Action hook to check the token complete. * * @param array $user_id The user ID. * @param bool $user_reg_successful The user registration successful. */ do_action( 'user_registration_check_token_complete', $user_id, $user_reg_successful ); } } /** * Handler for edit confirmation email. * * @return void */ public function edit_email_confirmation_handler() { global $wp; if ( ! isset( $_GET['confirm_email'] ) || ! isset( $_GET['confirm_key'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification return; } // Verify the confirmation key. $user_id = absint( wp_unslash( $_GET['confirm_email'] ) ); // phpcs:ignore WordPress.Security.NonceVerification $confirm_key = sanitize_text_field( wp_unslash( $_GET['confirm_key'] ) ); // phpcs:ignore WordPress.Security.NonceVerification $stored_key = get_user_meta( $user_id, 'user_registration_email_confirm_key', true ); $expiration = get_user_meta( $user_id, 'user_registration_pending_email_expiration', true ); if ( time() > $expiration || $confirm_key !== $stored_key ) { return; } /** * Trigger an action hook before the email address is update. * * @param int $user_id The user ID. */ do_action( 'user_registration_before_email_change_update', $user_id ); // Update the user's email address to the new one. wp_update_user( array( 'ID' => $user_id, 'user_email' => get_user_meta( $user_id, 'user_registration_pending_email', true ), ) ); /** * Trigger an action hook after the email address is updated. * * @param int $user_id The user ID. */ do_action( 'user_registration_email_change_success', $user_id ); // Remove the confirmation key, pending email and expiry date. UR_Form_Handler::delete_pending_email_change( $user_id ); wp_safe_redirect( home_url( add_query_arg( array(), $wp->request ) ) ); exit; } /** * Generate email token for the user. * * @param int $user_id User ID. * @return string Token. */ public function get_token( $user_id ) { $length = 50; $token = ''; $code_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $code_alphabet .= 'abcdefghijklmnopqrstuvwxyz'; $code_alphabet .= '0123456789'; $max = strlen( $code_alphabet ); for ( $i = 0; $i < $length; $i++ ) { $token .= $code_alphabet[ random_int( 0, $max - 1 ) ]; } $token .= crypt_the_string( $user_id . '_' . time(), 'e' ); return $token; do_action( 'user_registration_get_token' ); } /** * Set the token of the user and update it to usermeta table in database. * * @param array $valid_form_data Form filled data. * @param int $form_id Form ID. * @param int $user_id User ID. */ public function set_email_status( $valid_form_data, $form_id, $user_id ) { $form_id = isset( $form_id ) ? $form_id : 0; $login_option = ur_get_user_login_option( $user_id ); if ( 'email_confirmation' === $login_option || 'admin_approval_after_email_confirmation' === $login_option ) { $token = $this->get_token( $user_id ); update_user_meta( $user_id, 'ur_confirm_email', 0 ); update_user_meta( $user_id, 'ur_confirm_email_token', $token ); if ( 'admin_approval_after_email_confirmation' === $login_option ) { update_user_meta( $user_id, 'ur_admin_approval_after_email_confirmation', 'false' ); update_user_meta( $user_id, 'ur_user_status', 0 ); } // update user status when login using social connect. $is_social_login_option_enabled = ur_option_checked( 'user_registration_social_setting_enable_login_options', false ); if ( ! $is_social_login_option_enabled && get_user_meta( $user_id, 'user_registration_social_connect_bypass_current_password', false ) ) { update_user_meta( $user_id, 'ur_confirm_email', 1 ); if ( 'admin_approval_after_email_confirmation' === $login_option ) { update_user_meta( $user_id, 'ur_admin_approval_after_email_confirmation', 'true' ); update_user_meta( $user_id, 'ur_user_status', 0 ); } } } } /** * Check the email status during authentication * * @param WP_User $user User instance. * @param mixed $password Password. * @return mixed */ public function check_email_status( WP_User $user, $password ) { $form_id = ur_get_form_id_by_userid( $user->ID ); $general_login_option = get_option( 'user_registration_general_setting_login_options', 'default' ); if ( 'email_confirmation' === ur_get_user_login_option( $user->ID ) ) { $email_status = get_user_meta( $user->ID, 'ur_confirm_email', true ); /** * Action before check email status on login * * @param bool $email_status The email status. * @param array $user The user data. */ do_action( 'ur_user_before_check_email_status_on_login', $email_status, $user ); $website = isset( $_SERVER['SERVER_NAME'] ) && isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput $url = ( ! empty( $_SERVER['HTTPS'] ) ) ? 'https://' . $website : 'http://' . $website; $url = substr( $url, 0, strpos( $url, '?' ) ); $url = wp_nonce_url( $url . '?ur_resend_id=' . crypt_the_string( $user->ID . '_' . time(), 'e' ) . '&ur_resend_token=true', 'ur_resend_token' ); if ( '0' === $email_status ) { /* translators: %s - Resend Verification Link. */ $message = '' . __( 'ERROR:', 'user-registration' ) . ' ' . sprintf( __( 'Your account is still pending approval. Verify your email by clicking on the link sent to your email. %s', 'user-registration' ), '' . __( 'Resend Verification Link', 'user-registration' ) . '' ); return new WP_Error( 'user_email_not_verified', $message ); } return $user; } return $user; } /** * Deprecated my_simple_crypt function. * * @deprecated 1.4.0 * @param string $string the string to encrypt/decrypt. * @param string $action the action encrypt or decrypt. * @return void */ public function my_simple_crypt( $string, $action ) { ur_deprecated_function( 'UR_Email_Confirmation::my_simple_crypt', '1.4.0', 'crypt_the_string' ); } /** * Deprecated getToken function. * * @deprecated 1.4.0 * @param int $user_id User's ID. * @return void */ public function getToken( $user_id ) { ur_deprecated_function( 'UR_Email_Confirmation::getToken', '1.4.0', 'UR_Email_Confirmation::get_token' ); } } new UR_Email_Confirmation();