PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / trunk
Tutor LMS – eLearning and online course solution vtrunk
4.0.0 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 / Withdraw_Requests_List.php
tutor / classes Last commit date
Addons.php 10 hours ago Admin.php 10 hours ago Ajax.php 10 hours ago Announcements.php 10 hours ago Assets.php 10 hours ago Backend_Page_Trait.php 1 year ago BaseController.php 1 year ago Config.php 10 hours ago Container.php 11 months ago Course.php 10 hours ago Course_Embed.php 3 years ago Course_Filter.php 10 hours ago Course_List.php 10 hours ago Course_Settings_Tabs.php 10 hours ago Course_Widget.php 1 year ago Custom_Validation.php 10 hours ago Dashboard.php 10 hours ago Earnings.php 9 months ago FormHandler.php 10 hours ago Frontend.php 10 hours ago Gutenberg.php 1 year ago Icon.php 10 hours ago Input.php 10 hours ago Instructor.php 10 hours ago Instructors_List.php 10 hours ago Lesson.php 10 hours ago Options_V2.php 10 hours ago Permalink.php 10 hours ago Post_types.php 1 day ago Private_Course_Access.php 10 hours ago Q_And_A.php 10 hours ago Question_Answers_List.php 11 months ago Quiz.php 10 hours ago QuizBuilder.php 10 hours ago Quiz_Attempts_List.php 10 hours ago RestAPI.php 2 years ago Reviews.php 10 hours ago Rewrite_Rules.php 2 years ago SampleCourse.php 10 hours ago Shortcode.php 10 hours ago Singleton.php 1 year ago Student.php 10 hours ago Students_List.php 1 year ago Taxonomies.php 1 year ago Template.php 10 hours ago Theme_Compatibility.php 3 years ago Tools.php 1 year ago Tools_V2.php 4 weeks ago Tutor.php 10 hours ago TutorEDD.php 10 hours ago Tutor_Base.php 2 years ago Tutor_Setup.php 10 hours ago Upgrader.php 10 hours ago User.php 10 hours ago UserPreference.php 10 hours ago Utils.php 10 hours ago Video_Stream.php 3 years ago WhatsNew.php 10 months ago Withdraw.php 10 hours ago Withdraw_Requests_List.php 11 months ago WooCommerce.php 10 hours ago
Withdraw_Requests_List.php
255 lines
1 <?php
2 /**
3 * Manage withdrawals
4 *
5 * @package Tutor\Withdraw
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 1.0.0
9 */
10
11 namespace TUTOR;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16 /**
17 * Handle withdraw request logic
18 *
19 * @since 1.0.0
20 */
21 class Withdraw_Requests_List {
22 /**
23 * List page slug
24 *
25 * @since 1.0.0
26 *
27 * @var string
28 */
29 const WITHDRAW_REQUEST_LIST_PAGE = 'tutor_withdraw_requests';
30
31 /**
32 * Register hooks, resolve dependencies
33 *
34 * @since 1.0.0
35 */
36 public function __construct() {
37 /**
38 * Approve or reject withdraw request
39 */
40 add_action( 'wp_ajax_tutor_admin_withdraw_action', array( $this, 'update_withdraw_status' ) );
41 }
42
43 /**
44 * Page title fallback
45 *
46 * @since 3.5.0
47 *
48 * @param string $name Property name.
49 *
50 * @return string
51 */
52 public function __get( $name ) {
53 if ( 'page_title' === $name ) {
54 return esc_html__( 'Withdraw Requests', 'tutor' );
55 }
56 }
57
58 /**
59 * Available tabs that will visible on the right side of page navbar
60 *
61 * @since 2.0.0
62 *
63 * @param string $date withdraw request date | optional.
64 * @param string $search search by instructor name or email | optional.
65 *
66 * @return array
67 */
68 public function tabs_key_value( $date = '', $search = '' ): array {
69 $approved = self::tabs_data( 'approved', $date, $search );
70 $pending = self::tabs_data( 'pending', $date, $search );
71 $rejected = self::tabs_data( 'rejected', $date, $search );
72
73 $url = apply_filters( 'tutor_data_tab_base_url', get_pagenum_link() );
74 $tabs = array(
75 array(
76 'key' => '',
77 'title' => __( 'All', 'tutor' ),
78 'value' => $approved + $pending + $rejected,
79 'url' => $url . '&data=all',
80 ),
81 array(
82 'key' => 'approved',
83 'title' => __( 'Approved', 'tutor' ),
84 'value' => $approved,
85 'url' => $url . '&data=approved',
86 ),
87 array(
88 'key' => 'pending',
89 'title' => __( 'Pending', 'tutor' ),
90 'value' => $pending,
91 'url' => $url . '&data=pending',
92 ),
93 array(
94 'key' => 'rejected',
95 'title' => __( 'Rejected', 'tutor' ),
96 'value' => $rejected,
97 'url' => $url . '&data=rejected',
98 ),
99 );
100 return $tabs;
101 }
102
103 /**
104 * Get counted number of withdraw list by status ex: approved | pending | rejected
105 *
106 * @since 2.0.0
107 *
108 * @param string $status status required | available : (approved | pending | rejected).
109 * @param string $date withdraw request date | optional | YYYY-MM-DD.
110 * @param string $search search by instructor name or email | optional.
111 *
112 * @return int
113 */
114 public static function tabs_data( string $status, $date = '', $search = '' ): int {
115 global $wpdb;
116 $withdraw_table = $wpdb->prefix . 'tutor_withdraws';
117 $user_table = $wpdb->users;
118 $status = sanitize_text_field( $status );
119 $date = sanitize_text_field( $date );
120 $search = sanitize_text_field( $search );
121 // Prepare date query.
122 $date_query = '';
123 if ( '' !== $date ) {
124 $date_query = "AND DATE(withdraw.created_at) = CAST('{$date}' AS DATE) ";
125 }
126
127 // Prepare search query.
128 $search = '%' . $wpdb->esc_like( $search ) . '%';
129
130 $count = $wpdb->get_var(
131 $wpdb->prepare(
132 "SELECT count(*) FROM {$withdraw_table} AS withdraw
133 INNER JOIN {$user_table} AS user
134 ON user.ID = withdraw.user_id
135 WHERE withdraw.status = %s
136 {$date_query}
137 AND ( user.user_login LIKE %s OR user.user_nicename LIKE %s OR user.user_email LIKE %s OR user.display_name LIKE %s )
138 ",
139 $status,
140 $search,
141 $search,
142 $search,
143 $search
144 )
145 );
146 return $count ? $count : 0;
147 }
148
149 /**
150 * Handle ajax request for updating withdraw status | available status (approved, rejected, pending)
151 *
152 * @since 2.0.0
153 *
154 * @return string json response.
155 */
156 public function update_withdraw_status() {
157 tutor_utils()->checking_nonce();
158
159 // Check if user is privileged.
160 if ( ! current_user_can( 'administrator' ) ) {
161 wp_send_json_error( tutor_utils()->error_message() );
162 }
163
164 $status = Input::post( 'action-type', '' );
165 $withdraw_id = Input::post( 'withdraw-id', '' );
166 $reject_type = Input::post( 'reject-type', '' );
167 $reject_comment = Input::post( 'reject-comment', '' );
168
169 if ( '' === $withdraw_id ) {
170 return false;
171 } else {
172 $update = self::update( $status, $withdraw_id, $reject_type, $reject_comment );
173 return $update ? wp_send_json( true ) : false;
174 }
175 exit;
176 }
177
178 /**
179 * Update withdraw status | available status (approved, rejected, pending)
180 *
181 * @since v2.0.0
182 *
183 * @param string $status | required.
184 * @param int $withdraw_id | required.
185 * @param string $reject_type | optional.
186 * @param string $reject_comment | optional.
187 *
188 * @return bool json response.
189 */
190 public static function update( string $status, int $withdraw_id, $reject_type = '', $reject_comment = '' ): bool {
191 global $wpdb;
192 $withdraw_table = $wpdb->prefix . 'tutor_withdraws';
193 $withdraw_id = sanitize_text_field( $withdraw_id );
194 $status = sanitize_text_field( $status );
195
196 // Prepare data for update.
197 $data = array(
198 'status' => $status,
199 'updated_at' => gmdate( 'Y-m-d H:i:s' ),
200 );
201
202 // If rejected then append reject_type and comment with method_data.
203 if ( 'rejected' === $status ) {
204 $withdraw = self::get_withdraw_by_id( $withdraw_id );
205 if ( $withdraw ) {
206 $details = unserialize( $withdraw->method_data );
207
208 $details['rejects'] = array(
209 'reject_type' => sanitize_text_field( $reject_type ),
210 'reject_comment' => sanitize_text_field( $reject_comment ),
211 );
212 $data['method_data'] = maybe_serialize( $details );
213
214 // Trigger email after rejecting withdraw.
215 do_action( 'tutor_after_rejected_withdraw', $withdraw_id );
216 }
217 } else {
218 do_action( 'tutor_after_approved_withdraw', $withdraw_id );
219 }
220
221 // Update.
222 $update = $wpdb->update(
223 $withdraw_table,
224 $data,
225 array(
226 'withdraw_id' => $withdraw_id,
227 )
228 );
229 return $update ? true : false;
230 }
231
232
233 /**
234 * Get withdraw by id
235 *
236 * @since v2.0.0
237 *
238 * @param int $withdraw_id | required.
239 *
240 * @return object withdraw list.
241 */
242 public static function get_withdraw_by_id( int $withdraw_id ) {
243 global $wpdb;
244 $withdraw_table = $wpdb->prefix . 'tutor_withdraws';
245 return $wpdb->get_row(
246 $wpdb->prepare(
247 " SELECT *FROM {$withdraw_table}
248 WHERE withdraw_id = %d
249 ",
250 $withdraw_id
251 )
252 );
253 }
254 }
255