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