PluginProbe
Tutor LMS – eLearning and online course solution / 2.0.1
Tutor LMS – eLearning and online course solution v2.0.1
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 All 191 releases
tutor / classes / FormHandler.php

FormHandler.php in Tutor LMS – eLearning and online course solution 2.0.1, at classes/FormHandler.php

188 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * FormHandler class
4 *
5 * @author: themeum
6 * @author_uri: https://themeum.com
7 * @package Tutor
8 * @since v.1.4.3
9 */
10
11 namespace TUTOR;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17
18 class FormHandler {
19
20 public function __construct() {
21 add_action( 'tutor_action_tutor_retrieve_password', array( $this, 'tutor_retrieve_password' ) );
22 add_action( 'tutor_action_tutor_process_reset_password', array( $this, 'tutor_process_reset_password' ) );
23
24 add_action( 'tutor_reset_password_notification', array( $this, 'reset_password_notification' ), 10, 2 );
25 add_filter( 'tutor_lostpassword_url', array( $this, 'lostpassword_url' ) );
26 }
27
28 public function tutor_retrieve_password() {
29 tutils()->checking_nonce();
30
31 $login = sanitize_user( tutils()->array_get( 'user_login', $_POST ) );
32
33 if ( empty( $login ) ) {
34 tutor_flash_set( 'danger', __( 'Enter a username or email address.', 'tutor' ) );
35 return false;
36 } else {
37 // Check on username first, as customers can use emails as usernames.
38 $user_data = get_user_by( 'login', $login );
39 }
40
41 // If no user found, check if it login is email and lookup user based on email.
42 if ( ! $user_data && is_email( $login ) && apply_filters( 'tutor_get_username_from_email', true ) ) {
43 $user_data = get_user_by( 'email', $login );
44 }
45
46 $errors = new \WP_Error();
47
48 do_action( 'lostpassword_post', $errors );
49
50 if ( $errors->get_error_code() ) {
51 tutor_flash_set( 'danger', $errors->get_error_message() );
52 return false;
53 }
54
55 if ( ! $user_data ) {
56 tutor_flash_set( 'danger', __( 'Invalid username or email.', 'tutor' ) );
57 return false;
58 }
59
60 if ( is_multisite() && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {
61 tutor_flash_set( 'danger', __( 'Invalid username or email.', 'tutor' ) );
62 return false;
63 }
64
65 // Redefining user_login ensures we return the right case in the email.
66 $user_login = $user_data->user_login;
67
68 do_action( 'retrieve_password', $user_login );
69
70 $allow = apply_filters( 'allow_password_reset', true, $user_data->ID );
71
72 if ( ! $allow ) {
73 tutor_flash_set( 'danger', __( 'Password reset is not allowed for this user', 'tutor' ) );
74 return false;
75 } elseif ( is_wp_error( $allow ) ) {
76 tutor_flash_set( 'danger', $allow->get_error_message() );
77 return false;
78 }
79
80 // Get password reset key (function introduced in WordPress 4.4).
81 $key = get_password_reset_key( $user_data );
82
83 // Send email notification.
84 do_action( 'tutor_reset_password_notification', $user_login, $key );
85 }
86
87 public function reset_password_notification( $user_login = '', $reset_key = '' ) {
88 $this->sendNotification( $user_login, $reset_key );
89
90 $html = '<h3>' . __( 'Check your E-Mail', 'tutor' ) . '</h3>';
91 $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>';
92 $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>';
93 tutor_flash_set( 'success', $html );
94 }
95
96 public function lostpassword_url( $url ) {
97 return tutils()->tutor_dashboard_url( 'retrieve-password' );
98 }
99
100 public function tutor_process_reset_password() {
101 tutils()->checking_nonce();
102
103 $reset_key = sanitize_text_field( tutils()->array_get( 'reset_key', $_POST ) );
104 $user_id = (int) tutils()->array_get( 'user_id', $_POST );
105 $password = sanitize_text_field( tutils()->array_get( 'password', $_POST ) );
106 $confirm_password = sanitize_text_field( tutils()->array_get( 'confirm_password', $_POST ) );
107
108 $user = get_user_by( 'ID', $user_id );
109 $user = check_password_reset_key( $reset_key, $user->user_login );
110
111 if ( is_wp_error( $user ) ) {
112 tutor_flash_set( 'danger', __( 'This key is invalid or has already been used. Please reset your password again if needed.', 'tutor' ) );
113 return false;
114 }
115
116 if ( $user instanceof \WP_User ) {
117 if ( ! $password ) {
118 tutor_flash_set( 'danger', __( 'Please enter your password.', 'tutor' ) );
119 return false;
120 }
121
122 if ( $password !== $confirm_password ) {
123 tutor_flash_set( 'danger', __( 'Passwords do not match.', 'tutor' ) );
124 return false;
125 }
126
127 tutils()->reset_password( $user, $password );
128
129 do_action( 'tutor_user_reset_password', $user );
130
131 // Perform the login.
132 $creds = array(
133 'user_login' => $user->user_login,
134 'user_password' => $password,
135 'remember' => true,
136 );
137 $user = wp_signon( apply_filters( 'tutor_login_credentials', $creds ), is_ssl() );
138
139 do_action( 'tutor_user_reset_password_login', $user );
140
141 wp_safe_redirect( tutor_utils()->tutor_dashboard_url() );
142 exit;
143 }
144 }
145
146 /**
147 * @param $user_login
148 * @param $reset_key
149 *
150 * Send E-Mail notification
151 * We are sending directly right now, later we will introduce centralised E-Mail notification System...
152 */
153 public function sendNotification( $user_login, $reset_key ) {
154 // Send the E-Mail to user
155
156 $user_data = get_user_by( 'login', $user_login );
157
158 $variable = array(
159 'user_login' => $user_login,
160 'reset_key' => $reset_key,
161 'user_id' => $user_data->ID,
162 );
163
164 $html = tutor_get_template_html( 'email.send-reset-password', $variable );
165 $subject = sprintf( __( 'Password Reset Request for %s', 'tutor' ), get_option( 'blogname' ) );
166
167 $header = 'Content-Type: text/html' . "\r\n";
168
169 add_filter( 'wp_mail_from', array( $this, 'get_from_address' ) );
170 add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );
171
172 wp_mail( $user_data->user_email, $subject, $html, $header );
173
174 remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ) );
175 remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );
176 }
177
178 public function get_from_address() {
179 return apply_filters( 'tutor_email_from_address', get_tutor_option( 'email_from_address' ) );
180 }
181
182 public function get_from_name() {
183 return apply_filters( 'tutor_email_from_name', get_tutor_option( 'email_from_name' ) );
184 }
185
186
187 }
188