PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.6.4
Tutor LMS – eLearning and online course solution v1.6.4
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 6 years ago Admin.php 6 years ago Ajax.php 6 years ago Assets.php 6 years ago Course.php 6 years ago Course_Settings_Tabs.php 6 years ago Course_Widget.php 6 years ago Dashboard.php 6 years ago Email.php 6 years ago FormHandler.php 6 years ago Frontend.php 6 years ago Gutenberg.php 6 years ago Instructor.php 6 years ago Instructors_List.php 6 years ago Lesson.php 6 years ago Options.php 6 years ago Post_types.php 6 years ago Q_and_A.php 6 years ago Question_Answers_List.php 6 years ago Quiz.php 6 years ago Quiz_Attempts_List.php 6 years ago RestAPI.php 6 years ago Rewrite_Rules.php 6 years ago Shortcode.php 6 years ago Student.php 6 years ago Students_List.php 6 years ago Taxonomies.php 6 years ago Template.php 6 years ago Theme_Compatibility.php 6 years ago Tools.php 6 years ago Tutor.php 6 years ago TutorEDD.php 6 years ago Tutor_Base.php 6 years ago Tutor_List_Table.php 6 years ago Tutor_Setup.php 6 years ago Upgrader.php 6 years ago User.php 6 years ago Utils.php 6 years ago Video_Stream.php 6 years ago Withdraw.php 6 years ago Withdraw_Requests_List.php 6 years ago WooCommerce.php 6 years ago
Instructor.php
272 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 foreach ($required_fields as $required_key => $required_value){
64 if (empty($_POST[$required_key])){
65 $validation_errors[$required_key] = $required_value;
66 }
67 }
68
69 if (!filter_var(tutor_utils()->input_old('email'), FILTER_VALIDATE_EMAIL)) {
70 $validation_errors['email'] = __('Valid E-Mail is required', 'tutor');
71 }
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');
74 }
75
76 if (count($validation_errors)){
77 $this->error_msgs = $validation_errors;
78 add_filter('tutor_instructor_register_validation_errors', array($this, 'tutor_instructor_form_validation_errors'));
79 return;
80 }
81
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'));
87
88 $userdata = array(
89 'user_login' => $user_login,
90 'user_email' => $email,
91 'first_name' => $first_name,
92 'last_name' => $last_name,
93 //'role' => tutor()->instructor_role,
94 'user_pass' => $password,
95 );
96
97 $user_id = wp_insert_user( $userdata ) ;
98 if ( ! is_wp_error($user_id)){
99 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
100 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'pending'));
101
102 do_action('tutor_new_instructor_after', $user_id);
103
104 $user = get_user_by( 'id', $user_id );
105 if( $user ) {
106 wp_set_current_user( $user_id, $user->user_login );
107 wp_set_auth_cookie( $user_id );
108 }
109 }else{
110 $this->error_msgs = $user_id->get_error_messages();
111 add_filter('tutor_instructor_register_validation_errors', array($this, 'tutor_instructor_form_validation_errors'));
112 return;
113 }
114
115 wp_redirect(tutor_utils()->input_old('_wp_http_referer'));
116 die();
117 }
118
119 public function tutor_instructor_form_validation_errors(){
120 return $this->error_msgs;
121 }
122
123 /**
124 *
125 * Usage for instructor applying when a user already logged in
126 *
127 * @since v.1.0.0
128 */
129 public function apply_instructor(){
130 if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_apply_instructor' ){
131 return;
132 }
133 //Checking nonce
134 tutor_utils()->checking_nonce();
135
136 $user_id = get_current_user_id();
137 if ($user_id){
138 if (tutor_utils()->is_instructor()){
139 die(__('Already applied for instructor', 'tutor'));
140 }else{
141 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
142 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'pending'));
143
144 do_action('tutor_new_instructor_after', $user_id);
145 }
146 }else{
147 die(__('Permission denied', 'tutor'));
148 }
149
150 wp_redirect(tutor_utils()->input_old('_wp_http_referer'));
151 die();
152 }
153
154
155 public function add_new_instructor(){
156 tutils()->checking_nonce();
157
158 $required_fields = apply_filters('tutor_instructor_registration_required_fields', array(
159 'first_name' => __('First name field is required', 'tutor'),
160 'last_name' => __('Last name field is required', 'tutor'),
161 'email' => __('E-Mail field is required', 'tutor'),
162 'user_login' => __('User Name field is required', 'tutor'),
163 'phone_number' => __('Phone Number field is required', 'tutor'),
164 'password' => __('Password field is required', 'tutor'),
165 'password_confirmation' => __('Password Confirmation field is required', 'tutor'),
166 ));
167
168 $validation_errors = array();
169 foreach ($required_fields as $required_key => $required_value){
170 if (empty($_POST[$required_key])){
171 $validation_errors[$required_key] = $required_value;
172 }
173 }
174
175 if (!filter_var(tutor_utils()->input_old('email'), FILTER_VALIDATE_EMAIL)) {
176 $validation_errors['email'] = __('Valid E-Mail is required', 'tutor');
177 }
178 if (tutor_utils()->input_old('password') !== tutor_utils()->input_old('password_confirmation')){
179 $validation_errors['password_confirmation'] = __('Confirm password does not matched with Password field', 'tutor');
180 }
181
182 if (count($validation_errors)){
183 wp_send_json_error(array('errors' => $validation_errors));
184 }
185
186 $first_name = sanitize_text_field(tutor_utils()->input_old('first_name'));
187 $last_name = sanitize_text_field(tutor_utils()->input_old('last_name'));
188 $email = sanitize_text_field(tutor_utils()->input_old('email'));
189 $user_login = sanitize_text_field(tutor_utils()->input_old('user_login'));
190 $phone_number = sanitize_text_field(tutor_utils()->input_old('phone_number'));
191 $password = sanitize_text_field(tutor_utils()->input_old('password'));
192 $tutor_profile_bio = wp_kses_post(tutor_utils()->input_old('tutor_profile_bio'));
193
194 $userdata = apply_filters('add_new_instructor_data', array(
195 'user_login' => $user_login,
196 'user_email' => $email,
197 'first_name' => $first_name,
198 'last_name' => $last_name,
199 'role' => tutor()->instructor_role,
200 'user_pass' => $password,
201 ));
202
203 do_action('tutor_add_new_instructor_before');
204
205 $user_id = wp_insert_user( $userdata ) ;
206 if ( ! is_wp_error($user_id)) {
207 update_user_meta($user_id, 'phone_number', $phone_number);
208 update_user_meta($user_id, 'description', $tutor_profile_bio);
209 update_user_meta($user_id, '_tutor_profile_bio', $tutor_profile_bio);
210 update_user_meta($user_id, '_is_tutor_instructor', tutor_time());
211 update_user_meta($user_id, '_tutor_instructor_status', apply_filters('tutor_initial_instructor_status', 'approved'));
212
213 do_action('tutor_add_new_instructor_after', $user_id);
214
215 wp_send_json_success(array('msg' => __('Instructor has been added successfully', 'tutor') ));
216 }
217
218 wp_send_json_error(array('errors' => $user_id));
219 }
220
221 public function instructor_approval_action(){
222 tutils()->checking_nonce();
223
224 $instructor_id = (int) sanitize_text_field(tutils()->array_get('instructor_id', $_POST));
225 $action = sanitize_text_field(tutils()->array_get('action_name', $_POST));
226
227 if( 'approve' === $action ) {
228 do_action('tutor_before_approved_instructor', $instructor_id);
229
230 update_user_meta($instructor_id, '_tutor_instructor_status', 'approved');
231 update_user_meta($instructor_id, '_tutor_instructor_approved', tutor_time());
232
233 $instructor = new \WP_User($instructor_id);
234 $instructor->add_role(tutor()->instructor_role);
235
236 //TODO: send E-Mail to this user about instructor approval, should via hook
237 do_action('tutor_after_approved_instructor', $instructor_id);
238 }
239
240 if( 'blocked' === $action ) {
241 do_action('tutor_before_blocked_instructor', $instructor_id);
242 update_user_meta($instructor_id, '_tutor_instructor_status', 'blocked');
243
244 $instructor = new \WP_User($instructor_id);
245 $instructor->remove_role(tutor()->instructor_role);
246 do_action('tutor_after_blocked_instructor', $instructor_id);
247
248 //TODO: send E-Mail to this user about instructor blocked, should via hook
249 }
250
251 wp_send_json_success();
252 }
253
254 /**
255 * Can instructor publish courses directly
256 * Fixed in Gutenberg @since v.1.5.9
257 */
258
259 public function can_publish_tutor_courses(){
260 $can_publish_course = (bool) tutor_utils()->get_option('instructor_can_publish_course');
261
262 $instructor_role = tutor()->instructor_role;
263 $instructor = get_role( $instructor_role );
264
265 if ($can_publish_course){
266 $instructor->add_cap('publish_tutor_courses');
267 }else{
268 $instructor->remove_cap('publish_tutor_courses');
269 }
270 }
271
272 }