PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 2.1.6
Tutor LMS – eLearning and online course solution v2.1.6
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
CourseModel.php 3 years ago LessonModel.php 3 years ago QuizModel.php 3 years ago WithdrawModel.php 3 years ago
WithdrawModel.php
212 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,total_withdraw,
44 (total_income-total_withdraw) current_balance,
45 total_matured,
46 greatest(0, total_matured - total_withdraw) available_for_withdraw
47
48 FROM (
49 SELECT ID,display_name,
50 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,
51
52 COALESCE((
53 SELECT sum(amount) total_withdraw FROM {$wpdb->prefix}tutor_withdraws
54 WHERE status='%s'
55 GROUP BY user_id
56 HAVING user_id=u.ID
57 ),0) total_withdraw,
58
59 COALESCE((
60 SELECT SUM(instructor_amount) FROM(
61 SELECT user_id, instructor_amount, created_at, DATEDIFF(NOW(),created_at) AS days_old FROM {$wpdb->prefix}tutor_earnings WHERE order_status='%s'
62 ) a
63 WHERE days_old >= %d
64 GROUP BY user_id
65 HAVING user_id = u.ID
66 ),0) total_matured
67
68 FROM {$wpdb->prefix}users u WHERE u.ID=%d
69
70 ) a",
71 'completed',
72 self::STATUS_APPROVED,
73 'completed',
74 $maturity_days,
75 $instructor_id
76 )
77 );
78
79 //phpcs:enable WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder
80
81 return $data;
82 }
83
84 /**
85 * Get withdrawal history
86 *
87 * @since 1.0.0
88 *
89 * @param int $user_id | optional.
90 * @param array $filter | ex: array('status' => '','date' => '', 'order' => '', 'start' => 10, 'per_page' => 10,'search' => '').
91 * @param int $start start.
92 * @param int $limit limit.
93 *
94 * @return object
95 */
96 public static function get_withdrawals_history( $user_id = 0, $filter = array(), $start = 0, $limit = 20 ) {
97 global $wpdb;
98
99 $filter = (array) $filter;
100 extract( $filter ); //phpcs:ignore WordPress.PHP.DontExtract.extract_extract
101
102 $query_by_status_sql = '';
103 $query_by_user_sql = '';
104
105 if ( ! empty( $status ) ) {
106 $status = (array) $status;
107 $status = "'" . implode( "','", $status ) . "'";
108
109 $query_by_status_sql = " AND status IN({$status}) ";
110 }
111
112 if ( $user_id ) {
113 $query_by_user_sql = " AND user_id = {$user_id} ";
114 }
115
116 // Order query @since 2.0.0.
117 $order_query = '';
118 if ( isset( $order ) && '' !== $order ) {
119 $order_query = "ORDER BY created_at {$order}";
120 } else {
121 $order_query = 'ORDER BY created_at DESC';
122 }
123
124 // Date query @since 2.0.0.
125 $date_query = '';
126 if ( isset( $date ) && '' !== $date ) {
127 $date_query = "AND DATE(created_at) = CAST( '$date' AS DATE )";
128 }
129
130 // Search query @since 2.0.0.
131 $search_term_raw = empty( $search ) ? '' : $search;
132 $search_query = '%%';
133 if ( ! empty( $search_term_raw ) ) {
134 $search_query = '%' . $wpdb->esc_like( $search_term_raw ) . '%';
135 }
136
137 //phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
138 $count = (int) $wpdb->get_var(
139 $wpdb->prepare(
140 "SELECT COUNT(withdraw_id)
141 FROM {$wpdb->prefix}tutor_withdraws withdraw_tbl
142 INNER JOIN {$wpdb->users} user_tbl
143 ON withdraw_tbl.user_id = user_tbl.ID
144 WHERE 1 = 1
145 {$query_by_user_sql}
146 {$query_by_status_sql}
147 {$date_query}
148 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)
149 ",
150 $search_query,
151 $search_query,
152 $search_query,
153 $search_term_raw
154 )
155 );
156
157 $results = $wpdb->get_results(
158 $wpdb->prepare(
159 "SELECT withdraw_tbl.*,
160 user_tbl.display_name AS user_name,
161 user_tbl.user_email
162 FROM {$wpdb->prefix}tutor_withdraws withdraw_tbl
163 INNER JOIN {$wpdb->users} user_tbl
164 ON withdraw_tbl.user_id = user_tbl.ID
165 WHERE 1 = 1
166 {$query_by_user_sql}
167 {$query_by_status_sql}
168 {$date_query}
169
170 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)
171 {$order_query}
172 LIMIT %d, %d
173 ",
174 $search_query,
175 $search_query,
176 $search_query,
177 $search_term_raw,
178 $start,
179 $limit
180 )
181 );
182
183 //phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
184
185 $withdraw_history = array(
186 'count' => $count ? $count : 0,
187 'results' => is_array( $results ) ? $results : array(),
188 );
189
190 return (object) $withdraw_history;
191 }
192
193 /**
194 * Get withdraw method for a specific
195 *
196 * @since 1.0.0
197 *
198 * @param int $user_id user id.
199 * @return bool|mixed
200 */
201 public static function get_user_withdraw_method( $user_id = 0 ) {
202 $user_id = tutor_utils()->get_user_id( $user_id );
203 $account = get_user_meta( $user_id, '_tutor_withdraw_method_data', true );
204
205 if ( $account ) {
206 return maybe_unserialize( $account );
207 }
208
209 return false;
210 }
211 }
212