PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.8.2
Tutor LMS – eLearning and online course solution v1.8.2
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 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 / Ajax.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
Ajax.php
542 lines
1 <?php
2 namespace TUTOR;
3
4 if ( ! defined( 'ABSPATH' ) )
5 exit;
6
7 class Ajax{
8 public function __construct() {
9
10 add_action('wp_ajax_sync_video_playback', array($this, 'sync_video_playback'));
11 add_action('wp_ajax_nopriv_sync_video_playback', array($this, 'sync_video_playback_noprev'));
12 add_action('wp_ajax_tutor_place_rating', array($this, 'tutor_place_rating'));
13
14 add_action('wp_ajax_tutor_ask_question', array($this, 'tutor_ask_question'));
15 add_action('wp_ajax_tutor_add_answer', array($this, 'tutor_add_answer'));
16
17 add_action('wp_ajax_tutor_course_add_to_wishlist', array($this, 'tutor_course_add_to_wishlist'));
18 add_action('wp_ajax_nopriv_tutor_course_add_to_wishlist', array($this, 'tutor_course_add_to_wishlist'));
19
20 /**
21 * Addon Enable Disable Control
22 */
23 add_action('wp_ajax_addon_enable_disable', array($this, 'addon_enable_disable'));
24
25 /**
26 * Update Rating/review
27 * @since v.1.4.0
28 */
29 add_action('wp_ajax_tutor_load_edit_review_modal', array($this, 'tutor_load_edit_review_modal'));
30 add_action('wp_ajax_tutor_update_review_modal', array($this, 'tutor_update_review_modal'));
31
32 /**
33 * Ajax login
34 * @since v.1.6.3
35 */
36 add_action('wp_ajax_nopriv_tutor_user_login', array($this, 'process_ajax_login'));
37
38 /**
39 * Announcement
40 * @since v.1.7.9
41 */
42 add_action("wp_ajax_tutor_announcement_create", array($this,'create_or_update_annoucement'));
43 add_action("wp_ajax_tutor_announcement_delete", array($this,'delete_annoucement'));
44 }
45
46
47
48 /**
49 * Update video information and data when necessary
50 *
51 * @since v.1.0.0
52 */
53 public function sync_video_playback(){
54 tutor_utils()->checking_nonce();
55
56 $user_id = get_current_user_id();
57 $post_id = isset($_POST['post_id']) ? sanitize_text_field($_POST['post_id']) : 0;
58 $duration = sanitize_text_field($_POST['duration']);
59 $currentTime = sanitize_text_field($_POST['currentTime']);
60
61 if(!tutils()->has_enrolled_content_access('lesson', $post_id)) {
62 wp_send_json_error(array('message'=>__('Access Denied', 'tutor')));
63 exit;
64 }
65
66 /**
67 * Update posts attached video
68 */
69 $video = tutor_utils()->get_video($post_id);
70
71 if ($duration) {
72 $video['duration_sec'] = $duration; //secs
73 $video['playtime'] = tutor_utils()->playtime_string( $duration );
74 $video['runtime'] = tutor_utils()->playtime_array( $duration );
75 }
76 tutor_utils()->update_video($post_id, $video);
77
78 /**
79 * Sync Lesson Reading Info by Users
80 */
81
82 $best_watch_time = tutor_utils()->get_lesson_reading_info($post_id, $user_id, 'video_best_watched_time');
83 if ($best_watch_time < $currentTime){
84 tutor_utils()->update_lesson_reading_info($post_id, $user_id, 'video_best_watched_time', $currentTime);
85 }
86
87 if (tutor_utils()->avalue_dot('is_ended', $_POST)){
88 tutor_utils()->mark_lesson_complete($post_id);
89 }
90 exit();
91 }
92
93 public function sync_video_playback_noprev(){
94
95 }
96
97
98 public function tutor_place_rating(){
99 global $wpdb;
100
101 tutils()->checking_nonce();
102
103 $rating = sanitize_text_field(tutor_utils()->avalue_dot('rating', $_POST));
104 $course_id = sanitize_text_field(tutor_utils()->avalue_dot('course_id', $_POST));
105 $review = wp_kses_post(tutor_utils()->avalue_dot('review', $_POST));
106
107 $user_id = get_current_user_id();
108 $user = get_userdata($user_id);
109 $date = date("Y-m-d H:i:s", tutor_time());
110
111 if(!tutils()->has_enrolled_content_access('course', $course_id)) {
112 wp_send_json_error(array('message'=>__('Access Denied', 'tutor')));
113 exit;
114 }
115
116 do_action('tutor_before_rating_placed');
117
118 $previous_rating_id = $wpdb->get_var($wpdb->prepare("select comment_ID from {$wpdb->comments} WHERE comment_post_ID = %d AND user_id = %d AND comment_type = 'tutor_course_rating' LIMIT 1;", $course_id, $user_id));
119
120 $review_ID = $previous_rating_id;
121 if ( $previous_rating_id){
122 $wpdb->update( $wpdb->comments, array('comment_content' => esc_sql( $review ) ),
123 array('comment_ID' => $previous_rating_id)
124 );
125
126 $rating_info = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->commentmeta} WHERE comment_id = %d AND meta_key = 'tutor_rating'; ", $previous_rating_id));
127 if ($rating_info){
128 $wpdb->update( $wpdb->commentmeta, array('meta_value' => $rating), array('comment_id' => $previous_rating_id, 'meta_key' => 'tutor_rating') );
129 }else{
130 $wpdb->insert( $wpdb->commentmeta, array('comment_id' => $previous_rating_id, 'meta_key' => 'tutor_rating', 'meta_value' => $rating) );
131 }
132 }else{
133 $data = array(
134 'comment_post_ID' => esc_sql( $course_id ) ,
135 'comment_approved' => 'approved',
136 'comment_type' => 'tutor_course_rating',
137 'comment_date' => $date,
138 'comment_date_gmt' => get_gmt_from_date($date),
139 'user_id' => $user_id,
140 'comment_author' => $user->user_login,
141 'comment_agent' => 'TutorLMSPlugin',
142 );
143 if ($review){
144 $data['comment_content'] = $review;
145 }
146
147 $wpdb->insert($wpdb->comments, $data);
148 $comment_id = (int) $wpdb->insert_id;
149 $review_ID = $comment_id;
150
151 if ($comment_id && $rating){
152 $result = $wpdb->insert( $wpdb->commentmeta, array(
153 'comment_id' => $comment_id,
154 'meta_key' => 'tutor_rating',
155 'meta_value' => $rating
156 ) );
157
158 do_action('tutor_after_rating_placed', $comment_id);
159 }
160 }
161
162 $data = array('msg' => __('Rating placed success', 'tutor'), 'review_id' => $review_ID, 'review' => $review);
163 wp_send_json_success($data);
164 }
165
166 public function tutor_ask_question(){
167 tutor_utils()->checking_nonce();
168
169 global $wpdb;
170
171 $course_id = (int) sanitize_text_field($_POST['tutor_course_id']);
172 $question_title = sanitize_text_field($_POST['question_title']);
173 $question = wp_kses_post($_POST['question']);
174
175 if(!tutils()->has_enrolled_content_access('course', $course_id)) {
176 wp_send_json_error(array('message'=>__('Access Denied', 'tutor')));
177 exit;
178 }
179
180 if (empty($question) || empty($question_title)){
181 wp_send_json_error(__('Empty question title or body', 'tutor'));
182 }
183
184 $user_id = get_current_user_id();
185 $user = get_userdata($user_id);
186 $date = date("Y-m-d H:i:s", tutor_time());
187
188 do_action('tutor_before_add_question', $course_id);
189 $data = apply_filters('tutor_add_question_data', array(
190 'comment_post_ID' => $course_id,
191 'comment_author' => $user->user_login,
192 'comment_date' => $date,
193 'comment_date_gmt' => get_gmt_from_date($date),
194 'comment_content' => $question,
195 'comment_approved' => 'waiting_for_answer',
196 'comment_agent' => 'TutorLMSPlugin',
197 'comment_type' => 'tutor_q_and_a',
198 'user_id' => $user_id,
199 ));
200
201 $wpdb->insert($wpdb->comments, $data);
202 $comment_id = (int) $wpdb->insert_id;
203
204 if ($comment_id){
205 $result = $wpdb->insert( $wpdb->commentmeta, array(
206 'comment_id' => $comment_id,
207 'meta_key' => 'tutor_question_title',
208 'meta_value' => $question_title
209 ) );
210 }
211 do_action('tutor_after_add_question', $course_id, $comment_id);
212
213 wp_send_json_success(__('Question has been added successfully', 'tutor'));
214 }
215
216
217 public function tutor_add_answer(){
218 tutor_utils()->checking_nonce();
219 global $wpdb;
220
221 $answer = wp_kses_post($_POST['answer']);
222 if ( ! $answer){
223 wp_send_json_error(__('Please write answer', 'tutor'));
224 }
225
226 $question_id = (int) sanitize_text_field($_POST['question_id']);
227 $question = tutor_utils()->get_qa_question($question_id);
228
229 $user_id = get_current_user_id();
230 $user = get_userdata($user_id);
231 $date = date("Y-m-d H:i:s", tutor_time());
232
233 if(!tutils()->has_enrolled_content_access('question', $question_id)) {
234 wp_send_json_error(array('message'=>__('Access Denied', 'tutor')));
235 exit;
236 }
237
238 do_action('tutor_before_answer_to_question');
239 $data = apply_filters('tutor_add_answer_data', array(
240 'comment_post_ID' => $question->comment_post_ID,
241 'comment_author' => $user->user_login,
242 'comment_date' => $date,
243 'comment_date_gmt' => get_gmt_from_date($date),
244 'comment_content' => $answer,
245 'comment_approved' => 'approved',
246 'comment_agent' => 'TutorLMSPlugin',
247 'comment_type' => 'tutor_q_and_a',
248 'comment_parent' => $question_id,
249 'user_id' => $user_id,
250 ));
251
252 $wpdb->insert($wpdb->comments, $data);
253 $comment_id = (int) $wpdb->insert_id;
254 do_action('tutor_after_answer_to_question', $comment_id);
255
256 wp_send_json_success(__('Answer has been added successfully', 'tutor'));
257 }
258
259
260 public function tutor_course_add_to_wishlist(){
261 tutils()->checking_nonce();
262
263 $course_id = (int) sanitize_text_field($_POST['course_id']);
264 if ( ! is_user_logged_in()){
265 wp_send_json_error(array('redirect_to' => wp_login_url( wp_get_referer() ) ) );
266 }
267 global $wpdb;
268
269 $user_id = get_current_user_id();
270 $if_added_to_list = $wpdb->get_row($wpdb->prepare("SELECT * from {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '_tutor_course_wishlist' AND meta_value = %d;", $user_id, $course_id));
271
272 if ( $if_added_to_list){
273 $wpdb->delete($wpdb->usermeta, array('user_id' => $user_id, 'meta_key' => '_tutor_course_wishlist', 'meta_value' => $course_id ));
274 wp_send_json_success(array('status' => 'removed', 'msg' => __('Course removed from wish list', 'tutor')));
275 }else{
276 add_user_meta($user_id, '_tutor_course_wishlist', $course_id);
277 wp_send_json_success(array('status' => 'added', 'msg' => __('Course added to wish list', 'tutor')));
278 }
279 }
280
281 /**
282 * Method for enable / disable addons
283 */
284 public function addon_enable_disable(){
285
286 if(!current_user_can( 'manage_options' )) {
287 wp_send_json_error( array('message'=>__('Access Denied', 'tutor')) );
288 }
289
290 $addonsConfig = maybe_unserialize(get_option('tutor_addons_config'));
291
292 $isEnable = (bool) sanitize_text_field(tutor_utils()->avalue_dot('isEnable', $_POST));
293 $addonFieldName = sanitize_text_field(tutor_utils()->avalue_dot('addonFieldName', $_POST));
294
295 do_action('tutor_addon_before_enable_disable');
296 if ($isEnable){
297 do_action("tutor_addon_before_enable_{$addonFieldName}");
298 do_action('tutor_addon_before_enable', $addonFieldName);
299 $addonsConfig[$addonFieldName]['is_enable'] = 1;
300 update_option('tutor_addons_config', $addonsConfig);
301
302 do_action('tutor_addon_after_enable', $addonFieldName);
303 do_action("tutor_addon_after_enable_{$addonFieldName}");
304 }else{
305 do_action("tutor_addon_before_disable_{$addonFieldName}");
306 do_action('tutor_addon_before_disable', $addonFieldName);
307 $addonsConfig[$addonFieldName]['is_enable'] = 0;
308 update_option('tutor_addons_config', $addonsConfig);
309
310 do_action('tutor_addon_after_disable', $addonFieldName);
311 do_action("tutor_addon_after_disable_{$addonFieldName}");
312 }
313
314 do_action('tutor_addon_after_enable_disable');
315 wp_send_json_success();
316 }
317
318 /**
319 * Load review edit form
320 * @since v.1.4.0
321 */
322 public function tutor_load_edit_review_modal(){
323 tutor_utils()->checking_nonce();
324
325 $review_id = (int) sanitize_text_field(tutils()->array_get('review_id', $_POST));
326 $rating = tutils()->get_rating_by_id($review_id);
327
328 if(!tutils()->has_enrolled_content_access('review', $review_id)) {
329 wp_send_json_error(array('message'=>__('Access Denied', 'tutor')));
330 exit;
331 }
332
333 ob_start();
334 tutor_load_template('dashboard.reviews.edit-review-form', array('rating' => $rating));
335 $output = ob_get_clean();
336
337 wp_send_json_success(array('output' => $output));
338 }
339
340 public function tutor_update_review_modal(){
341 global $wpdb;
342
343 tutor_utils()->checking_nonce();
344
345 $review_id = (int) sanitize_text_field(tutils()->array_get('review_id', $_POST));
346 $rating = sanitize_text_field(tutor_utils()->avalue_dot('rating', $_POST));
347 $review = wp_kses_post(tutor_utils()->avalue_dot('review', $_POST));
348
349 if(!tutils()->has_enrolled_content_access('review', $review_id)) {
350 wp_send_json_error(array('message'=>__('Access Denied', 'tutor')));
351 exit;
352 }
353
354 $is_exists = $wpdb->get_var($wpdb->prepare("SELECT comment_ID from {$wpdb->comments} WHERE comment_ID=%d AND comment_type = 'tutor_course_rating' ;", $review_id));
355
356 if ( $is_exists) {
357 $wpdb->update( $wpdb->comments, array( 'comment_content' => $review ),
358 array( 'comment_ID' => $review_id )
359 );
360 $wpdb->update( $wpdb->commentmeta, array( 'meta_value' => $rating ),
361 array( 'comment_id' => $review_id, 'meta_key' => 'tutor_rating' )
362 );
363
364 do_action('tutor_after_review_update', $review_id, $is_exists);
365
366 wp_send_json_success();
367 }
368 wp_send_json_error();
369 }
370
371 /**
372 * Process ajax login
373 * @since v.1.6.3
374 */
375 public function process_ajax_login(){
376 tutils()->checking_nonce();
377
378 $username = tutils()->array_get('log', $_POST);
379 $password = tutils()->array_get('pwd', $_POST);
380 $redirect_to = tutils()->array_get('redirect_to', $_POST);
381
382 try {
383 $creds = array(
384 'user_login' => trim( wp_unslash( $username ) ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
385 'user_password' => $password, // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
386 'remember' => isset( $_POST['rememberme'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
387 );
388
389 $validation_error = new \WP_Error();
390 $validation_error = apply_filters( 'tutor_process_login_errors', $validation_error, $creds['user_login'], $creds['user_password'] );
391
392 if ( $validation_error->get_error_code() ) {
393 wp_send_json_error( '<strong>' . __( 'ERROR:', 'tutor' ) . '</strong> ' . $validation_error->get_error_message() );
394 }
395
396 if ( empty( $creds['user_login'] ) ) {
397 wp_send_json_error( '<strong>' . __( 'ERROR:', 'tutor' ) . '</strong> ' . __( 'Username is required.', 'tutor' ) );
398 }
399
400 // On multisite, ensure user exists on current site, if not add them before allowing login.
401 if ( is_multisite() ) {
402 $user_data = get_user_by( is_email( $creds['user_login'] ) ? 'email' : 'login', $creds['user_login'] );
403
404 if ( $user_data && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {
405 add_user_to_blog( get_current_blog_id(), $user_data->ID, 'customer' );
406 }
407 }
408
409 // Perform the login.
410 $user = wp_signon( apply_filters( 'tutor_login_credentials', $creds ), is_ssl() );
411
412 if ( is_wp_error( $user ) ) {
413 $message = $user->get_error_message();
414 $message = str_replace( '<strong>' . esc_html( $creds['user_login'] ) . '</strong>', '<strong>' . esc_html( $creds['user_login'] ) . '</strong>', $message );
415
416 wp_send_json_error( $message );
417 } else {
418 wp_send_json_success([
419 'redirect' => apply_filters('tutor_login_redirect_url', $redirect_to)
420 ]);
421 }
422 } catch ( \Exception $e ) {
423 wp_send_json_error( apply_filters( 'login_errors', $e->getMessage()) );
424 do_action( 'tutor_login_failed' );
425 }
426 }
427
428 /**
429 * Create/Update announcement
430 * @since v.1.7.9
431 */
432 public function create_or_update_annoucement() {
433 //prepare alert message
434 $create_success_msg = __("Announcement created successfully",'tutor');
435 $update_success_msg = __("Announcement updated successfully",'tutor');
436 $create_fail_msg = __("Announcement creation failed",'tutor');
437 $update_fail_msg = __("Announcement update failed",'tutor');
438
439 $error = array();
440 $response = array();
441 tutils()->checking_nonce();
442
443 $course_id = sanitize_text_field($_POST['tutor_announcement_course']);
444 $announcement_title = sanitize_text_field($_POST['tutor_announcement_title']);
445 $announcement_summary = sanitize_textarea_field($_POST['tutor_announcement_summary']);
446
447 if(!tutils()->can_user_manage('course', $course_id)) {
448 wp_send_json_error( array('message'=>__('Access Denied', 'tutor')) );
449 }
450
451 //set data and sanitize it
452 $form_data = array(
453 'post_type' => 'tutor_announcements',
454 'post_title' => $announcement_title,
455 'post_content' => $announcement_summary,
456 'post_parent' => $course_id,
457 'post_status' => 'publish'
458 );
459
460 if (isset($_POST['announcement_id'])) {
461 $form_data['ID'] = sanitize_text_field($_POST['announcement_id']);
462 }
463
464 //validation message set
465 if (empty($form_data['post_parent'])) {
466 $error['post_parent'] = __('Course name required','tutor');
467
468 }
469
470 if (empty($form_data['post_title'])) {
471 $error['post_title'] = __('Announcement title required','tutor');
472 }
473
474 if (empty($form_data['post_content'])) {
475 $error['post_content'] = __('Announcement summary required','tutor');
476
477 }
478
479 if (count($error)>0) {
480 $response['status'] = 'validation_error';
481 $response['message'] = $error;
482 wp_send_json($response);
483 } else {
484 //insert or update post
485 $post_id = wp_insert_post($form_data);
486 if ($post_id > 0) {
487 $announcement = get_post($post_id);
488 $action_type = sanitize_textarea_field($_POST['action_type']);
489 $response['status'] = 'success';
490 //set reponse message as per action type
491 $response['message'] = ($action_type == 'create') ? $create_success_msg : $update_success_msg;
492
493 //provide action hook
494 if (isset($_POST['tutor_notify_students']) && $_POST['tutor_notify_students']) {
495 do_action('tutor_announcements_notify_students', $post_id, $announcement, $action_type);
496 }
497
498 do_action('tutor_announcements/after/save', $post_id, $announcement);
499
500 wp_send_json($response);
501 } else {
502 //failure message
503 $response['status'] = 'fail';
504 if($_POST['action_type'] == 'create'){
505 $response['message'] = $create_fail_msg;
506 }
507 if($_POST['action_type'] == 'update'){
508 $response['message'] = $update_fail_msg;
509 }
510 wp_send_json($response);
511 }
512 }
513 }
514
515 /**
516 * Delete announcement
517 * @since v.1.7.9
518 */
519 public function delete_annoucement() {
520 $announcement_id = sanitize_text_field($_POST['announcement_id']);
521 tutils()->checking_nonce();
522
523 if(!tutils()->can_user_manage('announcement', $announcement_id)) {
524 wp_send_json_error( array('message'=>__('Access Denied', 'tutor')) );
525 }
526
527 $delete = wp_delete_post($announcement_id);
528 if ($delete) {
529 $response = array(
530 'status' => 'success',
531 'message' => __('Announcement deleted successfully','tutor')
532 );
533 wp_send_json($response);
534 } else {
535 $response = array(
536 'status' => 'fail',
537 'message' => __('Announcement delete failed','tutor')
538 );
539 wp_send_json($response);
540 }
541 }
542 }