PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.7.8
Tutor LMS – eLearning and online course solution v1.7.8
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 Delete_Enrollment_With_Order.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
308 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 // Only admin should be able to add instructor
170 if(!current_user_can( 'manage_options' ) || !get_option( 'users_can_register', false )) {
171 wp_send_json_error( );
172 }
173
174 tutils()->checking_nonce();
175
176 $required_fields = apply_filters('tutor_instructor_registration_required_fields', array(
177 'first_name' => __('First name field is required', 'tutor'),
178 'last_name' => __('Last name field is required', 'tutor'),
179 'email' => __('E-Mail field is required', 'tutor'),
180 'user_login' => __('User Name field is required', 'tutor'),
181 'phone_number' => __('Phone Number field is required', 'tutor'),
182 'password' => __('Password field is required', 'tutor'),
183 'password_confirmation' => __('Password Confirmation field is required', 'tutor'),
184 ));
185
186 $validation_errors = array();
187 foreach ($required_fields as $required_key => $required_value){
188 if (empty($_POST[$required_key])){
189 $validation_errors[$required_key] = $required_value;
190 }
191 }
192
193 if (!filter_var(tutor_utils()->input_old('email'), FILTER_VALIDATE_EMAIL)) {
194 $validation_errors['email'] = __('Valid E-Mail is required', 'tutor');
195 }
196 if (tutor_utils()->input_old('password') !== tutor_utils()->input_old('password_confirmation')){
197 $validation_errors['password_confirmation'] = __('Confirm password does not matched with Password field', 'tutor');
198 }
199
200 if (count($validation_errors)){
201 wp_send_json_error(array('errors' => $validation_errors));
202 }
203
204 $first_name = sanitize_text_field(tutor_utils()->input_old('first_name'));
205 $last_name = sanitize_text_field(tutor_utils()->input_old('last_name'));
206 $email = sanitize_text_field(tutor_utils()->input_old('email'));
207 $user_login = sanitize_text_field(tutor_utils()->input_old('user_login'));
208 $phone_number = sanitize_text_field(tutor_utils()->input_old('phone_number'));
209 $password = sanitize_text_field(tutor_utils()->input_old('password'));
210 $tutor_profile_bio = wp_kses_post(tutor_utils()->input_old('tutor_profile_bio'));
211
212 $userdata = apply_filters('add_new_instructor_data', array(
213 'user_login' => $user_login,
214 'user_email' => $email,
215 'first_name' => $first_name,
216 'last_name' => $last_name,
217 'role' => tutor()->instructor_role,
218 'user_pass' => $password,
219 ));
220
221 do_action('tutor_add_new_instructor_before');
222
223 $user_id = wp_insert_user( $userdata ) ;
224 if ( ! is_wp_error($user_id)) {
225 update_user_meta($user_id, 'phone_number', $phone_number);
226 update_user_meta($user_id, 'description', $tutor_profile_bio);
227 update_user_meta($user_id, '_tutor_profile_bio', $tutor_profile_bio);
228 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
229 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'approved'));
230
231 do_action('tutor_add_new_instructor_after', $user_id);
232
233 wp_send_json_success(array('msg' => __('Instructor has been added successfully', 'tutor') ));
234 }
235
236 wp_send_json_error(array('errors' => $user_id));
237 }
238
239 public function instructor_approval_action(){
240 tutils()->checking_nonce();
241
242 if(!current_user_can( 'manage_options' )) {
243 wp_send_json_error( array('message' =>__('Access Denied', 'tutor')) );
244 }
245
246 $instructor_id = (int) sanitize_text_field(tutils()->array_get('instructor_id', $_POST));
247 $action = sanitize_text_field(tutils()->array_get('action_name', $_POST));
248
249 if( 'approve' === $action ) {
250 do_action('tutor_before_approved_instructor', $instructor_id);
251
252 update_user_meta($instructor_id, '_tutor_instructor_status', 'approved');
253 update_user_meta($instructor_id, '_tutor_instructor_approved', tutor_time());
254
255 $instructor = new \WP_User($instructor_id);
256 $instructor->add_role(tutor()->instructor_role);
257
258 // Send E-Mail to this user about instructor approval via hook
259 do_action('tutor_after_approved_instructor', $instructor_id);
260 }
261
262 if( 'blocked' === $action ) {
263 do_action('tutor_before_blocked_instructor', $instructor_id);
264 update_user_meta($instructor_id, '_tutor_instructor_status', 'blocked');
265
266 $instructor = new \WP_User($instructor_id);
267 $instructor->remove_role(tutor()->instructor_role);
268 do_action('tutor_after_blocked_instructor', $instructor_id);
269
270 //TODO: send E-Mail to this user about instructor blocked, should via hook
271 }
272
273 if( 'remove-instructor' === $action)
274 {
275 do_action('tutor_before_rejected_instructor', $instructor_id);
276
277 $user = new \WP_User($instructor_id);
278 $user->remove_role(tutor()->instructor_role);
279
280 tutor_utils()->remove_instructor_role($instructor_id);
281 update_user_meta($instructor_id, '_is_tutor_instructor_rejected', tutor_time());
282
283 // Send E-Mail to this user about instructor rejection via hook
284 do_action('tutor_after_rejected_instructor', $instructor_id);
285 }
286
287 wp_send_json_success();
288 }
289
290 /**
291 * Can instructor publish courses directly
292 * Fixed in Gutenberg @since v.1.5.9
293 */
294
295 public function can_publish_tutor_courses(){
296 $can_publish_course = (bool) tutor_utils()->get_option('instructor_can_publish_course');
297
298 $instructor_role = tutor()->instructor_role;
299 $instructor = get_role( $instructor_role );
300
301 if ($can_publish_course){
302 $instructor->add_cap('publish_tutor_courses');
303 }else{
304 $instructor->remove_cap('publish_tutor_courses');
305 }
306 }
307
308 }