PluginProbe
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More / 1.0.0
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More v1.0.0
2.4.1 2.4.0 2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.2 2.2.1 2.2.0 2.1.2 2.1.1 trunk 0.0.1 0.0.2 0.0.3 0.0.4 0.0.5 0.0.6 0.0.7 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 All 68 releases
better-payment / includes / Classes / Better_Payment_Handler.php

Better_Payment_Handler.php in Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More 1.0.0, at includes/Classes/Better_Payment_Handler.php

849 lines 39.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Better_Payment\Lite\Classes;
4
5 use Better_Payment\Lite\Admin\Better_Payment_DB;
6
7 /**
8 * Exit if accessed directly
9 */
10 if (!defined('ABSPATH')) {
11 exit;
12 }
13
14 /**
15 * The plugin handler class
16 *
17 * @since 0.0.1
18 */
19 class Better_Payment_Handler {
20
21 /**
22 * PayPal button
23 *
24 * @since 0.0.1
25 */
26 public static function paypal_button( $widget_id = '' , $settings = [] ) {
27 global $wp;
28
29 $paypal_button_text = ! empty( $settings["better_payment_form_form_buttons_paypal_button_text"] ) ? $settings["better_payment_form_form_buttons_paypal_button_text"] : __('Proceed to Payment', 'better-payment');
30 $return_url = add_query_arg( $wp->query_vars, get_the_permalink() . '?better_payment_paypal_status=success&better_payment_widget_id=' . $widget_id );
31 $cancel_url = add_query_arg( $wp->query_vars, get_the_permalink() . '?better_payment_error_status=error&better_payment_widget_id=' . $widget_id );
32
33 ob_start();
34 $error_info = [
35 'business_email' => !empty($settings['better_payment_paypal_business_email'])
36 ];
37 ?>
38 <input type="hidden" name="return" value="<?php echo esc_url( $return_url ); ?>">
39 <input type="hidden" name="action" value="paypal_form_handle">
40 <input type="hidden" name="security" value="<?php echo wp_create_nonce( 'better-payment-paypal' ); ?>">
41 <input type="hidden" name="cancel_return" value="<?php echo esc_url( $cancel_url ); ?>">
42 <button data-paypal-info = <?php echo esc_attr(json_encode( $error_info) ) ; ?> class="button is-medium is-fullwidth better-payment-paypal-bt <?php echo esc_attr( self::hide_show_payment_button_class($settings, 'paypal') ); ?>"><?php echo esc_html( $paypal_button_text ); ?></button>
43
44 <?php
45 $paypal_button_html = ob_get_clean();
46 $paypal_button_html = apply_filters( 'better_payment/elementor/editor/paypal_button_html', $paypal_button_html, $widget_id, $settings );
47
48 echo $paypal_button_html;
49 }
50
51 /**
52 * Stripe button
53 *
54 * @since 0.0.1
55 */
56 public static function stripe_button( $widget_id = '' , $settings = []) {
57 $stripe_button_text = ! empty( $settings["better_payment_form_form_buttons_stripe_button_text"] ) ? $settings["better_payment_form_form_buttons_stripe_button_text"] : __('Proceed to Payment', 'better-payment');
58
59 ob_start();
60 ?>
61 <button class="button is-medium is-fullwidth better-payment-stripe-bt <?php echo esc_attr( self::hide_show_payment_button_class($settings, 'stripe') ); ?>"><?php echo esc_html( $stripe_button_text ); ?></button>
62 <?php
63 $stripe_button_html = ob_get_clean();
64 $stripe_button_html = apply_filters( 'better_payment/elementor/editor/stripe_button_html', $stripe_button_html, $widget_id, $settings );
65
66 echo $stripe_button_html;
67 }
68
69 /**
70 * Paystack button
71 *
72 * @since 0.0.1
73 */
74 public static function paystack_button( $widget_id = '' , $settings = []) {
75 $paystack_button_text = ! empty( $settings["better_payment_form_form_buttons_paystack_button_text"] ) ? $settings["better_payment_form_form_buttons_paystack_button_text"] : __('Proceed to Payment', 'better-payment');
76
77 ob_start();
78 ?>
79 <button class="button is-medium is-fullwidth better-payment-paystack-bt <?php echo esc_attr( self::hide_show_payment_button_class($settings, 'paystack') ); ?>"><?php echo esc_html( $paystack_button_text ); ?></button>
80 <?php
81 $paystack_button_html = ob_get_clean();
82 $paystack_button_html = apply_filters( 'better_payment/elementor/editor/paystack_button_html', $paystack_button_html, $widget_id, $settings );
83
84 echo $paystack_button_html;
85 }
86
87 public static function hide_show_payment_button_class( $settings, $type = 'paypal' ){
88 $button_hidden_class = 'is-hidden';
89 $types = ['paypal', 'stripe', 'paystack'];
90
91 if( ! in_array($type, $types) ){
92 return $button_hidden_class;
93 }
94
95 $is_type_enable = ! empty( $settings[ "better_payment_form_{$type}_enable" ] ) && 'yes' === $settings[ "better_payment_form_{$type}_enable" ];
96
97 if( ! $is_type_enable ){
98 return $button_hidden_class;
99 }
100
101 $is_paypal_enable = ! empty( $settings[ "better_payment_form_paypal_enable" ] ) && 'yes' === $settings[ "better_payment_form_paypal_enable" ];
102 $is_stripe_enable = ! empty( $settings[ "better_payment_form_stripe_enable" ] ) && 'yes' === $settings[ "better_payment_form_stripe_enable" ];
103 $is_paystack_enable = ! empty( $settings[ "better_payment_form_paystack_enable" ] ) && 'yes' === $settings[ "better_payment_form_paystack_enable" ];
104
105 switch( $type ){
106 case 'paypal':
107 $button_hidden_class = '';
108 break;
109
110 case 'stripe':
111 if( ( ! $is_paypal_enable ) ){
112 $button_hidden_class = '';
113 }
114
115 break;
116
117 case 'paystack':
118 if( ( ! $is_paypal_enable ) && ( ! $is_stripe_enable ) ){
119 $button_hidden_class = '';
120 }
121 break;
122
123 default:
124 break;
125 }
126
127 return $button_hidden_class;
128 }
129
130 /**
131 * Payment create in db
132 *
133 * @since 0.0.1
134 */
135 public static function payment_create( $data ) {
136 global $wpdb;
137 $table = "{$wpdb->prefix}better_payment";
138 $wpdb->insert( $table, $data );
139 if ( $wpdb->insert_id ) {
140 return $wpdb->insert_id;
141 } else {
142 return false;
143 }
144 }
145
146 /**
147 * Mamage response
148 *
149 * @since 0.0.1
150 */
151 public static function manage_response( $settings = [], $widget_id = '' ) {
152 $status = false;
153
154 //if widget id is different then return false
155 if ( !empty( $_REQUEST[ 'better_payment_widget_id' ] ) && $_REQUEST[ 'better_payment_widget_id' ] !== $widget_id ) {
156 return $status;
157 }
158
159 if ( !empty( $_REQUEST[ 'better_payment_error_status' ] ) ) {
160 self::failed_message_template( $settings );
161 $redirection_url_error = ! empty( $settings['better_payment_form_error_page_url']['url'] ) ? esc_url( $settings['better_payment_form_error_page_url']['url'] ) : '';
162
163 if( $redirection_url_error ){
164 ?>
165 <script>
166 setTimeout(function(){
167 window.location.replace("<?php echo esc_url( $redirection_url_error ); ?>");
168 }, 2000);
169 </script>
170 <?php
171 }
172
173 return $status;
174 }
175
176 if ( !empty( $_REQUEST[ 'better_payment_paypal_status' ] ) && $_REQUEST[ 'better_payment_paypal_status' ] == 'success' ) {
177 $status = self::paypal_payment_success( $settings );
178 } elseif ( !empty( $_REQUEST[ 'better_payment_stripe_status' ] ) && $_REQUEST[ 'better_payment_stripe_status' ] == 'success' ) {
179 $status = self::stripe_payment_success( $settings );
180 } elseif ( !empty( $_REQUEST[ 'better_payment_paystack_status' ] ) && $_REQUEST[ 'better_payment_paystack_status' ] == 'success' ) {
181 $status = self::paystack_payment_success( $settings );
182 }
183
184 if ( $status ) {
185 self::success_message_template( $settings, $status );
186 $redirection_url_success = ! empty( $settings['better_payment_form_success_page_url']['url'] ) ? esc_url( $settings['better_payment_form_success_page_url']['url'] ) : '';
187
188 if( $redirection_url_success ){
189 ?>
190 <script>
191 setTimeout(function(){
192 window.location.replace("<?php echo esc_url( $redirection_url_success ); ?>");
193 }, 2000);
194 </script>
195 <?php
196 }
197 }
198 self::remove_arg();
199
200 return $status;
201 }
202
203 /**
204 * Paypal payment success
205 *
206 * @since 0.0.1
207 */
208 public static function paypal_payment_success( $settings = [] ) {
209 $data = $_REQUEST;
210
211 if ( !empty( $data[ 'payment_status' ] ) && !empty( $data[ 'payer_id' ] ) && !empty( $data[ 'payer_status' ] ) ) {
212 global $wpdb;
213 $table = "{$wpdb->prefix}better_payment";
214 $results = $wpdb->get_row(
215 $wpdb->prepare( "SELECT id,form_fields_info,referer FROM $table WHERE order_id=%s and status is NULL limit 1", sanitize_text_field( $_REQUEST[ 'item_number' ] ) )
216 );
217
218 if ( !empty( $results->id ) ) {
219 $updated = $wpdb->update(
220 $table,
221 array(
222 'transaction_id' => sanitize_text_field( $data[ 'txn_id' ] ),
223 'status' => sanitize_text_field( $data[ 'payment_status' ] ),
224 'email' => sanitize_email( $data[ 'payer_email' ] ),
225 'customer_info' => maybe_serialize( $data ),
226 ),
227 array( 'ID' => $results->id )
228 );
229
230 if ( false !== $updated ) {
231 //Send email notification
232 if (
233 ( isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
234 || ( $results->referer === 'elementor-form' )
235 ) {
236 self::better_email_notification(sanitize_text_field( $data[ 'txn_id' ] ), sanitize_email( $data[ 'payer_email' ] ), $settings, 'PayPal', $results->form_fields_info);
237 }
238
239 return sanitize_text_field( $data[ 'txn_id' ] );
240 }
241 }
242 }else if($data['better_payment_paypal_status'] === 'success'){
243 return ( isset($data[ 'txn_id' ]) && !empty( sanitize_text_field( $data[ 'txn_id' ] ) ) ) ? sanitize_text_field( $data[ 'txn_id' ] ) : __('Payment under processing!', 'better-payment');
244 }
245 return false;
246 }
247
248 /**
249 * Stripe payment success
250 *
251 * @since 0.0.1
252 */
253 public static function stripe_payment_success( $settings = [] ) {
254
255 $data = $_REQUEST;
256
257 if ( !empty( $data[ 'better_payment_stripe_id' ] ) ) {
258 global $wpdb;
259 $table = "{$wpdb->prefix}better_payment";
260 $results = $wpdb->get_row(
261 $wpdb->prepare( "SELECT id,obj_id,transaction_id,form_fields_info,referer FROM $table WHERE order_id=%s and status = 'unpaid' limit 1", sanitize_text_field( $data[ 'better_payment_stripe_id' ] ) )
262 );
263
264 if ( !empty( $results->obj_id ) && !empty( $settings[ 'better_payment_stripe_secret_key' ] ) ) {
265 $header = array(
266 'Authorization' => 'Basic ' . base64_encode( sanitize_text_field( $settings[ 'better_payment_stripe_secret_key' ] ) . ':' ),
267 'Stripe-Version' => '2019-05-16',
268 );
269
270 $request = [
271 'expand' => [
272 'subscription.latest_invoice.payment_intent',
273 'payment_intent'
274 ]
275 ];
276
277 $response = wp_safe_remote_post(
278 'https://api.stripe.com/v1/checkout/sessions/' . $results->obj_id,
279 array(
280 'method' => 'GET',
281 'headers' => $header,
282 'timeout' => 70,
283 'body' => $request
284 )
285 );
286
287 if ( is_wp_error( $response ) || empty( $response[ 'body' ] ) ) {
288 return new \WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) );
289 }
290
291 $response = json_decode( $response[ 'body' ] );
292
293 if ( isset( $response->error->message ) ) {
294 return new \WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) );
295 }
296
297 $updated = $wpdb->update(
298 $table,
299 array(
300 'status' => sanitize_text_field( $response->payment_status ),
301 'email' => sanitize_email( current( $response->payment_intent->charges->data )->billing_details->email ),
302 'customer_info' => maybe_serialize( $response ),
303 ),
304 array( 'ID' => $results->id )
305 );
306
307 if ( false !== $updated ) {
308 //Send email notification
309 $better_customer_email = sanitize_email( current( $response->payment_intent->charges->data )->billing_details->email );
310 if (
311 (isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
312 || ( $results->referer === 'elementor-form' )
313 ) {
314 self::better_email_notification($results->transaction_id, $better_customer_email, $settings, 'Stripe', $results->form_fields_info);
315 }
316
317 return $results->transaction_id;
318 }
319 }
320 }
321 return false;
322 }
323
324 /**
325 * Paystack payment success
326 *
327 * @since 0.0.1
328 */
329 public static function paystack_payment_success( $settings = [] ) {
330 $data = $_REQUEST;
331
332 if ( ! empty( $data[ 'better_payment_paystack_id' ] ) ) {
333 global $wpdb;
334 $table = "{$wpdb->prefix}better_payment";
335 $results = $wpdb->get_row(
336 $wpdb->prepare( "SELECT id,obj_id,transaction_id,form_fields_info,referer FROM $table WHERE order_id=%s and status = 'unpaid' limit 1", sanitize_text_field( $data[ 'better_payment_paystack_id' ] ) )
337 );
338
339 $header_info = array(
340 'Authorization' => 'Bearer ' . sanitize_text_field( $settings[ 'better_payment_paystack_secret_key' ] ),
341 "Cache-Control: no-cache",
342 );
343
344 $response = wp_safe_remote_get(
345 'https://api.paystack.co/transaction/verify/'. sanitize_text_field( $data[ 'reference' ] ),
346 array(
347 'headers' => $header_info,
348 'timeout' => 70,
349 )
350 );
351
352 $response = json_decode(wp_remote_retrieve_body($response));
353
354 if ( ! empty( $response->status ) ) {
355 $updated = $wpdb->update(
356 $table,
357 array(
358 'status' => ! empty( $response->data->status ) ? sanitize_text_field( $response->data->status ) : '',
359 'amount' => ! empty( $response->data->amount ) ? floatval( $response->data->amount ) : 0,
360 'obj_id' => ! empty( $response->data->id ) ? sanitize_text_field( $response->data->id ) : '',
361 'transaction_id' => ! empty( $response->data->reference ) ? sanitize_text_field( $response->data->reference ) : '',
362 'customer_info' => ! empty( $response->data->customer ) ? maybe_serialize( $response->data->customer ) : '',
363 'email' => ! empty( $response->data->customer->email ) ? sanitize_email( $response->data->customer->email ) : '',
364 ),
365 array( 'ID' => $results->id )
366 );
367 }
368
369 $better_customer_email = ! empty( $response->data->customer->email ) ? maybe_serialize( $response->data->customer->email ) : '';
370 $transaction_id = ! empty( $response->data->reference ) ? sanitize_text_field( $response->data->reference ) : '';
371
372 if ( ! empty( $updated ) && $better_customer_email ) {
373 //Send email notification
374 if (
375 (isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
376 || ( $results->referer === 'elementor-form' )
377 ) {
378 self::better_email_notification($transaction_id, $better_customer_email, $settings, 'Stripe', $results->form_fields_info);
379 }
380
381 return $transaction_id;
382 }
383 }
384 return false;
385 }
386
387 /**
388 * Get currency symbols
389 *
390 * @since 0.0.1
391 */
392 public static function get_currency_symbols( $currency = 'USD' ) {
393 $list = [
394 'AED' => "د.إ",
395 'AUD' => "$",
396 'CAD' => "$",
397 'CZK' => "Kč",
398 'DKK' => "kr",
399 'EUR' => "€",
400 'HKD' => "$",
401 'HUF' => "ft",
402 'ILS' => "₪",
403 'JPY' => "¥",
404 'MXN' => "$",
405 'NOK' => "kr",
406 'NZD' => "$",
407 'PHP' => "₱",
408 'PLN' => "zł",
409 'GBP' => "£",
410 'RUB' => "₽",
411 'SGD' => "$",
412 'SEK' => "kr",
413 'CHF' => "CHF",
414 'TWD' => "$",
415 'THB' => "฿",
416 'TRY' => "₺",
417 'USD' => "$",
418 'ZAR' => "R",
419 ];
420 return !empty( $list[ $currency ] ) ? $list[ $currency ] : '$';
421 }
422
423 /**
424 * Success message template
425 *
426 * @since 0.0.1
427 */
428 public static function success_message_template( $settings = [], $tr_id = '' ) {
429 if ( empty( $tr_id ) || is_wp_error($tr_id)) {
430 return false;
431 }
432 wp_enqueue_script('better-payment-admin-script');
433 $image_url = BETTER_PAYMENT_ASSETS . '/img/success.svg';
434 $show_icon = 0;
435
436 if ( !empty( $settings[ 'better_payment_form_success_message_icon' ][ 'library' ] ) ) {
437 if ( $settings[ 'better_payment_form_success_message_icon' ][ 'library' ] == 'svg' ) {
438 $image_url = $settings[ 'better_payment_form_success_message_icon' ][ 'value' ][ 'url' ];
439 } else {
440 $show_icon = 1;
441 $image_url = $settings[ 'better_payment_form_success_message_icon' ][ 'value' ];
442 }
443 }
444 ?>
445 <div class="pt140 pb140 background__grey2">
446 <div class="better-payment-payment__report better-payment-success-report">
447 <div class="report__thumb">
448 <?php if($show_icon) : ?>
449 <i class="<?php echo esc_attr($image_url); ?>"></i>
450 <?php else : ?>
451 <img src="<?php echo esc_url($image_url); ?>" alt="">
452 <?php endif; ?>
453 </div>
454 <div class="report__content">
455 <h3 class="transaction__success"><?php echo ( isset( $settings[ 'better_payment_form_success_message_heading' ] ) ) ? esc_html( $settings[ 'better_payment_form_success_message_heading' ] ) : __( 'Payment Successful', 'better-payment' ); ?> </h3>
456 <p class="transaction__number">
457 <?php printf( "%s : <span id='bp_copy_clipboard_input_1' class='better-payment-success-transaction-number'>%s</span>", ( isset( $settings[ 'better_payment_form_success_message_transaction' ] ) ) ? esc_html( $settings[ 'better_payment_form_success_message_transaction' ] ) : __( 'Transaction Number', 'better-payment' ), $tr_id );; ?>
458 <span id="bp_copy_clipboard_1" class="bp-icon bp-copy-square bp-copy-clipboard" title="Copy" data-bp_txn_counter="1" style="color: rgb(42, 50, 86);"></span>
459 </p>
460 <p class="payment__greeting"><?php echo ( isset( $settings[ 'better_payment_form_success_message_thanks' ] ) ) ? esc_html( $settings[ 'better_payment_form_success_message_thanks' ] ) : __( 'Thank you for your payment', 'better-payment' ); ?></p>
461 </div>
462 </div>
463 </div>
464 <?php
465 }
466
467
468 /**
469 * Error message template
470 *
471 * @since 0.0.1
472 */
473 public static function failed_message_template( $settings = [] ) {
474
475 $image_url = BETTER_PAYMENT_ASSETS . '/img/fail.svg';
476 $show_icon = 0;
477
478 if ( !empty( $settings[ 'better_payment_form_error_message_icon' ][ 'library' ] ) ) {
479 if ( $settings[ 'better_payment_form_error_message_icon' ][ 'library' ] == 'svg' ) {
480 $image_url = $settings[ 'better_payment_form_error_message_icon' ][ 'value' ][ 'url' ];
481 } else {
482 $show_icon = 1;
483 $image_url = $settings[ 'better_payment_form_error_message_icon' ][ 'value' ];
484 }
485 }
486 ?>
487 <div class="pb140 background__grey2">
488 <div class="better-payment-payment__report better-payment-error-report">
489 <div class="report__thumb">
490 <?php if($show_icon) : ?>
491 <i class="<?php echo esc_attr($image_url); ?>"></i>
492 <?php else : ?>
493 <img src="<?php echo esc_url($image_url); ?>" alt="">
494 <?php endif; ?>
495 </div>
496 <div class="report__content">
497 <h3 class="transaction__failed"><?php echo ( isset( $settings[ 'better_payment_form_error_message_heading' ] ) ) ? esc_html( $settings[ 'better_payment_form_error_message_heading' ] ) : __( 'Payment Failed', 'better-payment' ); ?></h3>
498 </div>
499 </div>
500 </div>
501 <?php
502 }
503
504 /**
505 * Remove args from url
506 *
507 * @since 0.0.1
508 */
509 public static function remove_arg() {
510 ?>
511 <script>
512
513 if(typeof params === 'undefined'){
514 let params = '';
515 }
516
517 params = new URLSearchParams(location.search);
518
519 if (params.has('better_payment_paypal_status') || params.has('better_payment_stripe_status') || params.has('better_payment_paystack_status')) {
520 params.delete('better_payment_paypal_status');
521 params.delete('better_payment_stripe_status');
522 params.delete('better_payment_paystack_status');
523 params.delete('better_payment_widget_id');
524 params.delete('better_payment_stripe_id');
525 params.delete('better_payment_paystack_id');
526 window.history.replaceState({}, '', `${location.pathname}?${params}`);
527 }
528 </script>
529 <?php
530 }
531
532 /**
533 * Email template
534 *
535 * @since 0.0.1
536 */
537 public static function better_email_notification($transaction_id, $customer_email, $settings, $referrer='Stripe', $form_fields_info=''){
538 //Send Email: customer and admin
539 $better_txn_id = sanitize_text_field( $transaction_id );
540 $better_cus_email = sanitize_email( $customer_email );
541 $better_payment_global_settings = Better_Payment_DB::get_settings();
542
543 $better_payment_email_to = !empty($better_payment_global_settings['better_payment_settings_general_email_to']) ? $better_payment_global_settings['better_payment_settings_general_email_to'] : get_option( 'admin_email' );
544 $better_payment_email_subject = !empty($better_payment_global_settings['better_payment_settings_general_email_subject']) ? $better_payment_global_settings['better_payment_settings_general_email_subject'] : __('Better Payment Transaction', 'better-payment');
545 $better_payment_email_content = !empty($better_payment_global_settings['better_payment_settings_general_email_message_admin']) ? $better_payment_global_settings['better_payment_settings_general_email_message_admin'] : '';
546 $better_payment_email_from = !empty($better_payment_global_settings['better_payment_settings_general_email_from_email']) ? $better_payment_global_settings['better_payment_settings_general_email_from_email'] : '';
547 $better_payment_email_from_name = !empty($better_payment_global_settings['better_payment_settings_general_email_from_name']) ? $better_payment_global_settings['better_payment_settings_general_email_from_name'] : '';
548 $better_payment_email_reply_to = !empty($better_payment_global_settings['better_payment_settings_general_email_reply_to']) ? $better_payment_global_settings['better_payment_settings_general_email_reply_to'] : '';
549 $better_payment_email_cc = !empty($better_payment_global_settings['better_payment_settings_general_email_cc']) ? $better_payment_global_settings['better_payment_settings_general_email_cc'] : '';
550 $better_payment_email_bcc = !empty($better_payment_global_settings['better_payment_settings_general_email_bcc']) ? $better_payment_global_settings['better_payment_settings_general_email_bcc'] : '';
551 $better_payment_email_content_type = !empty($better_payment_global_settings['better_payment_settings_general_email_send_as']) ? $better_payment_global_settings['better_payment_settings_general_email_send_as'] : 'html';
552
553 $better_payment_email_subject_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_subject_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_subject_customer'] : __('Better Payment Transaction', 'better-payment');
554 $better_payment_email_content_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_message_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_message_customer'] : '';
555 $better_payment_email_from_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_from_email_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_from_email_customer'] : '';
556 $better_payment_email_from_name_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_from_name_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_from_name_customer'] : '';
557 $better_payment_email_reply_to_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_reply_to_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_reply_to_customer'] : '';
558 $better_payment_email_cc_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_cc_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_cc_customer'] : '';
559 $better_payment_email_bcc_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_bcc_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_bcc_customer'] : '';
560 $better_payment_email_content_type_customer = !empty($better_payment_global_settings['better_payment_settings_general_email_send_as_customer']) ? $better_payment_global_settings['better_payment_settings_general_email_send_as_customer'] : 'html';
561
562 if(isset($settings['better_payment_email_to'])){
563 $better_payment_email_to = sanitize_email($settings['better_payment_email_to']);
564 }
565
566 if(isset($settings['better_payment_email_subject'])){
567 $better_payment_email_subject = sanitize_text_field($settings['better_payment_email_subject']);
568 }
569
570 if(isset($settings['better_payment_email_subject_customer'])){
571 $better_payment_email_subject_customer = sanitize_text_field($settings['better_payment_email_subject_customer']);
572 }
573
574 if(isset($settings['better_payment_email_content_type'])){
575 $better_payment_email_content_type = sanitize_text_field($settings['better_payment_email_content_type']);
576 }
577
578 if(isset($settings['better_payment_email_content_type_customer'])){
579 $better_payment_email_content_type_customer = sanitize_text_field($settings['better_payment_email_content_type_customer']);
580 }
581
582 $line_break = $better_payment_email_content_type == 'html' ? '<br>' : "\n";
583 $line_break_customer = $better_payment_email_content_type_customer == 'html' ? '<br>' : "\n";
584
585 global $wpdb;
586 $table = "{$wpdb->prefix}better_payment";
587 $transaction_obj = $wpdb->get_row(
588 $wpdb->prepare( "SELECT * FROM $table WHERE transaction_id=%s limit 1", sanitize_text_field( $transaction_id ) )
589 );
590
591 if(isset($settings['better_payment_email_content'])){
592 $better_payment_email_content = sanitize_text_field($settings['better_payment_email_content']);
593 $better_payment_email_content = self::better_render_email_body( $better_payment_email_content, $form_fields_info, $line_break, 'admin', $transaction_obj );
594 } else if ( !empty($better_payment_email_content) ){
595 $better_payment_email_content = self::better_render_email_body( $better_payment_email_content, $form_fields_info, $line_break, 'admin', $transaction_obj );
596 }
597
598 if(isset($settings['better_payment_email_content_customer'])){
599 $better_payment_email_content_customer = sanitize_text_field($settings['better_payment_email_content_customer']);
600 $better_payment_email_content_customer = self::better_render_email_body( $better_payment_email_content_customer, $form_fields_info, $line_break_customer, 'customer', $transaction_obj );
601 } else if ( !empty($better_payment_email_content_customer) ){
602 $better_payment_email_content_customer = self::better_render_email_body( $better_payment_email_content_customer, $form_fields_info, $line_break, 'customer', $transaction_obj ); //$line_break_customer not used : need to check type on parent method and add headers accordingly.
603 }
604
605 if(isset($settings['better_payment_email_from'])){
606 $better_payment_email_from = sanitize_email($settings['better_payment_email_from']);
607 }
608
609 if(isset($settings['better_payment_email_from_name'])){
610 $better_payment_email_from_name = sanitize_text_field($settings['better_payment_email_from_name']);
611 }
612
613 if(isset($settings['better_payment_email_reply_to'])){
614 $better_payment_email_reply_to = sanitize_email($settings['better_payment_email_reply_to']);
615 }
616
617 if(isset($settings['better_payment_email_cc'])){
618 $better_payment_email_cc = sanitize_email($settings['better_payment_email_cc']);
619 }
620
621 if(isset($settings['better_payment_email_bcc'])){
622 $better_payment_email_bcc = sanitize_email($settings['better_payment_email_bcc']);
623 }
624
625 //Customer Email
626 if(isset($settings['better_payment_email_from_customer'])){
627 $better_payment_email_from_customer = sanitize_email($settings['better_payment_email_from_customer']);
628 }
629
630 if(isset($settings['better_payment_email_from_name_customer'])){
631 $better_payment_email_from_name_customer = sanitize_text_field($settings['better_payment_email_from_name_customer']);
632 }
633
634 if(isset($settings['better_payment_email_reply_to_customer'])){
635 $better_payment_email_reply_to_customer = sanitize_email($settings['better_payment_email_reply_to_customer']);
636 }
637
638 if(isset($settings['better_payment_email_cc_customer'])){
639 $better_payment_email_cc_customer = sanitize_email($settings['better_payment_email_cc_customer']);
640 }
641
642 if(isset($settings['better_payment_email_bcc_customer'])){
643 $better_payment_email_bcc_customer = sanitize_email($settings['better_payment_email_bcc_customer']);
644 }
645
646 if($better_payment_email_content == ''){
647 $better_payment_email_content = __('New better payment transaction! ', 'better-payment');
648 }
649
650 if($better_payment_email_content_customer == ''){
651 $better_payment_email_content_customer = __('New better payment transaction! ', 'better-payment');
652 }
653
654 $better_payment_email_headers = [];
655 $better_payment_email_headers_customer = [];
656
657 if($better_payment_email_content_type == 'html'){
658 $better_payment_email_headers[] = 'Content-Type: text/html; charset=UTF-8';
659 $better_payment_email_headers_customer[] = 'Content-Type: text/html; charset=UTF-8';
660 }
661
662 if($better_payment_email_from != ''){
663 $better_payment_email_headers[] = "From: $better_payment_email_from_name <$better_payment_email_from>";
664 }
665
666 if($better_payment_email_cc != ''){
667 $better_payment_email_headers[] = "Cc: <$better_payment_email_cc>";
668 }
669
670 if($better_payment_email_bcc != ''){
671 $better_payment_email_headers[] = "BCc: $better_payment_email_bcc";
672 }
673
674 if($better_payment_email_reply_to != ''){
675 $better_payment_email_headers[] = "Reply-To: $better_payment_email_reply_to";
676 }
677
678 //Customer Email
679 if($better_payment_email_from_customer != ''){
680 $better_payment_email_headers_customer[] = "From: $better_payment_email_from_name_customer <$better_payment_email_from_customer>";
681 }
682
683 $form_fields_info_array = [];
684
685 if( ! empty( $form_fields_info ) ){
686 $form_fields_info_array = maybe_unserialize( $form_fields_info );
687 }
688
689 $form_fields_info_cus_email = ! empty( $form_fields_info_array['primary_email'] ) ? sanitize_email( $form_fields_info_array['primary_email'] ) : '';
690
691 if($better_payment_email_cc_customer != '' || ! empty( $form_fields_info_cus_email ) ){
692 $better_payment_email_cc_customer_multiple = implode(',', [$form_fields_info_cus_email, $better_payment_email_cc_customer]);
693 $better_payment_email_headers_customer[] = "Cc: $better_payment_email_cc_customer_multiple";
694 }
695
696 if($better_payment_email_bcc_customer != ''){
697 $better_payment_email_headers_customer[] = "BCc: $better_payment_email_bcc_customer";
698 }
699
700 if($better_payment_email_reply_to_customer != ''){
701 $better_payment_email_headers_customer[] = "Reply-To: $better_payment_email_reply_to_customer";
702 }
703
704 self::send_better_email($better_cus_email, $better_payment_email_subject_customer, $better_payment_email_content_customer, $better_payment_email_headers_customer); //customer mail
705 self::send_better_email($better_payment_email_to, $better_payment_email_subject, $better_payment_email_content, $better_payment_email_headers); //admin mail
706 }
707
708 /**
709 * Sends an HTML email.
710 *
711 * @since 0.0.2
712 *
713 * @param string $to
714 * @param string $subject
715 * @param array $message
716 *
717 * @return bool false indicates mail sending failed while true doesn't gurantee that mail sent.
718 * true just indicate script processed successfully without any errors.
719 * Ref: https://developer.wordpress.org/reference/functions/wp_mail/
720 */
721 public static function send_better_email( $to, $subject, $message, $headers=[]) {
722 $response = false;
723
724 $mailValidated = filter_var($to, FILTER_VALIDATE_EMAIL);
725
726 if ($mailValidated) {
727 $response = wp_mail( $to, $subject, $message, $headers );
728 }
729
730 return $response;
731 }
732
733 /**
734 * Email body
735 *
736 *
737 * @return string
738 * @since 0.0.1
739 */
740 public static function better_render_email_body( $email_body, $form_fields_info, $line_break, $type = 'admin', $transaction_obj = null ) {
741 $transaction_id =
742 $currency =
743 $payment_date =
744 $customer_name =
745 $customer_first_name =
746 $customer_last_name =
747 $amount = '';
748
749 if(null !== $transaction_obj && is_object($transaction_obj)){
750 $transaction_id = $transaction_obj->transaction_id;
751 $amount = $transaction_obj->amount;
752 $currency = $transaction_obj->currency;
753 $payment_date = wp_date(get_option('date_format').' '.get_option('time_format'), strtotime($transaction_obj->payment_date));
754 }
755
756 $is_empty_email_body = empty($email_body);
757
758 $email_body = do_shortcode( $email_body );
759 $bp_form_fields_html_content = $email_body;
760
761 $bp_all_fields_shortcode = 'bp-all-fields';
762 $referer_content_page_link = '#';
763
764 $field_text = __('Field', 'better-payment');
765 $value_text = __('Entry', 'better-payment');
766
767 $bp_form_fields_html_header = '<table style="margin-bottom: 20px; font-size: 14px; border-collapse: collapse; width: 100%;">';
768
769 $bp_form_fields_html_footer = "</table>";
770
771 if ( false !== strpos( $email_body, $bp_all_fields_shortcode ) ) {
772 $content = ''. $line_break;
773 $form_fields_info_arr = maybe_unserialize($form_fields_info);
774
775 foreach ( $form_fields_info_arr as $key => $field ) {
776 //Hide few fields
777 if($key === 'referer_page_id' || $key === 'referer_widget_id' || $key === 'source' || $key === 'el_form_fields') {
778 if($key === 'referer_page_id'){
779 $referer_content_page_link = !empty($field) ? get_permalink( $field ) : $referer_content_page_link;
780 }
781
782 continue;
783 }
784
785 if($key === 'primary_first_name'){
786 $key = 'first_name';
787 $customer_first_name = $field;
788 }
789 if($key === 'primary_last_name'){
790 $key = 'last_name';
791 $customer_last_name = $field;
792 }
793
794 if($key === 'primary_email'){
795 $key = 'email';
796 }
797
798 if($key === 'primary_payment_amount'){
799 $key = 'payment_amount';
800 }
801
802 $key_formatted = self::better_title_case($key);
803 if($key_formatted === 'Amount'){
804 $key_formatted = __('Paid', 'better-payment');
805 }
806
807 $content .= "<tr>
808 <td style='padding: 7px; border: 1px solid #666;'> <strong>$key_formatted</strong> </td>
809 <td style='padding: 7px; border: 1px solid #666;'> $field </td>
810 </tr>";
811 }
812
813 if($customer_first_name) {
814 $customer_name = $customer_first_name . ' ';
815 }
816 if($customer_last_name) {
817 $customer_name .= $customer_last_name . ' ';
818 }
819
820 $bp_form_fields_html_body = $content;
821 $bp_form_fields_html_content = $bp_form_fields_html_header . $bp_form_fields_html_body . $bp_form_fields_html_footer ;
822
823 //Replace shortcode with form fields info
824 $email_body = str_replace( "[$bp_all_fields_shortcode]", $bp_form_fields_html_content, $email_body );
825 }
826
827 ob_start();
828 include BETTER_PAYMENT_ADMIN_VIEWS_PATH . "/template-email-notification.php";
829 $email_body = ob_get_contents();
830 ob_end_clean();
831
832 return $email_body;
833 }
834
835 /**
836 * String helper method
837 * helps to convert string to title case
838 *
839 * @return string
840 * @since 0.0.1
841 */
842 public static function better_title_case($string){
843 $string = str_replace('_',' ', $string);
844 $string = ucwords($string);
845 return $string;
846 }
847
848 }
849