芝麻web文件管理V1.00
编辑当前文件:/home/sditechnicalteam/socialdigivlms.com/wp-content/plugins/tutor/classes/Withdraw.php
* @link https://themeum.com * @since 1.0.0 */ namespace TUTOR; use Tutor\Models\WithdrawModel; if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Withdraw class * * @since 1.0.0 */ class Withdraw { /** * Withdraw method * * @since 1.0.0 * * @var mixed */ public $withdraw_methods; /** * Register hooks * * @since 1.0.0 */ public function __construct() { add_action( 'wp_ajax_tutor_save_withdraw_account', array( $this, 'tutor_save_withdraw_account' ) ); add_action( 'wp_ajax_tutor_make_an_withdraw', array( $this, 'tutor_make_an_withdraw' ) ); add_filter( 'tutor_withdrawal_methods_all', array( $this, 'withdraw_methods_all' ) ); add_filter( 'tutor_withdrawal_methods_available', array( $this, 'withdraw_methods_available' ) ); } /** * Available withdraw methods * * @since 1.0.0 * * @return array */ public function withdraw_methods_all() { $this->migrate_withdrawal_method_data(); $methods = array( 'bank_transfer_withdraw' => array( 'method_name' => __( 'Bank Transfer', 'tutor' ), 'image' => tutor()->url . 'assets/images/payment-bank.png', 'desc' => __( 'Get your payment directly into your bank account', 'tutor' ), 'form_fields' => array( 'account_name' => array( 'type' => 'text', 'label' => __( 'Account Name', 'tutor' ), ), 'account_number' => array( 'type' => 'text', 'label' => __( 'Account Number', 'tutor' ), ), 'bank_name' => array( 'type' => 'text', 'label' => __( 'Bank Name', 'tutor' ), ), 'iban' => array( 'type' => 'text', 'label' => __( 'IBAN', 'tutor' ), ), 'swift' => array( 'type' => 'text', 'label' => __( 'BIC / SWIFT', 'tutor' ), ), ), ), 'echeck_withdraw' => array( 'method_name' => __( 'E-Check', 'tutor' ), 'image' => tutor()->url . 'assets/images/payment-echeck.png', 'form_fields' => array( 'physical_address' => array( 'type' => 'text', 'label' => __( 'Your Physical Address', 'tutor' ), 'desc' => __( 'We will send you an E-Check to this address directly.', 'tutor' ), ), ), ), 'paypal_withdraw' => array( 'method_name' => __( 'PayPal', 'tutor' ), 'image' => tutor()->url . 'assets/images/payment-paypal.png', 'form_fields' => array( 'paypal_email' => array( 'type' => 'email', 'label' => __( 'PayPal E-Mail Address', 'tutor' ), 'desc' => __( 'We will use this email address to send the money to your Paypal account', 'tutor' ), ), ), ), ); $saved_options = (array) get_option( 'tutor_option', array() ); $withdrawal_payment_methods = $saved_options['tutor_withdrawal_methods'] ?? array(); foreach ( $methods as $key => $method ) { $methods[ $key ]['enabled'] = in_array( $key, $withdrawal_payment_methods, true ); } return apply_filters( 'tutor_withdraw_methods', $methods ); } /** * Withdraw method's tab * * @return void */ private function migrate_withdrawal_method_data() { $old_data = get_option( 'tutor_withdraw_options', null ); if ( ! $old_data ) { // Return if already migrated. return; } $withdraw_options = (array) maybe_unserialize( $old_data ); $new_methods_array = array(); foreach ( $withdraw_options as $key => $option ) { if ( is_array( $option ) ) { // Set enable state. if ( isset( $option['enabled'] ) ) { $option['enabled'] ? $new_methods_array[] = $key : 0; } // Set instruction. if ( isset( $option['instruction'] ) ) { tutor_utils()->update_option( 'tutor_' . $key . '_instruction', $option['instruction'] ); } } } // Update new. tutor_utils()->update_option( 'tutor_withdrawal_methods', $new_methods_array ); // Delete old. delete_option( 'tutor_withdraw_options' ); } /** * Return only enabled methods * * @since 1.0.0 * * @return mixed|array */ public function withdraw_methods_available() { $methods = $this->withdraw_methods_all(); $withdraw_options = tutor_utils()->get_option( 'tutor_withdrawal_methods', array() ); foreach ( $methods as $method_id => $method ) { if ( ! in_array( $method_id, $withdraw_options ) ) { // Remove the unavailable methods from array. unset( $methods[ $method_id ] ); } } return $methods; } /** * Save Withdraw Method Data * * @since 1.2.0 * * @return void send wp_json response */ public function tutor_save_withdraw_account() { // Checking nonce. tutor_utils()->checking_nonce(); //phpcs:disable WordPress.Security.NonceVerification.Missing -- nonce already verified $user_id = get_current_user_id(); $method = sanitize_text_field( tutor_utils()->avalue_dot( 'tutor_selected_withdraw_method', $_POST ) ); if ( ! $method ) { wp_send_json_error(); } $method_data = tutor_utils()->avalue_dot( 'withdraw_method_field.' . $method, $_POST ); $available_withdraw_method = $this->withdraw_methods_all(); if ( tutor_utils()->count( $method_data ) ) { $saved_data = array(); $saved_data['withdraw_method_key'] = $method; $saved_data['withdraw_method_name'] = tutor_utils()->avalue_dot( $method . '.method_name', $available_withdraw_method ); foreach ( $method_data as $input_name => $value ) { $saved_data[ $input_name ]['value'] = esc_sql( sanitize_text_field( $value ) ); $saved_data[ $input_name ]['label'] = tutor_utils()->avalue_dot( $method . ".form_fields.{$input_name}.label", $available_withdraw_method ); } update_user_meta( $user_id, '_tutor_withdraw_method_data', $saved_data ); update_user_meta( $user_id, '_tutor_withdraw_selected_method', $method ); update_user_meta( $user_id, '_tutor_withdraw_method_data_' . $method, $saved_data ); } $msg = apply_filters( 'tutor_withdraw_method_set_success_msg', __( 'Withdrawal information saved!', 'tutor' ) ); wp_send_json_success( array( 'msg' => $msg ) ); } /** * Handle withdraw request form submit * * @since 1.0.0 * * @return void */ public function tutor_make_an_withdraw() { global $wpdb; tutor_utils()->checking_nonce(); $user_id = get_current_user_id(); $withdraw_amount = Input::post( 'tutor_withdraw_amount' ); $earning_summary = WithdrawModel::get_withdraw_summary( $user_id ); $min_withdraw = tutor_utils()->get_option( 'min_withdraw_amount' ); if ( ( $earning_summary->total_pending + $withdraw_amount ) > $earning_summary->available_for_withdraw ) { wp_send_json_error( array( 'msg' => wp_sprintf( /* translators: 1: total pending withdraw request 2: available for withdraw */ __( "You have total %1\$s pending withdraw request. You can't make more than %2\$s withdraw request at a time", 'tutor' ), $earning_summary->total_pending, $earning_summary->available_for_withdraw ), ) ); } $saved_withdraw_account = WithdrawModel::get_user_withdraw_method(); $formatted_min_withdraw_amount = tutor_utils()->tutor_price( $min_withdraw ); if ( ! tutor_utils()->count( $saved_withdraw_account ) ) { $no_withdraw_method = apply_filters( 'tutor_no_withdraw_method_msg', __( 'Please save withdraw method ', 'tutor' ) ); wp_send_json_error( array( 'msg' => $no_withdraw_method ) ); } if ( ( ! is_numeric( $withdraw_amount ) && ! is_float( $withdraw_amount ) ) || $withdraw_amount < $min_withdraw ) { /* translators: 1: strong tag start 2: min withdrawal amount 3: strong tag end */ $required_min_withdraw = apply_filters( 'tutor_required_min_amount_msg', sprintf( __( 'Minimum withdrawal amount is %1$s %2$s %3$s ', 'tutor' ), '
', $formatted_min_withdraw_amount, '
' ) ); wp_send_json_error( array( 'msg' => $required_min_withdraw ) ); } if ( $earning_summary->available_for_withdraw < $withdraw_amount ) { $insufficient_balence = apply_filters( 'tutor_withdraw_insufficient_balance_msg', __( 'Insufficient balance.', 'tutor' ) ); wp_send_json_error( array( 'msg' => $insufficient_balence ) ); } $date = gmdate( 'Y-m-d H:i:s', tutor_time() ); $withdraw_data = apply_filters( 'tutor_pre_withdraw_data', array( 'user_id' => $user_id, 'amount' => $withdraw_amount, 'method_data' => maybe_serialize( $saved_withdraw_account ), 'status' => 'pending', 'created_at' => $date, ) ); $date = gmdate( 'Y-m-d H:i:s', tutor_time() ); $withdraw_data = apply_filters( 'tutor_pre_withdraw_data', array( 'user_id' => $user_id, 'amount' => $withdraw_amount, 'method_data' => maybe_serialize( $saved_withdraw_account ), 'status' => 'pending', 'created_at' => $date, ) ); do_action( 'tutor_insert_withdraw_before', $withdraw_data ); $wpdb->insert( $wpdb->prefix . 'tutor_withdraws', $withdraw_data ); $withdraw_id = $wpdb->insert_id; do_action( 'tutor_insert_withdraw_after', $withdraw_id, $withdraw_data ); /** * Getting earning and balance data again */ $earning = WithdrawModel::get_withdraw_summary( $user_id ); $new_available_balance = tutor_utils()->tutor_price( $earning->available_for_withdraw ); do_action( 'tutor_withdraw_after' ); $withdraw_successfull_msg = apply_filters( 'tutor_withdraw_successful_msg', __( 'Withdrawal Request Sent!', 'tutor' ) ); wp_send_json_success( array( 'msg' => $withdraw_successfull_msg, 'available_balance' => $new_available_balance, ) ); } }