芝麻web文件管理V1.00
编辑当前文件:/home/sditechnicalteam/socialdigivlms.com/wp-content/plugins/tutor/models/WithdrawModel.php
* @link https://themeum.com * @since 2.0.7 */ namespace Tutor\Models; /** * WithdrawModel Class * * @since 2.0.7 */ class WithdrawModel { /** * All withdraw status */ const STATUS_PENDING = 'pending'; const STATUS_APPROVED = 'approved'; const STATUS_REJECTED = 'rejected'; /** * Get withdraw summary info for an user * * @since 2.0.7 * * @param int $instructor_id instructor id. * @return array|object|null|void */ public static function get_withdraw_summary( $instructor_id ) { global $wpdb; $maturity_days = tutor_utils()->get_option( 'minimum_days_for_balance_to_be_available' ); //phpcs:disable WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder $data = $wpdb->get_row( $wpdb->prepare( "SELECT ID, display_name, total_income, total_withdraw, (total_income-total_withdraw) current_balance, total_matured, total_pending, greatest(0, total_matured - total_withdraw) available_for_withdraw FROM ( SELECT ID,display_name, 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, COALESCE(( SELECT sum(amount) total_withdraw FROM {$wpdb->prefix}tutor_withdraws WHERE status='%s' GROUP BY user_id HAVING user_id=u.ID ),0) total_withdraw, COALESCE(( SELECT sum(amount) total_pending FROM {$wpdb->prefix}tutor_withdraws WHERE status='pending' GROUP BY user_id HAVING user_id=u.ID ),0) total_pending, COALESCE(( SELECT SUM(instructor_amount) FROM( SELECT user_id, instructor_amount, created_at, DATEDIFF(NOW(),created_at) AS days_old FROM {$wpdb->prefix}tutor_earnings WHERE order_status='%s' ) a WHERE days_old >= %d GROUP BY user_id HAVING user_id = u.ID ),0) total_matured FROM {$wpdb->prefix}users u WHERE u.ID=%d ) a", 'completed', self::STATUS_APPROVED, 'completed', $maturity_days, $instructor_id ) ); //phpcs:enable WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder return $data; } /** * Get withdrawal history * * @since 1.0.0 * * @param int $user_id | optional. * @param array $filter | ex: array('status' => '','date' => '', 'order' => '', 'start' => 10, 'per_page' => 10,'search' => ''). * @param int $start start. * @param int $limit limit. * * @return object */ public static function get_withdrawals_history( $user_id = 0, $filter = array(), $start = 0, $limit = 20 ) { global $wpdb; $filter = (array) $filter; extract( $filter ); //phpcs:ignore WordPress.PHP.DontExtract.extract_extract $query_by_status_sql = ''; $query_by_user_sql = ''; if ( ! empty( $status ) ) { $status = (array) $status; $status = "'" . implode( "','", $status ) . "'"; $query_by_status_sql = " AND status IN({$status}) "; } if ( $user_id ) { $query_by_user_sql = " AND user_id = {$user_id} "; } // Order query @since 2.0.0. $order_query = ''; if ( isset( $order ) && '' !== $order ) { $is_valid_sql = sanitize_sql_orderby( $order ); if ( $is_valid_sql ) { $order_query = "ORDER BY created_at {$order}"; } } else { $order_query = 'ORDER BY created_at DESC'; } // Date query @since 2.0.0. $date_query = ''; if ( isset( $date ) && '' !== $date ) { $date_query = "AND DATE(created_at) = CAST( '$date' AS DATE )"; } // Search query @since 2.0.0. $search_term_raw = empty( $search ) ? '' : $search; $search_query = '%%'; if ( ! empty( $search_term_raw ) ) { $search_query = '%' . $wpdb->esc_like( $search_term_raw ) . '%'; } //phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared $count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(withdraw_id) FROM {$wpdb->prefix}tutor_withdraws withdraw_tbl INNER JOIN {$wpdb->users} user_tbl ON withdraw_tbl.user_id = user_tbl.ID WHERE 1 = 1 {$query_by_user_sql} {$query_by_status_sql} {$date_query} 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) ", $search_query, $search_query, $search_query, $search_term_raw ) ); $results = $wpdb->get_results( $wpdb->prepare( "SELECT withdraw_tbl.*, user_tbl.display_name AS user_name, user_tbl.user_email FROM {$wpdb->prefix}tutor_withdraws withdraw_tbl INNER JOIN {$wpdb->users} user_tbl ON withdraw_tbl.user_id = user_tbl.ID WHERE 1 = 1 {$query_by_user_sql} {$query_by_status_sql} {$date_query} 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) {$order_query} LIMIT %d, %d ", $search_query, $search_query, $search_query, $search_term_raw, $start, $limit ) ); //phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared $withdraw_history = array( 'count' => $count ? $count : 0, 'results' => is_array( $results ) ? $results : array(), ); return (object) $withdraw_history; } /** * Get withdraw method for a specific * * @since 1.0.0 * * @param int $user_id user id. * @return bool|mixed */ public static function get_user_withdraw_method( $user_id = 0 ) { $user_id = tutor_utils()->get_user_id( $user_id ); $account = get_user_meta( $user_id, '_tutor_withdraw_method_data', true ); if ( $account ) { return maybe_unserialize( $account ); } return false; } }