PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /home/ithome/public_html/education/wp-content/plugins/tutor/classes/
Server: Linux host100322.itwesthosting.com 3.10.0-1160.144.1.el7.tuxcare.els4.x86_64 #1 SMP Tue Apr 7 08:40:40 UTC 2026 x86_64
IP: 144.91.64.173
Choose File :

Url:
Dir : /home/ithome/public_html/education/wp-content/plugins/tutor/classes/FormHandler.php

<?php
/**
 * FormHandler class
 *
 * @author: themeum
 * @author_uri: https://themeum.com
 * @package Tutor
 * @since v.1.4.3
 */

namespace TUTOR;


if ( ! defined( 'ABSPATH' ) )
	exit;


class FormHandler {

	public function __construct() {
		add_action('tutor_action_tutor_user_login', array($this, 'process_login'));
		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' ) );
	}

	public function process_login(){
		tutils()->checking_nonce();


		$username = tutils()->array_get('log', $_POST);
		$password = tutils()->array_get('pwd', $_POST);


		try {
			$creds = array(
				'user_login'    => trim( wp_unslash( $username ) ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
				'user_password' => $password, // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
				'remember'      => isset( $_POST['rememberme'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			);


			$validation_error = new \WP_Error();
			$validation_error = apply_filters( 'tutor_process_login_errors', $validation_error, $creds['user_login'], $creds['user_password'] );

			if ( $validation_error->get_error_code() ) {
				throw new \Exception( '<strong>' . __( 'Error:', 'tutor' ) . '</strong> ' . $validation_error->get_error_message() );
			}

			if ( empty( $creds['user_login'] ) ) {
				throw new \Exception( '<strong>' . __( 'Error:', 'tutor' ) . '</strong> ' . __( 'Username is required.', 'tutor' ) );
			}

			// On multisite, ensure user exists on current site, if not add them before allowing login.
			if ( is_multisite() ) {
				$user_data = get_user_by( is_email( $creds['user_login'] ) ? 'email' : 'login', $creds['user_login'] );

				if ( $user_data && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {
					add_user_to_blog( get_current_blog_id(), $user_data->ID, 'customer' );
				}
			}

			// Perform the login.
			$user = wp_signon( apply_filters( 'tutor_login_credentials', $creds ), is_ssl() );

			if ( is_wp_error( $user ) ) {
				$message = $user->get_error_message();
				$message = str_replace( '<strong>' . esc_html( $creds['user_login'] ) . '</strong>', '<strong>' . esc_html( $creds['user_login'] ) . '</strong>', $message );
				throw new \Exception( $message );
			} else {
				tutor_redirect_back(apply_filters('tutor_login_redirect_url', tutils()->tutor_dashboard_url()));
			}
		} catch ( \Exception $e ) {
			tutor_flash_set('warning', apply_filters( 'login_errors', $e->getMessage()) );
			do_action( 'tutor_login_failed' );
		}



	}





	public function tutor_retrieve_password(){
		tutils()->checking_nonce();

		//echo '<pre>';
		//die(print_r($_POST));

		$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 );
	}


	public function reset_password_notification( $user_login = '', $reset_key = ''){
		$this->sendNotification($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);
	}

	public function lostpassword_url($url){
		return tutils()->tutor_dashboard_url('retrieve-password');
	}

	public function tutor_process_reset_password(){
		tutils()->checking_nonce();

		$reset_key = sanitize_text_field(tutils()->array_get('reset_key', $_POST));
		$user_id = (int) sanitize_text_field(tutils()->array_get('user_id', $_POST));
		$password = sanitize_text_field(tutils()->array_get('password', $_POST));
		$confirm_password = sanitize_text_field(tutils()->array_get('confirm_password', $_POST));

		$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( tutils()->tutor_dashboard_url() );
			exit;
		}
	}

	/**
	 * @param $user_login
	 * @param $reset_key
	 *
	 * Send E-Mail notification
	 * We are sending directly right now, later we will introduce centralised E-Mail notification System...
	 */
	public function sendNotification($user_login, $reset_key){
		//Send the E-Mail to user

		$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);
		$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' ) );
	}

	public function get_from_address(){
		return apply_filters('tutor_email_from_address', get_tutor_option('email_from_address'));
	}

	public function get_from_name(){
		return apply_filters('tutor_email_from_name', get_tutor_option('email_from_name'));
	}


}