<?php /** * Manage Form * * @package Tutor * @author Themeum <support@themeum.com> * @link https://themeum.com * @since 1.4.3 */ namespace TUTOR; if ( ! defined( 'ABSPATH' ) ) { exit; } /** * FormHandler class * * @since 1.4.3 */ class FormHandler { /** * Constructor * * @since 1.4.3 * @return void */ public function __construct() { add_action( 'tutor_action_tutor_retrieve_password', array( $this, 'tutor_retrieve_password' ) ); add_action( 'tutor_action_tutor_process_reset_password', array( $this, 'tutor_process_reset_password' ) ); add_action( 'tutor_reset_password_notification', array( $this, 'reset_password_notification' ), 10, 2 ); add_filter( 'tutor_lostpassword_url', array( $this, 'lostpassword_url' ) ); } /** * Retrieve Password * * @since 1.4.3 * @return void|bool */ public function tutor_retrieve_password() { tutils()->checking_nonce(); /** * To check spam or other logic before form process. * * @since 2.1.10 */ $before_form_process = apply_filters( 'tutor_before_retrieve_password_form_process', null ); if ( is_wp_error( $before_form_process ) ) { tutor_flash_set( 'danger', $before_form_process->get_error_message() ); return false; } //phpcs:ignore WordPress.Security.NonceVerification.Missing $login = sanitize_user( tutils()->array_get( 'user_login', $_POST ) ); if ( empty( $login ) ) { tutor_flash_set( 'danger', __( 'Enter a username or email address.', 'tutor' ) ); return false; } else { // Check on username first, as customers can use emails as usernames. $user_data = get_user_by( 'login', $login ); } // If no user found, check if it login is email and lookup user based on email. if ( ! $user_data && is_email( $login ) && apply_filters( 'tutor_get_username_from_email', true ) ) { $user_data = get_user_by( 'email', $login ); } $errors = new \WP_Error(); do_action( 'lostpassword_post', $errors ); if ( $errors->get_error_code() ) { tutor_flash_set( 'danger', $errors->get_error_message() ); return false; } if ( ! $user_data ) { tutor_flash_set( 'danger', __( 'Invalid username or email.', 'tutor' ) ); return false; } if ( is_multisite() && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) { tutor_flash_set( 'danger', __( 'Invalid username or email.', 'tutor' ) ); return false; } // Redefining user_login ensures we return the right case in the email. $user_login = $user_data->user_login; do_action( 'retrieve_password', $user_login ); $allow = apply_filters( 'allow_password_reset', true, $user_data->ID ); if ( ! $allow ) { tutor_flash_set( 'danger', __( 'Password reset is not allowed for this user', 'tutor' ) ); return false; } elseif ( is_wp_error( $allow ) ) { tutor_flash_set( 'danger', $allow->get_error_message() ); return false; } // Get password reset key (function introduced in WordPress 4.4). $key = get_password_reset_key( $user_data ); // Send email notification. do_action( 'tutor_reset_password_notification', $user_login, $key ); } /** * Send notification for rest password * * @since 1.4.3 * * @param string $user_login username. * @param string $reset_key reset key. * * @return void */ public function reset_password_notification( $user_login = '', $reset_key = '' ) { $this->send_notification( $user_login, $reset_key ); $html = '<h3>' . __( 'Check your E-Mail', 'tutor' ) . '</h3>'; $html .= '<p> ' . __( "We've sent an email to this account's email address. Click the link in the email to reset your password.", 'tutor' ) . '</p>'; $html .= '<p>' . __( " If you don't see the email, check other places it might be, like your junk, spam, social, promotion or others folders.", 'tutor' ) . '</p>'; tutor_flash_set( 'success', $html ); } /** * Get lost password URL * * @since 1.4.3 * * @param string $url URL. * @return string */ public function lostpassword_url( $url ) { return tutils()->tutor_dashboard_url( 'retrieve-password' ); } /** * Handle reset password request * * @since 1.4.3 * @return void|bool */ public function tutor_process_reset_password() { tutils()->checking_nonce(); $reset_key = Input::post( 'reset_key' ); $user_id = Input::post( 'user_id', 0, Input::TYPE_INT ); $password = Input::post( 'password' ); $confirm_password = Input::post( 'confirm_password' ); $user = get_user_by( 'ID', $user_id ); $user = check_password_reset_key( $reset_key, $user->user_login ); if ( is_wp_error( $user ) ) { tutor_flash_set( 'danger', __( 'This key is invalid or has already been used. Please reset your password again if needed.', 'tutor' ) ); return false; } if ( $user instanceof \WP_User ) { if ( ! $password ) { tutor_flash_set( 'danger', __( 'Please enter your password.', 'tutor' ) ); return false; } if ( $password !== $confirm_password ) { tutor_flash_set( 'danger', __( 'Passwords do not match.', 'tutor' ) ); return false; } tutils()->reset_password( $user, $password ); do_action( 'tutor_user_reset_password', $user ); // Perform the login. $creds = array( 'user_login' => $user->user_login, 'user_password' => $password, 'remember' => true, ); $user = wp_signon( apply_filters( 'tutor_login_credentials', $creds ), is_ssl() ); do_action( 'tutor_user_reset_password_login', $user ); wp_safe_redirect( tutor_utils()->tutor_dashboard_url() ); exit; } } /** * Send Password Reset E-Mail to user. * We are sending directly right now, later we will introduce centralised E-Mail notification System... * * @since 1.4.3 * * @param string $user_login login username. * @param string $reset_key password reset key. * * @return void */ public function send_notification( $user_login, $reset_key ) { $user_data = get_user_by( 'login', $user_login ); $variable = array( 'user_login' => $user_login, 'reset_key' => $reset_key, 'user_id' => $user_data->ID, ); $html = tutor_get_template_html( 'email.send-reset-password', $variable ); /* translators: %s: site name */ $subject = sprintf( __( 'Password Reset Request for %s', 'tutor' ), get_option( 'blogname' ) ); $header = 'Content-Type: text/html' . "\r\n"; add_filter( 'wp_mail_from', array( $this, 'get_from_address' ) ); add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) ); wp_mail( $user_data->user_email, $subject, $html, $header ); remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ) ); remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) ); } /** * Get e-mail from address * * @since 1.4.3 * @return string */ public function get_from_address() { $from_address = get_tutor_option( 'email_from_address' ); $default = ! $from_address ? get_option( 'admin_email' ) : $from_address; return apply_filters( 'tutor_email_from_address', $default ); } /** * Get e-mail from name * * @since 1.4.3 * @return string */ public function get_from_name() { $from_name = get_tutor_option( 'email_from_name' ); $default = ! $from_name ? get_option( 'blogname' ) : $from_name; return apply_filters( 'tutor_email_from_name', $default ); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Addons.php | File | 11.6 KB | 0644 |
|
Admin.php | File | 21.3 KB | 0644 |
|
Ajax.php | File | 16.82 KB | 0644 |
|
Announcements.php | File | 2.67 KB | 0644 |
|
Assets.php | File | 23.25 KB | 0644 |
|
Backend_Page_Trait.php | File | 4.39 KB | 0644 |
|
BaseController.php | File | 1.47 KB | 0644 |
|
Course.php | File | 85.39 KB | 0644 |
|
Course_Embed.php | File | 2.55 KB | 0644 |
|
Course_Filter.php | File | 8.67 KB | 0644 |
|
Course_List.php | File | 13.7 KB | 0644 |
|
Course_Settings_Tabs.php | File | 1.16 KB | 0644 |
|
Course_Widget.php | File | 8.19 KB | 0644 |
|
Custom_Validation.php | File | 513 B | 0644 |
|
Dashboard.php | File | 1.23 KB | 0644 |
|
Earnings.php | File | 9.53 KB | 0644 |
|
FormHandler.php | File | 7.16 KB | 0644 |
|
Frontend.php | File | 2.94 KB | 0644 |
|
Gutenberg.php | File | 4.62 KB | 0644 |
|
Input.php | File | 9.08 KB | 0644 |
|
Instructor.php | File | 12.99 KB | 0644 |
|
Instructors_List.php | File | 12.97 KB | 0644 |
|
Lesson.php | File | 17.08 KB | 0644 |
|
Options_V2.php | File | 63.19 KB | 0644 |
|
Permalink.php | File | 2 KB | 0644 |
|
Post_types.php | File | 18.3 KB | 0644 |
|
Private_Course_Access.php | File | 2.52 KB | 0644 |
|
Q_And_A.php | File | 10.66 KB | 0644 |
|
Question_Answers_List.php | File | 2.54 KB | 0644 |
|
Quiz.php | File | 62.02 KB | 0644 |
|
QuizBuilder.php | File | 11.5 KB | 0644 |
|
Quiz_Attempts_List.php | File | 7.32 KB | 0644 |
|
RestAPI.php | File | 7.97 KB | 0644 |
|
Reviews.php | File | 2.71 KB | 0644 |
|
Rewrite_Rules.php | File | 5.18 KB | 0644 |
|
Shortcode.php | File | 14.22 KB | 0644 |
|
Singleton.php | File | 1.08 KB | 0644 |
|
Student.php | File | 10.18 KB | 0644 |
|
Students_List.php | File | 2.37 KB | 0644 |
|
Taxonomies.php | File | 8.2 KB | 0644 |
|
Template.php | File | 14.18 KB | 0644 |
|
Theme_Compatibility.php | File | 683 B | 0644 |
|
Tools.php | File | 3.33 KB | 0644 |
|
Tools_V2.php | File | 18.18 KB | 0644 |
|
Tutor.php | File | 36.06 KB | 0644 |
|
TutorEDD.php | File | 4.63 KB | 0644 |
|
Tutor_Base.php | File | 1.48 KB | 0644 |
|
Tutor_Setup.php | File | 33.25 KB | 0644 |
|
Upgrader.php | File | 7.49 KB | 0644 |
|
User.php | File | 14.66 KB | 0644 |
|
Utils.php | File | 263.33 KB | 0644 |
|
Video_Stream.php | File | 3.94 KB | 0644 |
|
WhatsNew.php | File | 4.07 KB | 0644 |
|
Withdraw.php | File | 9.49 KB | 0644 |
|
Withdraw_Requests_List.php | File | 6.15 KB | 0644 |
|
WooCommerce.php | File | 23.15 KB | 0644 |
|