Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor/classes/FormHandler.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
/**
3
+
* Manage Form
4
+
*
5
+
* @package Tutor
6
+
* @author Themeum <support@themeum.com>
7
+
* @link https://themeum.com
8
+
* @since 1.4.3
9
+
*/
10
+
11
+
namespace TUTOR;
12
+
13
+
if ( ! defined( 'ABSPATH' ) ) {
14
+
exit;
15
+
}
16
+
17
+
/**
18
+
* FormHandler class
19
+
*
20
+
* @since 1.4.3
21
+
*/
22
+
class FormHandler {
23
+
24
+
/**
25
+
* Constructor
26
+
*
27
+
* @since 1.4.3
28
+
* @return void
29
+
*/
30
+
public function __construct() {
31
+
add_action( 'tutor_action_tutor_retrieve_password', array( $this, 'tutor_retrieve_password' ) );
32
+
add_action( 'tutor_action_tutor_process_reset_password', array( $this, 'tutor_process_reset_password' ) );
33
+
34
+
add_action( 'tutor_reset_password_notification', array( $this, 'reset_password_notification' ), 10, 2 );
35
+
add_filter( 'tutor_lostpassword_url', array( $this, 'lostpassword_url' ) );
36
+
}
37
+
38
+
/**
39
+
* Retrieve Password
40
+
*
41
+
* @since 1.4.3
42
+
* @return void|bool
43
+
*/
44
+
public function tutor_retrieve_password() {
45
+
tutils()->checking_nonce();
46
+
47
+
/**
48
+
* To check spam or other logic before form process.
49
+
*
50
+
* @since 2.1.10
51
+
*/
52
+
$before_form_process = apply_filters( 'tutor_before_retrieve_password_form_process', null );
53
+
if ( is_wp_error( $before_form_process ) ) {
54
+
tutor_flash_set( 'danger', $before_form_process->get_error_message() );
55
+
return false;
56
+
}
57
+
58
+
//phpcs:ignore WordPress.Security.NonceVerification.Missing
59
+
$login = sanitize_user( tutils()->array_get( 'user_login', $_POST ) );
60
+
61
+
if ( empty( $login ) ) {
62
+
tutor_flash_set( 'danger', __( 'Enter a username or email address.', 'tutor' ) );
63
+
return false;
64
+
} else {
65
+
// Check on username first, as customers can use emails as usernames.
66
+
$user_data = get_user_by( 'login', $login );
67
+
}
68
+
69
+
// If no user found, check if it login is email and lookup user based on email.
70
+
if ( ! $user_data && is_email( $login ) && apply_filters( 'tutor_get_username_from_email', true ) ) {
71
+
$user_data = get_user_by( 'email', $login );
72
+
}
73
+
74
+
$errors = new \WP_Error();
75
+
76
+
do_action( 'lostpassword_post', $errors );
77
+
78
+
if ( $errors->get_error_code() ) {
79
+
tutor_flash_set( 'danger', $errors->get_error_message() );
80
+
return false;
81
+
}
82
+
83
+
if ( ! $user_data ) {
84
+
tutor_flash_set( 'danger', __( 'Invalid username or email.', 'tutor' ) );
85
+
return false;
86
+
}
87
+
88
+
if ( is_multisite() && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {
89
+
tutor_flash_set( 'danger', __( 'Invalid username or email.', 'tutor' ) );
90
+
return false;
91
+
}
92
+
93
+
// Redefining user_login ensures we return the right case in the email.
94
+
$user_login = $user_data->user_login;
95
+
96
+
do_action( 'retrieve_password', $user_login );
97
+
98
+
$allow = apply_filters( 'allow_password_reset', true, $user_data->ID );
99
+
100
+
if ( ! $allow ) {
101
+
tutor_flash_set( 'danger', __( 'Password reset is not allowed for this user', 'tutor' ) );
102
+
return false;
103
+
} elseif ( is_wp_error( $allow ) ) {
104
+
tutor_flash_set( 'danger', $allow->get_error_message() );
105
+
return false;
106
+
}
107
+
108
+
// Get password reset key (function introduced in WordPress 4.4).
109
+
$key = get_password_reset_key( $user_data );
110
+
111
+
// Send email notification.
112
+
do_action( 'tutor_reset_password_notification', $user_login, $key );
113
+
}
114
+
115
+
/**
116
+
* Send notification for rest password
117
+
*
118
+
* @since 1.4.3
119
+
*
120
+
* @param string $user_login username.
121
+
* @param string $reset_key reset key.
122
+
*
123
+
* @return void
124
+
*/
125
+
public function reset_password_notification( $user_login = '', $reset_key = '' ) {
126
+
$this->send_notification( $user_login, $reset_key );
127
+
128
+
$html = '<h3>' . __( 'Check your E-Mail', 'tutor' ) . '</h3>';
129
+
$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>';
130
+
$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>';
131
+
tutor_flash_set( 'success', $html );
132
+
}
133
+
134
+
/**
135
+
* Get lost password URL
136
+
*
137
+
* @since 1.4.3
138
+
*
139
+
* @param string $url URL.
140
+
* @return string
141
+
*/
142
+
public function lostpassword_url( $url ) {
143
+
return tutils()->tutor_dashboard_url( 'retrieve-password' );
144
+
}
145
+
146
+
/**
147
+
* Handle reset password request
148
+
*
149
+
* @since 1.4.3
150
+
* @return void|bool
151
+
*/
152
+
public function tutor_process_reset_password() {
153
+
tutils()->checking_nonce();
154
+
155
+
$reset_key = Input::post( 'reset_key' );
156
+
$user_id = Input::post( 'user_id', 0, Input::TYPE_INT );
157
+
$password = Input::post( 'password' );
158
+
$confirm_password = Input::post( 'confirm_password' );
159
+
160
+
$user = get_user_by( 'ID', $user_id );
161
+
$user = check_password_reset_key( $reset_key, $user->user_login );
162
+
163
+
if ( is_wp_error( $user ) ) {
164
+
tutor_flash_set( 'danger', __( 'This key is invalid or has already been used. Please reset your password again if needed.', 'tutor' ) );
165
+
return false;
166
+
}
167
+
168
+
if ( $user instanceof \WP_User ) {
169
+
if ( ! $password ) {
170
+
tutor_flash_set( 'danger', __( 'Please enter your password.', 'tutor' ) );
171
+
return false;
172
+
}
173
+
174
+
if ( $password !== $confirm_password ) {
175
+
tutor_flash_set( 'danger', __( 'Passwords do not match.', 'tutor' ) );
176
+
return false;
177
+
}
178
+
179
+
tutils()->reset_password( $user, $password );
180
+
181
+
do_action( 'tutor_user_reset_password', $user );
182
+
183
+
// Perform the login.
184
+
$creds = array(
185
+
'user_login' => $user->user_login,
186
+
'user_password' => $password,
187
+
'remember' => true,
188
+
);
189
+
$user = wp_signon( apply_filters( 'tutor_login_credentials', $creds ), is_ssl() );
190
+
191
+
do_action( 'tutor_user_reset_password_login', $user );
192
+
193
+
wp_safe_redirect( tutor_utils()->tutor_dashboard_url() );
194
+
exit;
195
+
}
196
+
}
197
+
198
+
/**
199
+
* Send Password Reset E-Mail to user.
200
+
* We are sending directly right now, later we will introduce centralised E-Mail notification System...
201
+
*
202
+
* @since 1.4.3
203
+
*
204
+
* @param string $user_login login username.
205
+
* @param string $reset_key password reset key.
206
+
*
207
+
* @return void
208
+
*/
209
+
public function send_notification( $user_login, $reset_key ) {
210
+
211
+
$user_data = get_user_by( 'login', $user_login );
212
+
213
+
$variable = array(
214
+
'user_login' => $user_login,
215
+
'reset_key' => $reset_key,
216
+
'user_id' => $user_data->ID,
217
+
);
218
+
219
+
$html = tutor_get_template_html( 'email.send-reset-password', $variable );
220
+
/* translators: %s: site name */
221
+
$subject = sprintf( __( 'Password Reset Request for %s', 'tutor' ), get_option( 'blogname' ) );
222
+
223
+
$header = 'Content-Type: text/html' . "\r\n";
224
+
225
+
add_filter( 'wp_mail_from', array( $this, 'get_from_address' ) );
226
+
add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );
227
+
228
+
wp_mail( $user_data->user_email, $subject, $html, $header );
229
+
230
+
remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ) );
231
+
remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );
232
+
}
233
+
234
+
/**
235
+
* Get e-mail from address
236
+
*
237
+
* @since 1.4.3
238
+
* @return string
239
+
*/
240
+
public function get_from_address() {
241
+
$from_address = get_tutor_option( 'email_from_address' );
242
+
$default = ! $from_address ? get_option( 'admin_email' ) : $from_address;
243
+
return apply_filters( 'tutor_email_from_address', $default );
244
+
}
245
+
246
+
/**
247
+
* Get e-mail from name
248
+
*
249
+
* @since 1.4.3
250
+
* @return string
251
+
*/
252
+
public function get_from_name() {
253
+
$from_name = get_tutor_option( 'email_from_name' );
254
+
$default = ! $from_name ? get_option( 'blogname' ) : $from_name;
255
+
return apply_filters( 'tutor_email_from_name', $default );
256
+
}
257
+
258
+
}
259
+