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 / Student.php

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

295 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class Instructor
5 *
6 * @package TUTOR
7 *
8 * @since v.1.0.0
9 */
10
11 namespace TUTOR;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17
18 class Student {
19
20 /**
21 * Bagged error messages
22 *
23 * @var $error_msgs
24 */
25 protected $error_msgs = '';
26
27 /**
28 * Handle Hooks
29 */
30 public function __construct() {
31 add_action( 'template_redirect', array( $this, 'register_student' ) );
32 add_filter( 'get_avatar_url', array( $this, 'filter_avatar' ), 10, 3 );
33 add_action( 'tutor_action_tutor_social_profile', array( $this, 'tutor_social_profile' ) );
34
35 add_action( 'wp_ajax_tutor_profile_password_reset', array( $this, 'tutor_reset_password' ) );
36 add_action( 'wp_ajax_tutor_update_profile', array( $this, 'update_profile' ) );
37 }
38
39 /**
40 * Register new user and mark him as student
41 *
42 * @since v.1.0.0
43 */
44 public function register_student() {
45 if ( tutor_utils()->array_get( 'tutor_action', $_POST ) !== 'tutor_register_student' || ! get_option( 'users_can_register', false ) ) {
46 // Action must be register, and registrtion must be enabled in dashoard
47 return;
48 }
49
50 // Checking nonce.
51 tutor_utils()->checking_nonce();
52
53 $required_fields = apply_filters(
54 'tutor_student_registration_required_fields',
55 array(
56 'first_name' => __( 'First name field is required', 'tutor' ),
57 'last_name' => __( 'Last name field is required', 'tutor' ),
58 'email' => __( 'E-Mail field is required', 'tutor' ),
59 'user_login' => __( 'User Name field is required', 'tutor' ),
60 'password' => __( 'Password field is required', 'tutor' ),
61 'password_confirmation' => __( 'Password Confirmation field is required', 'tutor' ),
62 )
63 );
64
65 $validation_errors = array();
66
67 /*
68 *registration_errors
69 *push into validation_errors
70 */
71 $errors = apply_filters( 'registration_errors', new \WP_Error(), '', '' );
72 foreach ( $errors->errors as $key => $value ) {
73 $validation_errors[ $key ] = $value[0];
74
75 }
76
77 foreach ( $required_fields as $required_key => $required_value ) {
78 if ( empty( $_POST[ $required_key ] ) ) {
79 $validation_errors[ $required_key ] = $required_value;
80 }
81 }
82
83 if ( ! filter_var( tutor_utils()->input_old( 'email' ), FILTER_VALIDATE_EMAIL ) ) {
84 $validation_errors['email'] = __( 'Valid E-Mail is required', 'tutor' );
85 }
86 if ( tutor_utils()->input_old( 'password' ) !== tutor_utils()->input_old( 'password_confirmation' ) ) {
87 $validation_errors['password_confirmation'] = __( 'Your passwords should match each other. Please recheck.', 'tutor' );
88 }
89
90 if ( count( $validation_errors ) ) {
91 $this->error_msgs = $validation_errors;
92 add_filter( 'tutor_student_register_validation_errors', array( $this, 'tutor_student_form_validation_errors' ) );
93 return;
94 }
95
96 $first_name = sanitize_text_field( tutor_utils()->input_old( 'first_name' ) );
97 $last_name = sanitize_text_field( tutor_utils()->input_old( 'last_name' ) );
98 $email = sanitize_text_field( tutor_utils()->input_old( 'email' ) );
99 $user_login = sanitize_text_field( tutor_utils()->input_old( 'user_login' ) );
100 $password = sanitize_text_field( tutor_utils()->input_old( 'password' ) );
101
102 $userdata = array(
103 'user_login' => $user_login,
104 'user_email' => $email,
105 'first_name' => $first_name,
106 'last_name' => $last_name,
107 // 'role' => tutor()->student_role,
108 'user_pass' => $password,
109 );
110
111 $user_id = wp_insert_user( $userdata );
112 if ( ! is_wp_error( $user_id ) ) {
113 $user = get_user_by( 'id', $user_id );
114 if ( $user ) {
115 wp_set_current_user( $user_id, $user->user_login );
116 wp_set_auth_cookie( $user_id );
117 }
118
119 do_action( 'tutor_after_student_signup', $user_id );
120 // since 1.9.8 do enroll if guest attempt to enroll
121 if(!empty($_POST['tutor_course_enroll_attempt'])) {
122 do_action( 'tutor_do_enroll_after_login_if_attempt', $_POST['tutor_course_enroll_attempt'], $user_id );
123 }
124
125 // Redirect page
126 $redirect_page = tutor_utils()->array_get( 'redirect_to', $_REQUEST );
127 if ( ! $redirect_page ) {
128 $redirect_page = tutor_utils()->tutor_dashboard_url();
129 }
130 wp_redirect( $redirect_page );
131 die();
132 } else {
133 $this->error_msgs = $user_id->get_error_messages();
134 add_filter( 'tutor_student_register_validation_errors', array( $this, 'tutor_student_form_validation_errors' ) );
135 return;
136 }
137
138 $registration_page = tutor_utils()->student_register_url();
139 wp_redirect( $registration_page );
140 die();
141 }
142
143 public function tutor_student_form_validation_errors() {
144 return $this->error_msgs;
145 }
146
147 public function update_profile() {
148 // Checking nonce
149 tutor_utils()->checking_nonce();
150
151 $user_id = get_current_user_id();
152 do_action( 'tutor_profile_update_before', $user_id );
153
154 $first_name = sanitize_text_field( tutor_utils()->input_old( 'first_name' ) );
155 $last_name = sanitize_text_field( tutor_utils()->input_old( 'last_name' ) );
156 $phone_number = sanitize_text_field( tutor_utils()->input_old( 'phone_number' ) );
157 $tutor_profile_bio = wp_kses_post( tutor_utils()->input_old( 'tutor_profile_bio' ) );
158 $tutor_profile_job_title = sanitize_text_field( tutor_utils()->input_old( 'tutor_profile_job_title' ) );
159
160 $display_name = sanitize_text_field( tutor_utils()->input_old( 'display_name' ) );
161
162 $userdata = array(
163 'ID' => $user_id,
164 'first_name' => $first_name,
165 'last_name' => $last_name,
166 'display_name' => $display_name,
167 );
168 $user_id = wp_update_user( $userdata );
169
170 if ( ! is_wp_error( $user_id ) ) {
171 update_user_meta( $user_id, 'phone_number', $phone_number );
172 update_user_meta( $user_id, '_tutor_profile_bio', $tutor_profile_bio );
173 update_user_meta( $user_id, '_tutor_profile_job_title', $tutor_profile_job_title );
174
175 $tutor_user_social = tutor_utils()->tutor_user_social_icons();
176 foreach ( $tutor_user_social as $key => $social ) {
177 $user_social_value = sanitize_text_field( tutor_utils()->input_old( $key ) );
178 if ( $user_social_value ) {
179 update_user_meta( $user_id, $key, $user_social_value );
180 } else {
181 delete_user_meta( $user_id, $key );
182 }
183 }
184 }
185 do_action( 'tutor_profile_update_after', $user_id );
186
187 wp_send_json_success( array('message' => __('Profile Updated', 'tutor')) );
188 }
189
190 /**
191 * Filter Avatar
192 *
193 * @param $url
194 * @param $id_or_email id or email
195 * @param $args extra args
196 *
197 * @return false|string
198 *
199 * Change avatar URL with Tutor User Photo
200 */
201 public function filter_avatar( $url, $id_or_email, $args ) {
202 global $wpdb;
203
204 $finder = false;
205
206 if ( is_numeric( $id_or_email ) ) {
207 $finder = absint( $id_or_email );
208 } elseif ( is_string( $id_or_email ) ) {
209 $finder = $id_or_email;
210 } elseif ( $id_or_email instanceof WP_User ) {
211 // User Object
212 $finder = $id_or_email->ID;
213 } elseif ( $id_or_email instanceof WP_Post ) {
214 // Post Object
215 $finder = (int) $id_or_email->post_author;
216 } elseif ( $id_or_email instanceof WP_Comment ) {
217 return $url;
218 }
219
220 if ( ! $finder ) {
221 return $url;
222 }
223
224 $user_id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->users} WHERE ID = %s OR user_email = %s ", $finder, $finder ) );
225 if ( $user_id ) {
226 $profile_photo = get_user_meta( $user_id, '_tutor_profile_photo', true );
227 if ( $profile_photo ) {
228 $url = wp_get_attachment_image_url( $profile_photo, 'thumbnail' );
229 }
230 }
231 return $url;
232 }
233
234 /**
235 * Password Rest
236 */
237 public function tutor_reset_password() {
238 // Checking nonce.
239 tutor_utils()->checking_nonce();
240
241 $user = wp_get_current_user();
242
243 $previous_password = sanitize_text_field( $_POST['previous_password'] );
244 $new_password = sanitize_text_field( $_POST['new_password'] );
245 $confirm_new_password = sanitize_text_field( $_POST['confirm_new_password'] );
246
247 $previous_password_checked = wp_check_password( $previous_password, $user->user_pass, $user->ID );
248
249 $validation_errors = array();
250 if ( ! $previous_password_checked ) {
251 $validation_errors['incorrect_previous_password'] = __( 'Incorrect Previous Password', 'tutor' );
252 }
253 if ( empty( $new_password ) ) {
254 $validation_errors['new_password_required'] = __( 'New Password Required', 'tutor' );
255 }
256 if ( empty( $confirm_new_password ) ) {
257 $validation_errors['confirm_password_required'] = __( 'Confirm Password Required', 'tutor' );
258 }
259 if ( $new_password !== $confirm_new_password ) {
260 $validation_errors['password_not_matched'] = __( 'New password and confirm password does not matched', 'tutor' );
261 }
262
263 if ( $previous_password_checked && ! empty( $new_password ) && $new_password === $confirm_new_password ) {
264 wp_set_password( $new_password, $user->ID );
265 wp_send_json_success( array('message' => __('Password Changed', 'tutor')) );
266 }
267
268 $first_message = count($validation_errors) ? $validation_errors[array_keys($validation_errors)[0]] : __('Something went wrong!', 'tutor');
269 wp_send_json_error( array('message' => $first_message) );
270 }
271
272 /**
273 * Handle social links
274 *
275 * @since v2.0.0
276 */
277 public function tutor_social_profile() {
278 tutor_utils()->checking_nonce();
279
280 $user_id = get_current_user_id();
281 $tutor_user_social = tutor_utils()->tutor_user_social_icons();
282
283 foreach ( $tutor_user_social as $key => $social ) {
284 $user_social_value = sanitize_text_field( tutor_utils()->input_old( $key ) );
285 if ( '' !== $user_social_value ) {
286 update_user_meta( $user_id, $key, $user_social_value );
287 } else {
288 delete_user_meta( $user_id, $key );
289 }
290 }
291 wp_redirect( wp_get_raw_referer() );
292 die();
293 }
294 }
295