PluginProbe
Tutor LMS – eLearning and online course solution / 1.3.5
Tutor LMS – eLearning and online course solution v1.3.5
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 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 All 191 releases
tutor / classes / Withdraw.php

Withdraw.php in Tutor LMS – eLearning and online course solution 1.3.5, at classes/Withdraw.php

261 lines 7.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Withdraw class
4 *
5 * @author: themeum
6 * @author_uri: https://themeum.com
7 * @package Tutor
8 * @since v.1.0.0
9 */
10
11 namespace TUTOR;
12
13 if ( ! defined( 'ABSPATH' ) )
14 exit;
15
16 class Withdraw {
17
18 public $available_withdraw_methods;
19 public $get_options;
20 protected $withdraw_methods;
21
22 public function __construct() {
23 $this->get_options = $this->get_options();
24 $this->withdraw_methods = $this->withdraw_methods();
25 $this->available_withdraw_methods = $this->available_withdraw_methods();
26
27 add_action('tutor_options_tutor_withdraw_withdraw_methods_before', array($this, 'withdraw_admin_options'));
28 add_action('tutor_option_save_after', array($this, 'withdraw_option_save'));
29
30 add_action('wp_ajax_tutor_save_withdraw_account', array($this, 'tutor_save_withdraw_account'));
31 add_action('wp_ajax_tutor_make_an_withdraw', array($this, 'tutor_make_an_withdraw'));
32 }
33
34 public function withdraw_methods(){
35 $methods = array(
36 'bank_transfer_withdraw' => array(
37 'method_name' => __('Bank Transfer', 'tutor'),
38 'desc' => __('Get your payment directly into your bank account', 'tutor'),
39
40 'admin_form_fields' => array(
41 'instruction' => array(
42 'type' => 'textarea',
43 'label' => __('Instruction', 'tutor'),
44 'desc' => __('Write instruction for the instructor to fill bank information', 'tutor'),
45 ),
46 ),
47
48 'form_fields' => array(
49 'account_name' => array(
50 'type' => 'text',
51 'label' => __('Account Name', 'tutor'),
52 ),
53
54 'account_number' => array(
55 'type' => 'text',
56 'label' => __('Account Number', 'tutor'),
57 ),
58
59 'bank_name' => array(
60 'type' => 'text',
61 'label' => __('Bank Name', 'tutor'),
62 ),
63 'iban' => array(
64 'type' => 'text',
65 'label' => __('IBAN', 'tutor'),
66 ),
67 'swift' => array(
68 'type' => 'text',
69 'label' => __('BIC / SWIFT', 'tutor'),
70 ),
71
72 ),
73 ),
74
75 'echeck_withdraw' => array(
76 'method_name' => __('E-Check', 'tutor'),
77
78 'form_fields' => array(
79 'physical_address' => array(
80 'type' => 'textarea',
81 'label' => __('Your Physical Address', 'tutor'),
82 'desc' => __('We will send you an E-Check to this address directly.', 'tutor'),
83 ),
84 ),
85 ),
86
87 'paypal_withdraw' => array(
88 'method_name' => __('PayPal Payment', 'tutor'),
89
90 'form_fields' => array(
91 'paypal_email' => array(
92 'type' => 'email',
93 'label' => __('PayPal E-Mail Address', 'tutor'),
94 'desc' => __('Write your paypal email address to get payout directly to your paypal account', 'tutor'),
95 ),
96
97 ),
98 ),
99
100 );
101
102 $withdraw_methods = apply_filters('tutor_withdraw_methods', $methods);
103
104 return $withdraw_methods;
105 }
106
107 /**
108 * @return mixed|array
109 *
110 * Return only enabled methods
111 */
112 public function available_withdraw_methods(){
113 $withdraw_options = $this->get_options();
114 $methods = $this->withdraw_methods();
115
116 foreach ($methods as $method_id => $method){
117 $is_enable = (bool) tutor_utils()->avalue_dot($method_id.".enabled", $withdraw_options);
118
119 if ( ! $is_enable){
120 unset($methods[$method_id]);
121 }
122 }
123
124 return $methods;
125 }
126
127 public function get_options(){
128 return (array) maybe_unserialize(get_option('tutor_withdraw_options'));
129 }
130
131 public function withdraw_admin_options(){
132 include tutor()->path.'views/options/withdraw/withdraw_admin_options_generator.php';
133 }
134
135
136 /**
137 * Save Withdraw method
138 *
139 * @since v.1.2.0
140 */
141 public function withdraw_option_save(){
142 do_action('tutor_withdraw_options_save_before');
143
144 $option = (array) isset($_POST['tutor_withdraw_options']) ? $_POST['tutor_withdraw_options'] : array();
145 $option = apply_filters('tutor_withdraw_options_input', $option);
146 update_option('tutor_withdraw_options', $option);
147
148 do_action('tutor_withdraw_options_save_after');
149 }
150
151 /**
152 * Save Withdraw Method Data
153 *
154 * @since v.1.2.0
155 */
156
157 public function tutor_save_withdraw_account(){
158 //Checking nonce
159 tutor_utils()->checking_nonce();
160
161 $user_id = get_current_user_id();
162 $post = $_POST;
163
164 $method = tutor_utils()->avalue_dot('tutor_selected_withdraw_method', $post);
165 if ( ! $method){
166 wp_send_json_error();
167 }
168
169 $method_data = tutor_utils()->avalue_dot("withdraw_method_field.".$method, $post);
170 $available_withdraw_method = tutor_withdrawal_methods();
171
172 if (tutor_utils()->count($method_data)){
173 $saved_data = array();
174 $saved_data['withdraw_method_key'] = $method;
175 $saved_data['withdraw_method_name'] = tutor_utils()->avalue_dot($method.".method_name", $available_withdraw_method);
176
177 foreach ($method_data as $input_name => $value){
178 $saved_data[$input_name]['value'] = sanitize_text_field($value);
179 $saved_data[$input_name]['label'] = tutor_utils()->avalue_dot($method.".form_fields.{$input_name}.label", $available_withdraw_method);
180 }
181
182 update_user_meta($user_id, '_tutor_withdraw_method_data', $saved_data);
183 }
184
185 $msg = apply_filters('tutor_withdraw_method_set_success_msg', __('Withdraw account has been set successfully', 'tutor'));
186 wp_send_json_success(array('msg' => $msg ));
187 }
188
189 public function tutor_make_an_withdraw(){
190 global $wpdb;
191
192 //Checking nonce
193 tutor_utils()->checking_nonce();
194
195 do_action('tutor_withdraw_before');
196
197
198 $user_id = get_current_user_id();
199 $post = $_POST;
200
201 $withdraw_amount = sanitize_text_field(tutor_utils()->avalue_dot('tutor_withdraw_amount', $post));
202
203 $earning_sum = tutor_utils()->get_earning_sum();
204 $min_withdraw = tutor_utils()->get_option('min_withdraw_amount');
205
206 $saved_withdraw_account = tutor_utils()->get_user_withdraw_method();
207 $formatted_balance = tutor_utils()->tutor_price($earning_sum->balance);
208 $formatted_min_withdraw_amount = tutor_utils()->tutor_price($min_withdraw);
209
210
211 if ( ! tutor_utils()->count($saved_withdraw_account)){
212 $no_withdraw_method = apply_filters('tutor_no_withdraw_method_msg', __('Please save withdraw method ', 'tutor') );
213 wp_send_json_error(array('msg' => $no_withdraw_method ));
214 }
215
216 if ($withdraw_amount < $min_withdraw){
217 $required_min_withdraw = apply_filters('tutor_required_min_amount_msg', sprintf(__('Minimum withdraw amount is %s %s %s ', 'tutor') , '<strong>', $formatted_min_withdraw_amount, '</strong>' ) );
218 wp_send_json_error(array('msg' => $required_min_withdraw ));
219 }
220
221 if ($earning_sum->balance < $withdraw_amount){
222 $insufficient_balence = apply_filters('tutor_withdraw_insufficient_balance_msg', sprintf(__('Insufficient balance to withdraw, your balance is %s %s %s ', 'tutor'),'<strong>', $formatted_balance, '</strong>' ) );
223
224 wp_send_json_error(array('msg' => $insufficient_balence ));
225 }
226
227
228 $date = date("Y-m-d H:i:s");
229
230 $withdraw_data = apply_filters('tutor_pre_withdraw_data', array(
231 'user_id' => $user_id,
232 'amount' => $withdraw_amount,
233 'method_data' => maybe_serialize($saved_withdraw_account),
234 'status' => 'pending',
235 'created_at' => $date,
236 ));
237
238 do_action('tutor_insert_withdraw_before', $withdraw_data);
239
240 $wpdb->insert($wpdb->prefix."tutor_withdraws", $withdraw_data);
241 $withdraw_id = $wpdb->insert_id;
242
243 do_action('tutor_insert_withdraw_after', $withdraw_id, $withdraw_data);
244
245
246 /**
247 * Getting earning and balance data again
248 */
249 $earning = tutor_utils()->get_earning_sum();
250 $new_available_balance = tutor_utils()->tutor_price($earning->balance);
251
252
253 do_action('tutor_withdraw_after');
254
255 $withdraw_successfull_msg = apply_filters('tutor_withdraw_successful_msg', __('Withdraw has been successful', 'tutor'));
256 wp_send_json_success(array('msg' => $withdraw_successfull_msg, 'available_balance' => $new_available_balance ));
257 }
258
259
260
261 }