PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.8.2
Tutor LMS – eLearning and online course solution v1.8.2
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 / Instructor.php
tutor / classes Last commit date
Addons.php 5 years ago Admin.php 5 years ago Ajax.php 5 years ago Assets.php 5 years ago Course.php 5 years ago Course_Filter.php 5 years ago Course_Settings_Tabs.php 5 years ago Course_Widget.php 5 years ago Custom_Validation.php 5 years ago Dashboard.php 5 years ago Email.php 5 years ago FormHandler.php 5 years ago Frontend.php 5 years ago Gutenberg.php 5 years ago Instructor.php 5 years ago Instructors_List.php 5 years ago Lesson.php 5 years ago Options.php 5 years ago Post_types.php 5 years ago Private_Course_Access.php 5 years ago Q_and_A.php 5 years ago Question_Answers_List.php 5 years ago Quiz.php 5 years ago Quiz_Attempts_List.php 5 years ago RestAPI.php 5 years ago Rewrite_Rules.php 5 years ago Shortcode.php 5 years ago Student.php 5 years ago Students_List.php 5 years ago Taxonomies.php 5 years ago Template.php 5 years ago Theme_Compatibility.php 5 years ago Tools.php 5 years ago Tutor.php 5 years ago TutorEDD.php 5 years ago Tutor_Base.php 5 years ago Tutor_List_Table.php 5 years ago Tutor_Setup.php 5 years ago Upgrader.php 5 years ago User.php 5 years ago Utils.php 5 years ago Video_Stream.php 5 years ago Withdraw.php 5 years ago Withdraw_Requests_List.php 5 years ago WooCommerce.php 5 years ago
Instructor.php
309 lines
1 <?php
2
3 /**
4 * Class Instructor
5 * @package TUTOR
6 *
7 * @since v.1.0.0
8 */
9
10 namespace TUTOR;
11
12 if ( ! defined( 'ABSPATH' ) )
13 exit;
14
15
16 class Instructor {
17
18 protected $error_msgs = '';
19 public function __construct() {
20 add_action('template_redirect', array($this, 'register_instructor'));
21 add_action('template_redirect', array($this, 'apply_instructor'));
22
23 //Add instructor from admin panel.
24 add_action('wp_ajax_tutor_add_instructor', array($this, 'add_new_instructor'));
25
26 /**
27 * Instructor Approval
28 * Block Unblock
29 *
30 * @since v.1.5.3
31 */
32 add_action('wp_ajax_instructor_approval_action', array($this, 'instructor_approval_action'));
33
34 /**
35 * Check if instructor can publish courses
36 * @since v.1.5.9
37 */
38 add_action('tutor_option_save_after', array($this, 'can_publish_tutor_courses'));
39 }
40
41 /**
42 * Register new user and mark him as instructor
43 *
44 * @since v.1.0.0
45 */
46 public function register_instructor(){
47 if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_register_instructor' ){
48 return;
49 }
50 //Checking nonce
51 tutor_utils()->checking_nonce();
52
53 $required_fields = apply_filters('tutor_instructor_registration_required_fields', array(
54 'first_name' => __('First name field is required', 'tutor'),
55 'last_name' => __('Last name field is required', 'tutor'),
56 'email' => __('E-Mail field is required', 'tutor'),
57 'user_login' => __('User Name field is required', 'tutor'),
58 'password' => __('Password field is required', 'tutor'),
59 'password_confirmation' => __('Password Confirmation field is required', 'tutor'),
60 ));
61
62 $validation_errors = array();
63
64 /*
65 *registration_errors
66 *push into validation_errors
67 */
68 $errors = apply_filters('registration_errors',new \WP_Error,'','');
69 foreach ($errors->errors as $key => $value)
70 {
71 $validation_errors[$key] = $value[0];
72
73 }
74
75 foreach ($required_fields as $required_key => $required_value){
76 if (empty($_POST[$required_key])){
77 $validation_errors[$required_key] = $required_value;
78 }
79 }
80
81 if (!filter_var(tutor_utils()->input_old('email'), FILTER_VALIDATE_EMAIL)) {
82 $validation_errors['email'] = __('Valid E-Mail is required', 'tutor');
83 }
84 if (tutor_utils()->input_old('password') !== tutor_utils()->input_old('password_confirmation')){
85 $validation_errors['password_confirmation'] = __('Confirm password does not matched with Password field', 'tutor');
86 }
87
88 if (count($validation_errors)){
89 $this->error_msgs = $validation_errors;
90 add_filter('tutor_instructor_register_validation_errors', array($this, 'tutor_instructor_form_validation_errors'));
91 return;
92 }
93
94 $first_name = sanitize_text_field(tutor_utils()->input_old('first_name'));
95 $last_name = sanitize_text_field(tutor_utils()->input_old('last_name'));
96 $email = sanitize_text_field(tutor_utils()->input_old('email'));
97 $user_login = sanitize_text_field(tutor_utils()->input_old('user_login'));
98 $password = sanitize_text_field(tutor_utils()->input_old('password'));
99
100 $userdata = array(
101 'user_login' => $user_login,
102 'user_email' => $email,
103 'first_name' => $first_name,
104 'last_name' => $last_name,
105 //'role' => tutor()->instructor_role,
106 'user_pass' => $password,
107 );
108
109 $user_id = wp_insert_user( $userdata ) ;
110 if ( ! is_wp_error($user_id)){
111 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
112 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'pending'));
113
114 do_action('tutor_new_instructor_after', $user_id);
115
116 $user = get_user_by( 'id', $user_id );
117 if( $user ) {
118 wp_set_current_user( $user_id, $user->user_login );
119 wp_set_auth_cookie( $user_id );
120 }
121 }else{
122 $this->error_msgs = $user_id->get_error_messages();
123 add_filter('tutor_instructor_register_validation_errors', array($this, 'tutor_instructor_form_validation_errors'));
124 return;
125 }
126
127 wp_redirect(tutor_utils()->input_old('_wp_http_referer'));
128 die();
129 }
130
131 public function tutor_instructor_form_validation_errors(){
132 return $this->error_msgs;
133 }
134
135 /**
136 *
137 * Usage for instructor applying when a user already logged in
138 *
139 * @since v.1.0.0
140 */
141 public function apply_instructor(){
142 if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_apply_instructor' ){
143 return;
144 }
145 //Checking nonce
146 tutor_utils()->checking_nonce();
147
148 $user_id = get_current_user_id();
149 if ($user_id){
150 if (tutor_utils()->is_instructor()){
151 die(__('Already applied for instructor', 'tutor'));
152 }else{
153 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
154 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'pending'));
155
156 do_action('tutor_new_instructor_after', $user_id);
157 }
158 }else{
159 die(__('Permission denied', 'tutor'));
160 }
161
162 wp_redirect(tutor_utils()->input_old('_wp_http_referer'));
163 die();
164 }
165
166
167 public function add_new_instructor(){
168
169 tutils()->checking_nonce();
170
171 // Only admin should be able to add instructor
172 if(!current_user_can( 'manage_options' ) || !get_option( 'users_can_register', false )) {
173 wp_send_json_error( );
174 }
175
176
177 $required_fields = apply_filters('tutor_instructor_registration_required_fields', array(
178 'first_name' => __('First name field is required', 'tutor'),
179 'last_name' => __('Last name field is required', 'tutor'),
180 'email' => __('E-Mail field is required', 'tutor'),
181 'user_login' => __('User Name field is required', 'tutor'),
182 'phone_number' => __('Phone Number field is required', 'tutor'),
183 'password' => __('Password field is required', 'tutor'),
184 'password_confirmation' => __('Password Confirmation field is required', 'tutor'),
185 ));
186
187 $validation_errors = array();
188 foreach ($required_fields as $required_key => $required_value){
189 if (empty($_POST[$required_key])){
190 $validation_errors[$required_key] = $required_value;
191 }
192 }
193
194 if (!filter_var(tutor_utils()->input_old('email'), FILTER_VALIDATE_EMAIL)) {
195 $validation_errors['email'] = __('Valid E-Mail is required', 'tutor');
196 }
197 if (tutor_utils()->input_old('password') !== tutor_utils()->input_old('password_confirmation')){
198 $validation_errors['password_confirmation'] = __('Confirm password does not matched with Password field', 'tutor');
199 }
200
201 if (count($validation_errors)){
202 wp_send_json_error(array('errors' => $validation_errors));
203 }
204
205 $first_name = sanitize_text_field(tutor_utils()->input_old('first_name'));
206 $last_name = sanitize_text_field(tutor_utils()->input_old('last_name'));
207 $email = sanitize_text_field(tutor_utils()->input_old('email'));
208 $user_login = sanitize_text_field(tutor_utils()->input_old('user_login'));
209 $phone_number = sanitize_text_field(tutor_utils()->input_old('phone_number'));
210 $password = sanitize_text_field(tutor_utils()->input_old('password'));
211 $tutor_profile_bio = wp_kses_post(tutor_utils()->input_old('tutor_profile_bio'));
212
213 $userdata = apply_filters('add_new_instructor_data', array(
214 'user_login' => $user_login,
215 'user_email' => $email,
216 'first_name' => $first_name,
217 'last_name' => $last_name,
218 'role' => tutor()->instructor_role,
219 'user_pass' => $password,
220 ));
221
222 do_action('tutor_add_new_instructor_before');
223
224 $user_id = wp_insert_user( $userdata ) ;
225 if ( ! is_wp_error($user_id)) {
226 update_user_meta($user_id, 'phone_number', $phone_number);
227 update_user_meta($user_id, 'description', $tutor_profile_bio);
228 update_user_meta($user_id, '_tutor_profile_bio', $tutor_profile_bio);
229 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
230 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'approved'));
231
232 do_action('tutor_add_new_instructor_after', $user_id);
233
234 wp_send_json_success(array('msg' => __('Instructor has been added successfully', 'tutor') ));
235 }
236
237 wp_send_json_error(array('errors' => $user_id));
238 }
239
240 public function instructor_approval_action(){
241 tutils()->checking_nonce();
242
243 if(!current_user_can( 'manage_options' )) {
244 wp_send_json_error( array('message' =>__('Access Denied', 'tutor')) );
245 }
246
247 $instructor_id = (int) sanitize_text_field(tutils()->array_get('instructor_id', $_POST));
248 $action = sanitize_text_field(tutils()->array_get('action_name', $_POST));
249
250 if( 'approve' === $action ) {
251 do_action('tutor_before_approved_instructor', $instructor_id);
252
253 update_user_meta($instructor_id, '_tutor_instructor_status', 'approved');
254 update_user_meta($instructor_id, '_tutor_instructor_approved', tutor_time());
255
256 $instructor = new \WP_User($instructor_id);
257 $instructor->add_role(tutor()->instructor_role);
258
259 // Send E-Mail to this user about instructor approval via hook
260 do_action('tutor_after_approved_instructor', $instructor_id);
261 }
262
263 if( 'blocked' === $action ) {
264 do_action('tutor_before_blocked_instructor', $instructor_id);
265 update_user_meta($instructor_id, '_tutor_instructor_status', 'blocked');
266
267 $instructor = new \WP_User($instructor_id);
268 $instructor->remove_role(tutor()->instructor_role);
269 do_action('tutor_after_blocked_instructor', $instructor_id);
270
271 //TODO: send E-Mail to this user about instructor blocked, should via hook
272 }
273
274 if( 'remove-instructor' === $action)
275 {
276 do_action('tutor_before_rejected_instructor', $instructor_id);
277
278 $user = new \WP_User($instructor_id);
279 $user->remove_role(tutor()->instructor_role);
280
281 tutor_utils()->remove_instructor_role($instructor_id);
282 update_user_meta($instructor_id, '_is_tutor_instructor_rejected', tutor_time());
283
284 // Send E-Mail to this user about instructor rejection via hook
285 do_action('tutor_after_rejected_instructor', $instructor_id);
286 }
287
288 wp_send_json_success();
289 }
290
291 /**
292 * Can instructor publish courses directly
293 * Fixed in Gutenberg @since v.1.5.9
294 */
295
296 public function can_publish_tutor_courses(){
297 $can_publish_course = (bool) tutor_utils()->get_option('instructor_can_publish_course');
298
299 $instructor_role = tutor()->instructor_role;
300 $instructor = get_role( $instructor_role );
301
302 if ($can_publish_course){
303 $instructor->add_cap('publish_tutor_courses');
304 }else{
305 $instructor->remove_cap('publish_tutor_courses');
306 }
307 }
308
309 }