Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor/classes/Announcements.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * Manage Announcements
4 + *
5 + * @package Tutor
6 + * @author Themeum <support@themeum.com>
7 + * @link https://themeum.com
8 + * @since 2.0.0
9 + */
10 +
11 + namespace TUTOR;
12 +
13 + use Tutor\Helpers\QueryHelper;
14 +
15 + if ( ! defined( 'ABSPATH' ) ) {
16 + exit;
17 + }
18 + /**
19 + * Announcements class
20 + *
21 + * @since 2.0.0
22 + */
23 + class Announcements {
24 + /**
25 + * Trait for utilities
26 + *
27 + * @var $page_title
28 + */
29 +
30 + use Backend_Page_Trait;
31 +
32 + /**
33 + * Bulk Action
34 + *
35 + * @var $bulk_action
36 + */
37 + public $bulk_action = true;
38 +
39 + /**
40 + * Constructor
41 + *
42 + * @since 1.0.0
43 + * @return void
44 + */
45 + public function __construct() {
46 + /**
47 + * Handle bulk action
48 + *
49 + * @since 2.0.0
50 + */
51 + add_action( 'wp_ajax_tutor_announcement_bulk_action', array( $this, 'announcement_bulk_action' ) );
52 + }
53 +
54 + /**
55 + * Page title fallback
56 + *
57 + * @since 3.5.0
58 + *
59 + * @param string $name Property name.
60 + *
61 + * @return string
62 + */
63 + public function __get( $name ) {
64 + if ( 'page_title' === $name ) {
65 + return esc_html__( 'Announcements', 'tutor' );
66 + }
67 + }
68 +
69 +
70 + /**
71 + * Prepare bulk actions that will show on dropdown options
72 + *
73 + * @since 2.0.0
74 + * @return array
75 + */
76 + public function prepare_bulk_actions(): array {
77 + $actions = array(
78 + $this->bulk_action_default(),
79 + $this->bulk_action_delete(),
80 + );
81 + return $actions;
82 + }
83 +
84 + /**
85 + * Handle bulk action for enrollment cancel | delete
86 + *
87 + * @since 2.0.0
88 + * @return string JSON response.
89 + */
90 + public function announcement_bulk_action() {
91 + tutor_utils()->checking_nonce();
92 +
93 + // Check if user is privileged.
94 + if ( ! User::has_any_role( array( User::ADMIN, User::INSTRUCTOR ) ) ) {
95 + wp_send_json_error( tutor_utils()->error_message() );
96 + }
97 +
98 + $action = Input::post( 'bulk-action', '' );
99 + $bulk_ids = Input::post( 'bulk-ids', '' );
100 +
101 + // prevent instructor to delete admin announcement.
102 + $bulk_ids = array_filter(
103 + explode( ',', $bulk_ids ),
104 + function ( $announcement_id ) {
105 + return tutor_utils()->can_user_manage( 'announcement', $announcement_id );
106 + }
107 + );
108 + $update = self::delete_announcements( $action, implode( ',', $bulk_ids ) );
109 + return true === $update ? wp_send_json_success() : wp_send_json_error();
110 + }
111 +
112 + /**
113 + * Execute bulk action for enrolments ex: complete | cancel
114 + *
115 + * @since 2.0.0
116 + *
117 + * @param string $action hold action.
118 + * @param string $bulk_ids comma seperated ids.
119 + *
120 + * @return bool
121 + */
122 + public static function delete_announcements( $action, $bulk_ids ): bool {
123 + $ids = array_map( 'intval', explode( ',', $bulk_ids ) );
124 + $in_clause = QueryHelper::prepare_in_clause( $ids );
125 +
126 + if ( 'delete' === $action ) {
127 + global $wpdb;
128 + $post_table = $wpdb->posts;
129 + $delete = $wpdb->query(
130 + $wpdb->prepare(
131 + "DELETE FROM {$post_table} WHERE ID IN ($in_clause)" //phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
132 + )
133 + );
134 + return false === $delete ? false : true;
135 + }
136 + return false;
137 + }
138 + }
139 +