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