PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.9.8
Tutor LMS – eLearning and online course solution v3.9.8
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 / models / WithdrawModel.php
tutor / models Last commit date
BaseModel.php 9 months ago BillingModel.php 1 year ago CartItemModel.php 9 months ago CartModel.php 5 months ago CouponModel.php 4 months ago CourseModel.php 3 months ago LessonModel.php 9 months ago OrderActivitiesModel.php 1 year ago OrderItemMetaModel.php 9 months ago OrderItemModel.php 9 months ago OrderMetaModel.php 1 year ago OrderModel.php 7 months ago QuizModel.php 3 months ago UserModel.php 1 year ago WithdrawModel.php 1 year ago
WithdrawModel.php
224 lines
1 <?php
2 /**
3 * Withdraw Model
4 *
5 * @package Tutor\Models
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 2.0.7
9 */
10
11 namespace Tutor\Models;
12
13 /**
14 * WithdrawModel Class
15 *
16 * @since 2.0.7
17 */
18 class WithdrawModel {
19 /**
20 * All withdraw status
21 */
22 const STATUS_PENDING = 'pending';
23 const STATUS_APPROVED = 'approved';
24 const STATUS_REJECTED = 'rejected';
25
26 /**
27 * Get withdraw summary info for an user
28 *
29 * @since 2.0.7
30 *
31 * @param int $instructor_id instructor id.
32 * @return array|object|null|void
33 */
34 public static function get_withdraw_summary( $instructor_id ) {
35 global $wpdb;
36
37 $maturity_days = tutor_utils()->get_option( 'minimum_days_for_balance_to_be_available' );
38
39 //phpcs:disable WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder
40 $data = $wpdb->get_row(
41 $wpdb->prepare(
42 "SELECT ID, display_name,
43 total_income,
44 total_withdraw,
45 (total_income-total_withdraw) current_balance,
46 total_matured,
47 total_pending,
48 greatest(0, total_matured - total_withdraw) available_for_withdraw
49
50 FROM (
51 SELECT ID,display_name,
52 COALESCE((SELECT SUM(instructor_amount) FROM {$wpdb->prefix}tutor_earnings WHERE order_status='%s' GROUP BY user_id HAVING user_id=u.ID),0) total_income,
53
54 COALESCE((
55 SELECT sum(amount) total_withdraw FROM {$wpdb->prefix}tutor_withdraws
56 WHERE status='%s'
57 GROUP BY user_id
58 HAVING user_id=u.ID
59 ),0) total_withdraw,
60
61 COALESCE((
62 SELECT sum(amount) total_pending FROM {$wpdb->prefix}tutor_withdraws
63 WHERE status='pending'
64 GROUP BY user_id
65 HAVING user_id=u.ID
66 ),0) total_pending,
67
68 COALESCE((
69 SELECT SUM(instructor_amount) FROM(
70 SELECT user_id, instructor_amount, created_at, DATEDIFF(NOW(),created_at) AS days_old FROM {$wpdb->prefix}tutor_earnings WHERE order_status='%s'
71 ) a
72 WHERE days_old >= %d
73 GROUP BY user_id
74 HAVING user_id = u.ID
75 ),0) total_matured
76
77 FROM {$wpdb->prefix}users u WHERE u.ID=%d
78
79 ) a",
80 'completed',
81 self::STATUS_APPROVED,
82 'completed',
83 $maturity_days,
84 $instructor_id
85 )
86 );
87
88 //phpcs:enable WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder
89
90 return $data;
91 }
92
93 /**
94 * Get withdrawal history
95 *
96 * @since 1.0.0
97 *
98 * @param int $user_id | optional.
99 * @param array $filter | ex: array('status' => '','date' => '', 'order' => '', 'start' => 10, 'per_page' => 10,'search' => '').
100 * @param int $start start.
101 * @param int $limit limit.
102 *
103 * @return object
104 */
105 public static function get_withdrawals_history( $user_id = 0, $filter = array(), $start = 0, $limit = 20 ) {
106 global $wpdb;
107
108 $filter = (array) $filter;
109 extract( $filter ); //phpcs:ignore WordPress.PHP.DontExtract.extract_extract
110
111 $query_by_status_sql = '';
112 $query_by_user_sql = '';
113
114 if ( ! empty( $status ) ) {
115 $status = (array) $status;
116 $status = "'" . implode( "','", $status ) . "'";
117
118 $query_by_status_sql = " AND status IN({$status}) ";
119 }
120
121 if ( $user_id ) {
122 $query_by_user_sql = " AND user_id = {$user_id} ";
123 }
124
125 // Order query @since 2.0.0.
126 $order_query = '';
127 if ( isset( $order ) && '' !== $order ) {
128 $is_valid_sql = sanitize_sql_orderby( $order );
129 if ( $is_valid_sql ) {
130 $order_query = "ORDER BY created_at {$order}";
131 }
132 } else {
133 $order_query = 'ORDER BY created_at DESC';
134 }
135
136 // Date query @since 2.0.0.
137 $date_query = '';
138 if ( isset( $date ) && '' !== $date ) {
139 $date_query = "AND DATE(created_at) = CAST( '$date' AS DATE )";
140 }
141
142 // Search query @since 2.0.0.
143 $search_term_raw = empty( $search ) ? '' : $search;
144 $search_query = '%%';
145 if ( ! empty( $search_term_raw ) ) {
146 $search_query = '%' . $wpdb->esc_like( $search_term_raw ) . '%';
147 }
148
149 //phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
150 $count = (int) $wpdb->get_var(
151 $wpdb->prepare(
152 "SELECT COUNT(withdraw_id)
153 FROM {$wpdb->prefix}tutor_withdraws withdraw_tbl
154 INNER JOIN {$wpdb->users} user_tbl
155 ON withdraw_tbl.user_id = user_tbl.ID
156 WHERE 1 = 1
157 {$query_by_user_sql}
158 {$query_by_status_sql}
159 {$date_query}
160 AND (user_tbl.display_name LIKE %s OR user_tbl.user_login LIKE %s OR user_tbl.user_nicename LIKE %s OR user_tbl.user_email = %s)
161 ",
162 $search_query,
163 $search_query,
164 $search_query,
165 $search_term_raw
166 )
167 );
168
169 $results = $wpdb->get_results(
170 $wpdb->prepare(
171 "SELECT withdraw_tbl.*,
172 user_tbl.display_name AS user_name,
173 user_tbl.user_email
174 FROM {$wpdb->prefix}tutor_withdraws withdraw_tbl
175 INNER JOIN {$wpdb->users} user_tbl
176 ON withdraw_tbl.user_id = user_tbl.ID
177 WHERE 1 = 1
178 {$query_by_user_sql}
179 {$query_by_status_sql}
180 {$date_query}
181
182 AND (user_tbl.display_name LIKE %s OR user_tbl.user_login LIKE %s OR user_tbl.user_nicename LIKE %s OR user_tbl.user_email = %s)
183 {$order_query}
184 LIMIT %d, %d
185 ",
186 $search_query,
187 $search_query,
188 $search_query,
189 $search_term_raw,
190 $start,
191 $limit
192 )
193 );
194
195 //phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
196
197 $withdraw_history = array(
198 'count' => $count ? $count : 0,
199 'results' => is_array( $results ) ? $results : array(),
200 );
201
202 return (object) $withdraw_history;
203 }
204
205 /**
206 * Get withdraw method for a specific
207 *
208 * @since 1.0.0
209 *
210 * @param int $user_id user id.
211 * @return bool|mixed
212 */
213 public static function get_user_withdraw_method( $user_id = 0 ) {
214 $user_id = tutor_utils()->get_user_id( $user_id );
215 $account = get_user_meta( $user_id, '_tutor_withdraw_method_data', true );
216
217 if ( $account ) {
218 return maybe_unserialize( $account );
219 }
220
221 return false;
222 }
223 }
224