PluginProbe
Tutor LMS – eLearning and online course solution / 1.9.4
Tutor LMS – eLearning and online course solution v1.9.4
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
← All changes | classes/Student.php +158 -244 3.9.151.9.4 View file →
@@ -1,343 +1,257 @@
1 1 <?php
2 +
2 3 /**
3 - * Class Student
4 + * Class Instructor
5 + * @package TUTOR
4 6 *
5 - * @package Tutor\Student
6 - * @author Themeum <support@themeum.com>
7 - * @link https://themeum.com
8 - * @since 1.0.0
7 + * @since v.1.0.0
9 8 */
10 9
11 10 namespace TUTOR;
12 11
13 -if ( ! defined( 'ABSPATH' ) ) {
12 +if ( ! defined( 'ABSPATH' ) )
14 13 exit;
15 -}
16 14
17 -/**
18 - * Manage students
19 - *
20 - * @since 1.0.0
21 - */
15 +
22 16 class Student {
23 17
24 - /**
25 - * Bagged error messages
26 - *
27 - * @since 1.0.0
28 - *
29 - * @var $error_msgs
30 - */
31 18 protected $error_msgs = '';
32 -
33 - /**
34 - * Handle Hooks
35 - *
36 - * @since 1.0.0
37 - */
38 19 public function __construct() {
39 - add_action( 'template_redirect', array( $this, 'register_student' ) );
40 - add_filter( 'get_avatar_url', array( $this, 'filter_avatar' ), 10, 3 );
41 - add_action( 'wp_ajax_tutor_social_profile', array( $this, 'tutor_social_profile' ) );
42 - add_action( 'wp_ajax_tutor_profile_password_reset', array( $this, 'tutor_reset_password' ) );
43 - add_action( 'wp_ajax_tutor_update_profile', array( $this, 'update_profile' ) );
20 + add_action('template_redirect', array($this, 'register_student'));
21 + add_action('template_redirect', array($this, 'update_profile'));
22 + add_filter('get_avatar_url', array($this, 'filter_avatar'), 10, 3);
23 + add_action('tutor_action_tutor_reset_password', array($this, 'tutor_reset_password'));
44 24 }
45 25
46 26 /**
47 27 * Register new user and mark him as student
48 28 *
49 - * @since 1.0.0
50 - *
51 - * @return void
29 + * @since v.1.0.0
52 30 */
53 - public function register_student() {
54 - if ( 'tutor_register_student' !== Input::post( 'tutor_action', '' ) || ! get_option( 'users_can_register', false ) ) {
55 - // Action must be register, and registration must be enabled in dashboard.
31 + public function register_student(){
32 + if ( tutils()->array_get('tutor_action', $_POST) !== 'tutor_register_student' || !get_option( 'users_can_register', false ) ){
33 + // Action must be register, and registrtion must be enabled in dashoard
56 34 return;
57 35 }
58 -
59 - // Checking nonce.
36 +
37 + //Checking nonce
60 38 tutor_utils()->checking_nonce();
61 39
62 - $required_fields = apply_filters(
63 - 'tutor_student_registration_required_fields',
64 - array(
65 - 'first_name' => __( 'First name field is required', 'tutor' ),
66 - 'last_name' => __( 'Last name field is required', 'tutor' ),
67 - 'email' => __( 'E-Mail field is required', 'tutor' ),
68 - 'user_login' => __( 'User Name field is required', 'tutor' ),
69 - 'password' => __( 'Password field is required', 'tutor' ),
70 - 'password_confirmation' => __( 'Password Confirmation field is required', 'tutor' ),
71 - )
72 - );
40 + $required_fields = apply_filters('tutor_student_registration_required_fields', array(
41 + 'first_name' => __('First name field is required', 'tutor'),
42 + 'last_name' => __('Last name field is required', 'tutor'),
43 + 'email' => __('E-Mail field is required', 'tutor'),
44 + 'user_login' => __('User Name field is required', 'tutor'),
45 + 'password' => __('Password field is required', 'tutor'),
46 + 'password_confirmation' => __('Password Confirmation field is required', 'tutor'),
47 + ));
48 +
73 49
74 - $terms_conditions_link = tutor_utils()->get_toc_page_link();
75 - if ( $terms_conditions_link ) {
76 - $required_fields['terms_conditions'] = __( 'Please accept the Terms and Conditions to continue', 'tutor' );
77 - }
78 -
79 50 $validation_errors = array();
80 51
81 - // Registration error push into validation_errors.
82 - $errors = apply_filters( 'registration_errors', new \WP_Error(), '', '' );
83 - foreach ( $errors->errors as $key => $value ) {
84 - $validation_errors[ $key ] = $value[0];
85 -
52 + /*
53 + *registration_errors
54 + *push into validation_errors
55 + */
56 + $errors = apply_filters('registration_errors',new \WP_Error,'','');
57 + foreach ($errors->errors as $key => $value)
58 + {
59 + $validation_errors[$key] = $value[0];
60 +
86 61 }
87 62
88 - foreach ( $required_fields as $required_key => $required_value ) {
89 - if ( empty( Input::post( $required_key, '' ) ) ) {
90 - $validation_errors[ $required_key ] = $required_value;
63 + foreach ($required_fields as $required_key => $required_value){
64 + if (empty($_POST[$required_key])){
65 + $validation_errors[$required_key] = $required_value;
91 66 }
92 67 }
93 68
94 -
95 - if ( ! filter_var( tutor_utils()->input_old( 'email' ), FILTER_VALIDATE_EMAIL ) ) {
96 - $validation_errors['email'] = __( 'Valid E-Mail is required', 'tutor' );
69 + if (!filter_var(tutor_utils()->input_old('email'), FILTER_VALIDATE_EMAIL)) {
70 + $validation_errors['email'] = __('Valid E-Mail is required', 'tutor');
97 71 }
98 - if ( tutor_utils()->input_old( 'password' ) !== tutor_utils()->input_old( 'password_confirmation' ) ) {
99 - $validation_errors['password_confirmation'] = __( 'Your passwords should match each other. Please recheck.', 'tutor' );
72 + if (tutor_utils()->input_old('password') !== tutor_utils()->input_old('password_confirmation')){
73 + $validation_errors['password_confirmation'] = __('Confirm password does not matched with Password field', 'tutor');
100 74 }
101 75
102 - if ( count( $validation_errors ) ) {
76 + if (count($validation_errors)){
103 77 $this->error_msgs = $validation_errors;
104 - add_filter( 'tutor_student_register_validation_errors', array( $this, 'tutor_student_form_validation_errors' ) );
78 + add_filter('tutor_student_register_validation_errors', array($this, 'tutor_student_form_validation_errors'));
105 79 return;
106 80 }
107 81
108 - $first_name = sanitize_text_field( tutor_utils()->input_old( 'first_name' ) );
109 - $last_name = sanitize_text_field( tutor_utils()->input_old( 'last_name' ) );
110 - $email = sanitize_text_field( tutor_utils()->input_old( 'email' ) );
111 - $user_login = sanitize_text_field( tutor_utils()->input_old( 'user_login' ) );
112 - $password = sanitize_text_field( tutor_utils()->input_old( 'password' ) );
82 + $first_name = sanitize_text_field(tutor_utils()->input_old('first_name'));
83 + $last_name = sanitize_text_field(tutor_utils()->input_old('last_name'));
84 + $email = sanitize_text_field(tutor_utils()->input_old('email'));
85 + $user_login = sanitize_text_field(tutor_utils()->input_old('user_login'));
86 + $password = sanitize_text_field(tutor_utils()->input_old('password'));
113 87
114 88 $userdata = array(
115 - 'user_login' => $user_login,
116 - 'user_email' => $email,
117 - 'first_name' => $first_name,
118 - 'last_name' => $last_name,
119 - 'user_pass' => $password,
89 + 'user_login' => $user_login,
90 + 'user_email' => $email,
91 + 'first_name' => $first_name,
92 + 'last_name' => $last_name,
93 + //'role' => tutor()->student_role,
94 + 'user_pass' => $password,
120 95 );
121 96
122 - global $wpdb;
123 - $wpdb->query( 'START TRANSACTION' );
124 -
125 - $user_id = wp_insert_user( $userdata );
126 - $enroll_attempt = Input::post( 'tutor_course_enroll_attempt', '' );
127 -
128 - if ( is_wp_error( $user_id ) ) {
129 - $this->error_msgs = $user_id->get_error_messages();
130 - add_filter( 'tutor_student_register_validation_errors', array( $this, 'tutor_student_form_validation_errors' ) );
131 - return;
132 - }
133 -
134 - $user = get_user_by( 'id', $user_id );
135 -
136 - $is_req_email_verification = apply_filters( 'tutor_require_email_verification', false );
137 - if ( $is_req_email_verification ) {
138 - do_action( 'tutor_send_verification_mail', $user, $enroll_attempt );
139 - $reg_done = apply_filters( 'tutor_registration_done', true );
140 - if ( ! $reg_done ) {
141 - $wpdb->query( 'ROLLBACK' );
142 - return;
143 - } else {
144 - $wpdb->query( 'COMMIT' );
97 + $user_id = wp_insert_user( $userdata ) ;
98 + if ( ! is_wp_error($user_id)){
99 + $user = get_user_by( 'id', $user_id );
100 + if( $user ) {
101 + wp_set_current_user( $user_id, $user->user_login );
102 + wp_set_auth_cookie( $user_id );
145 103 }
146 - } else {
147 - /**
148 - * Tutor Free - reqular student reg process.
149 - */
150 - $wpdb->query( 'COMMIT' );
151 104
152 - wp_set_current_user( $user_id, $user->user_login );
153 - wp_set_auth_cookie( $user_id );
105 + do_action('tutor_after_student_signup', $user_id);
154 106
155 - do_action( 'tutor_after_student_signup', $user_id );
156 - // since 1.9.8 do enroll if guest attempt to enroll.
157 - if ( ! empty( $enroll_attempt ) ) {
158 - do_action( 'tutor_do_enroll_after_login_if_attempt', $enroll_attempt, $user_id );
159 - }
160 -
161 - // Redirect page.
162 - $redirect_page = tutor_utils()->array_get( 'redirect_to', $_REQUEST ); //phpcs:ignore
163 - if ( ! $redirect_page ) {
107 + //Redirect page
108 + $redirect_page = tutils()->array_get('redirect_to', $_REQUEST);
109 + if ( ! $redirect_page){
164 110 $redirect_page = tutor_utils()->tutor_dashboard_url();
165 111 }
166 - wp_safe_redirect( apply_filters( 'tutor_student_register_redirect_url', $redirect_page, $user ) );
112 + wp_redirect($redirect_page);
167 113 die();
114 + }else{
115 + $this->error_msgs = $user_id->get_error_messages();
116 + add_filter('tutor_student_register_validation_errors', array($this, 'tutor_student_form_validation_errors'));
117 + return;
168 118 }
169 119
170 120 $registration_page = tutor_utils()->student_register_url();
171 - wp_safe_redirect( $registration_page );
121 + wp_redirect($registration_page);
172 122 die();
173 123 }
174 124
175 - /**
176 - * Get validation error messages
177 - *
178 - * @since 1.0.0
179 - *
180 - * @return mixed error messages
181 - */
182 - public function tutor_student_form_validation_errors() {
125 + public function tutor_student_form_validation_errors(){
183 126 return $this->error_msgs;
184 127 }
185 128
186 - /**
187 - * Update profile
188 - *
189 - * @since 1.0.0
190 - *
191 - * @return void send wp_json response
192 - */
193 - public function update_profile() {
194 - // Checking nonce.
195 - tutor_utils()->checking_nonce();
129 + public function update_profile(){
130 + if (tutils()->array_get('tutor_action', $_POST) !== 'tutor_profile_edit' ){
131 + return;
132 + }
196 133
197 134 $user_id = get_current_user_id();
198 - do_action( 'tutor_profile_update_before', $user_id );
135 +
136 + //Checking nonce
137 + tutor_utils()->checking_nonce();
138 + do_action('tutor_profile_update_before', $user_id);
199 139
200 - $first_name = sanitize_text_field( tutor_utils()->input_old( 'first_name' ) );
201 - $last_name = sanitize_text_field( tutor_utils()->input_old( 'last_name' ) );
202 - $phone_number = sanitize_text_field( tutor_utils()->input_old( 'phone_number' ) );
203 - $tutor_profile_bio = wp_kses( Input::post( 'tutor_profile_bio', '', Input::TYPE_KSES_POST ), tutor_utils()->allowed_profile_bio_tags() );
204 - $tutor_profile_job_title = sanitize_text_field( tutor_utils()->input_old( 'tutor_profile_job_title' ) );
205 - $timezone = Input::post( 'timezone', '' );
140 + $first_name = sanitize_text_field(tutor_utils()->input_old('first_name'));
141 + $last_name = sanitize_text_field(tutor_utils()->input_old('last_name'));
142 + $phone_number = sanitize_text_field(tutor_utils()->input_old('phone_number'));
143 + $tutor_profile_bio = wp_kses_post(tutor_utils()->input_old('tutor_profile_bio'));
206 144
207 - $display_name = sanitize_text_field( tutor_utils()->input_old( 'display_name' ) );
145 + $display_name = sanitize_text_field(tutils()->input_old('display_name'));
208 146
209 - $userdata = array(
210 - 'ID' => $user_id,
211 - 'first_name' => $first_name,
212 - 'last_name' => $last_name,
213 - 'display_name' => $display_name,
147 + $userdata = array(
148 + 'ID' => $user_id,
149 + 'first_name' => $first_name,
150 + 'last_name' => $last_name,
151 + 'display_name' => $display_name,
214 152 );
153 + $user_id = wp_update_user( $userdata );
215 154
216 - $user_id = wp_update_user( $userdata );
155 + if ( ! is_wp_error( $user_id ) ) {
156 + update_user_meta($user_id, 'phone_number', $phone_number);
157 + update_user_meta($user_id, '_tutor_profile_bio', $tutor_profile_bio);
217 158
218 - if ( ! is_wp_error( $user_id ) ) {
219 - update_user_meta( $user_id, User::PHONE_NUMBER_META, $phone_number );
220 - update_user_meta( $user_id, User::PROFILE_BIO_META, $tutor_profile_bio );
221 - update_user_meta( $user_id, User::PROFILE_JOB_TITLE_META, $tutor_profile_job_title );
222 - update_user_meta( $user_id, User::TIMEZONE_META, $timezone );
159 + $tutor_user_social = tutils()->tutor_user_social_icons();
160 + foreach ($tutor_user_social as $key => $social){
161 + $user_social_value = sanitize_text_field(tutor_utils()->input_old($key));
162 + if($user_social_value){
163 + update_user_meta($user_id, $key, $user_social_value);
164 + }else{
165 + delete_user_meta($user_id, $key);
166 + }
167 + }
223 168 }
224 -
225 - do_action( 'tutor_profile_update_after', $user_id );
226 -
227 - wp_send_json_success( array( 'message' => __( 'Profile Updated', 'tutor' ) ) );
169 + do_action('tutor_profile_update_after', $user_id);
170 + wp_redirect(wp_get_raw_referer());
171 + die();
228 172 }
229 173
230 174 /**
231 - * Filter Avatar, Change avatar URL with Tutor User Photo
175 + * @param $url
176 + * @param $id_or_email
177 + * @param $args
232 178 *
233 - * @since 1.0.0
179 + * @return false|string
234 180 *
235 - * @param string $url url.
236 - * @param mixed $id_or_email id or email.
237 - * @param array $args extra args.
238 - *
239 - * @return false|string
181 + * Change avatar URL with Tutor User Photo
240 182 */
241 - public function filter_avatar( $url, $id_or_email, $args ) {
242 183
184 + public function filter_avatar( $url, $id_or_email, $args){
185 + global $wpdb;
186 +
243 187 $finder = false;
244 - $is_id = is_numeric( $id_or_email );
245 188
246 - if ( $is_id ) {
247 - $finder = absint( $id_or_email );
248 - } elseif ( is_string( $id_or_email ) ) {
249 - $finder = $id_or_email;
250 - } elseif ( $id_or_email instanceof \WP_User ) {
251 - // User Object.
252 - $finder = $id_or_email->ID;
253 - } elseif ( $id_or_email instanceof \WP_Post ) {
254 - // Post Object.
255 - $finder = (int) $id_or_email->post_author;
256 - } elseif ( $id_or_email instanceof \WP_Comment ) {
257 - return $url;
258 - }
189 + if ( is_numeric( $id_or_email ) ) {
190 + $finder = absint( $id_or_email ) ;
191 + } elseif ( is_string( $id_or_email ) ) {
192 + $finder = $id_or_email;
193 + } elseif ( $id_or_email instanceof WP_User ) {
194 + // User Object
195 + $finder = $id_or_email->ID;
196 + } elseif ( $id_or_email instanceof WP_Post ) {
197 + // Post Object
198 + $finder = (int) $id_or_email->post_author;
199 + } elseif ( $id_or_email instanceof WP_Comment ) {
200 + return $url;
201 + }
259 202
260 - if ( ! $finder ) {
261 - return $url;
262 - }
203 + if ( ! $finder){
204 + return $url;
205 + }
263 206
264 - $user = get_user_by( $is_id ? 'ID' : 'email', $finder );
265 -
266 - if ( $user ) {
267 - $profile_photo = get_user_meta( $user->ID, '_tutor_profile_photo', true );
268 - if ( $profile_photo ) {
269 - $size = isset( $args['size'] ) ? $args['size'] : 'thumbnail';
270 - $url = wp_get_attachment_image_url( $profile_photo, $size );
207 + $user_id = (int) $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->users} WHERE ID = %s OR user_email = %s ", $finder, $finder));
208 + if ($user_id){
209 + $profile_photo = get_user_meta($user_id, '_tutor_profile_photo', true);
210 + if ($profile_photo){
211 + $url = wp_get_attachment_image_url($profile_photo, 'thumbnail');
271 212 }
272 213 }
273 214 return $url;
274 215 }
275 216
276 - /**
277 - * Password Rest
278 - *
279 - * @since 1.0.0
280 - *
281 - * @return void send wp_json response
282 - */
283 - public function tutor_reset_password() {
284 - // Checking nonce.
217 + public function tutor_reset_password(){
218 + //Checking nonce
285 219 tutor_utils()->checking_nonce();
286 220
287 221 $user = wp_get_current_user();
288 222
289 - $previous_password = Input::post( 'previous_password', '' );
290 - $new_password = Input::post( 'new_password', '' );
291 - $confirm_new_password = Input::post( 'confirm_new_password', '' );
223 + $previous_password = sanitize_text_field($_POST['previous_password']);
224 + $new_password = sanitize_text_field($_POST['new_password']);
225 + $confirm_new_password = sanitize_text_field($_POST['confirm_new_password']);
292 226
293 - $previous_password_checked = wp_check_password( $previous_password, $user->user_pass, $user->ID );
227 + $previous_password_checked = wp_check_password( $previous_password, $user->user_pass, $user->ID);
294 228
295 229 $validation_errors = array();
296 - if ( ! $previous_password_checked ) {
297 - $validation_errors['incorrect_previous_password'] = __( 'Incorrect Previous Password', 'tutor' );
230 + if ( ! $previous_password_checked){
231 + $validation_errors['incorrect_previous_password'] = __('Incorrect Previous Password', 'tutor');
298 232 }
299 - if ( empty( $new_password ) ) {
300 - $validation_errors['new_password_required'] = __( 'New Password Required', 'tutor' );
233 + if (empty($new_password)){
234 + $validation_errors['new_password_required'] = __('New Password Required', 'tutor');
301 235 }
302 - if ( empty( $confirm_new_password ) ) {
303 - $validation_errors['confirm_password_required'] = __( 'Confirm Password Required', 'tutor' );
236 + if (empty($confirm_new_password)){
237 + $validation_errors['confirm_password_required'] = __('Confirm Password Required', 'tutor');
304 238 }
305 - if ( $new_password !== $confirm_new_password ) {
306 - $validation_errors['password_not_matched'] = __( 'New password and confirm password does not matched', 'tutor' );
239 + if ( $new_password !== $confirm_new_password){
240 + $validation_errors['password_not_matched'] = __('New password and confirm password does not matched', 'tutor');
307 241 }
308 -
309 - if ( $previous_password_checked && ! empty( $new_password ) && $new_password === $confirm_new_password ) {
310 - wp_set_password( $new_password, $user->ID );
311 - wp_send_json_success( array( 'message' => __( 'Password Changed', 'tutor' ) ) );
242 + if (count($validation_errors)){
243 + $this->error_msgs = $validation_errors;
244 + add_filter('tutor_reset_password_validation_errors', array($this, 'tutor_student_form_validation_errors'));
245 + return;
312 246 }
313 247
314 - $first_message = count( $validation_errors ) ? $validation_errors[ array_keys( $validation_errors )[0] ] : __( 'Something went wrong!', 'tutor' );
315 - wp_send_json_error( array( 'message' => $first_message ) );
316 - }
317 -
318 - /**
319 - * Handle social links
320 - *
321 - * @since 2.0.0
322 - *
323 - * @return void
324 - */
325 - public function tutor_social_profile() {
326 - tutor_utils()->checking_nonce();
327 -
328 - $user_id = get_current_user_id();
329 - $tutor_user_social = tutor_utils()->tutor_user_social_icons();
330 -
331 - foreach ( $tutor_user_social as $key => $social ) {
332 - $user_social_value = sanitize_text_field( tutor_utils()->input_old( $key ) );
333 - if ( '' !== $user_social_value ) {
334 - update_user_meta( $user_id, $key, $user_social_value );
335 - } else {
336 - delete_user_meta( $user_id, $key );
337 - }
248 + if ($previous_password_checked && ! empty($new_password) && $new_password === $confirm_new_password){
249 + wp_set_password($new_password, $user->ID);
250 + tutor_utils()->set_flash_msg( __('Password set successfully', 'tutor') );
338 251 }
339 252
340 - wp_send_json_success( array( 'message' => __( 'Social Profile Updated', 'tutor' ) ) );
253 + wp_redirect(wp_get_raw_referer());
341 254 die();
342 255 }
343 -}
256 +
257 +}