PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 2.0.6
Tutor LMS – eLearning and online course solution v2.0.6
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 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / classes / FormHandler.php
tutor / classes Last commit date
Addons.php 4 years ago Admin.php 4 years ago Ajax.php 4 years ago Announcements.php 4 years ago Assets.php 4 years ago Backend_Page_Trait.php 4 years ago Course.php 4 years ago Course_Filter.php 4 years ago Course_List.php 4 years ago Course_Settings_Tabs.php 4 years ago Course_Widget.php 4 years ago Custom_Validation.php 4 years ago Dashboard.php 4 years ago FormHandler.php 4 years ago Frontend.php 4 years ago Gutenberg.php 4 years ago Input.php 4 years ago Instructor.php 4 years ago Instructors_List.php 4 years ago Lesson.php 4 years ago Options_V2.php 4 years ago Post_types.php 4 years ago Private_Course_Access.php 4 years ago Q_and_A.php 4 years ago Question_Answers_List.php 4 years ago Quiz.php 4 years ago Quiz_Attempts_List.php 4 years ago RestAPI.php 4 years ago Reviews.php 4 years ago Rewrite_Rules.php 4 years ago Shortcode.php 4 years ago Student.php 4 years ago Students_List.php 4 years ago Taxonomies.php 4 years ago Template.php 4 years ago Theme_Compatibility.php 5 years ago Tools.php 4 years ago Tools_V2.php 4 years ago Tutor.php 4 years ago TutorEDD.php 4 years ago Tutor_Base.php 5 years ago Tutor_List_Table.php 4 years ago Tutor_Setup.php 4 years ago Upgrader.php 4 years ago User.php 4 years ago Utils.php 4 years ago Video_Stream.php 4 years ago Withdraw.php 4 years ago Withdraw_Requests_List.php 4 years ago WooCommerce.php 4 years ago
FormHandler.php
200 lines
1 <?php
2 /**
3 * FormHandler class
4 *
5 * @author: themeum
6 * @link: 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 * Send Password Reset E-Mail to user.
148 * We are sending directly right now, later we will introduce centralised E-Mail notification System...
149 *
150 * @param $user_login login username.
151 * @param $reset_key password reset key.
152 */
153 public function sendNotification( $user_login, $reset_key ) {
154
155 $user_data = get_user_by( 'login', $user_login );
156
157 $variable = array(
158 'user_login' => $user_login,
159 'reset_key' => $reset_key,
160 'user_id' => $user_data->ID,
161 );
162
163 $html = tutor_get_template_html( 'email.send-reset-password', $variable );
164 $subject = sprintf( __( 'Password Reset Request for %s', 'tutor' ), get_option( 'blogname' ) );
165
166 $header = 'Content-Type: text/html' . "\r\n";
167
168 add_filter( 'wp_mail_from', array( $this, 'get_from_address' ) );
169 add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );
170
171 wp_mail( $user_data->user_email, $subject, $html, $header );
172
173 remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ) );
174 remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );
175 }
176
177 /**
178 * Get e-mail from address
179 *
180 * @return string
181 */
182 public function get_from_address() {
183 $from_address = get_tutor_option( 'email_from_address' );
184 $default = !$from_address ? get_option( 'admin_email' ) : $from_address;
185 return apply_filters( 'tutor_email_from_address', $default );
186 }
187
188 /**
189 * Get e-mail from name
190 *
191 * @return string
192 */
193 public function get_from_name() {
194 $from_name = get_tutor_option( 'email_from_name' );
195 $default = !$from_name ? get_option( 'blogname' ) : $from_name;
196 return apply_filters( 'tutor_email_from_name', $default );
197 }
198
199 }
200