PluginProbe
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More / 0.0.3
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More v0.0.3
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 0.0.3, at includes/Classes/Better_Payment_Handler.php

712 lines 32.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 $return_url = add_query_arg( $wp->query_vars, get_the_permalink() . '?better_payment_paypal_status=success&better_payment_widget_id=' . $widget_id );
29 $cancel_url = add_query_arg( $wp->query_vars, get_the_permalink() . '?better_payment_error_status=error&better_payment_widget_id=' . $widget_id );
30 ob_start();
31 $error_info = [
32 'business_email' => !empty($settings['better_payment_paypal_business_email'])
33 ];
34
35 ?>
36 <input type="hidden" name="return" value="<?php echo esc_url( $return_url ); ?>">
37 <input type="hidden" name="action" value="paypal_form_handle">
38 <input type="hidden" name="security" value="<?php echo wp_create_nonce( 'better-payment-paypal' ); ?>">
39 <input type="hidden" name="cancel_return" value="<?php echo esc_url( $cancel_url ); ?>">
40 <button data-paypal-info = <?php echo esc_attr(json_encode( $error_info) ) ; ?> class="button is-medium is-fullwidth better-payment-paypal-bt"><?php esc_html_e('Proceed to Payment', 'better-payment'); ?></button>
41
42 <?php
43 $paypal_button_html = ob_get_clean();
44 $paypal_button_html = apply_filters( 'better_payment/elementor/editor/paypal_button_html', $paypal_button_html, $widget_id, $settings );
45
46 echo $paypal_button_html;
47 }
48
49 /**
50 * Stripe button
51 *
52 * @since 0.0.1
53 */
54 public static function stripe_button( $widget_id = '' , $settings = []) {
55 $stripe_hidden_class = 'is-hidden';
56
57 if( !empty( $settings[ 'better_payment_form_stripe_enable' ] ) && 'yes' === $settings[ 'better_payment_form_stripe_enable' ] ){
58 $stripe_hidden_class = empty( $settings[ 'better_payment_form_paypal_enable' ] ) ? '' : $stripe_hidden_class;
59 }
60
61 ob_start();
62 ?>
63 <button class="button is-medium is-fullwidth better-payment-stripe-bt <?php echo esc_attr($stripe_hidden_class); ?>"><?php esc_html_e('Proceed to Payment', 'better-payment'); ?></button>
64 <?php
65 $stripe_button_html = ob_get_clean();
66 $stripe_button_html = apply_filters( 'better_payment/elementor/editor/stripe_button_html', $stripe_button_html, $widget_id, $settings );
67
68 echo $stripe_button_html;
69 }
70
71 /**
72 * Payment create in db
73 *
74 * @since 0.0.1
75 */
76 public static function payment_create( $data ) {
77 global $wpdb;
78 $table = "{$wpdb->prefix}better_payment";
79 $wpdb->insert( $table, $data );
80 if ( $wpdb->insert_id ) {
81 return $wpdb->insert_id;
82 } else {
83 return false;
84 }
85 }
86
87 /**
88 * Mamage response
89 *
90 * @since 0.0.1
91 */
92 public static function manage_response( $settings = [] ) {
93 $status = false;
94
95 if ( !empty( $_REQUEST[ 'better_payment_error_status' ] ) ) {
96 self::failed_message_template( $settings );
97 return $status;
98 }
99
100 if ( !empty( $_REQUEST[ 'better_payment_paypal_status' ] ) && $_REQUEST[ 'better_payment_paypal_status' ] == 'success' ) {
101 $status = self::paypal_payment_success( $settings );
102 } elseif ( !empty( $_REQUEST[ 'better_payment_stripe_status' ] ) && $_REQUEST[ 'better_payment_stripe_status' ] == 'success' ) {
103 $status = self::stripe_payment_success( $settings );
104 }
105
106 if ( $status ) {
107 self::success_message_template( $settings, $status );
108 }
109 self::remove_arg();
110
111 return $status;
112 }
113
114 /**
115 * Paypal payment success
116 *
117 * @since 0.0.1
118 */
119 public static function paypal_payment_success( $settings = [] ) {
120 $data = $_REQUEST;
121
122 if ( !empty( $data[ 'payment_status' ] ) && !empty( $data[ 'payer_id' ] ) && !empty( $data[ 'payer_status' ] ) ) {
123 global $wpdb;
124 $table = "{$wpdb->prefix}better_payment";
125 $results = $wpdb->get_row(
126 $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' ] ) )
127 );
128
129 if ( !empty( $results->id ) ) {
130 $updated = $wpdb->update(
131 $table,
132 array(
133 'transaction_id' => sanitize_text_field( $data[ 'txn_id' ] ),
134 'status' => sanitize_text_field( $data[ 'payment_status' ] ),
135 'email' => sanitize_email( $data[ 'payer_email' ] ),
136 'customer_info' => maybe_serialize( $data ),
137 ),
138 array( 'ID' => $results->id )
139 );
140
141 if ( false !== $updated ) {
142 //Send email notification
143 if (
144 ( isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
145 || ( $results->referer === 'elementor-form' )
146 ) {
147 self::better_email_notification(sanitize_text_field( $data[ 'txn_id' ] ), sanitize_email( $data[ 'payer_email' ] ), $settings, 'PayPal', $results->form_fields_info);
148 }
149
150 return sanitize_text_field( $data[ 'txn_id' ] );
151 }
152 }
153 }else if($data['better_payment_paypal_status'] === 'success'){
154 return ( isset($data[ 'txn_id' ]) && !empty( sanitize_text_field( $data[ 'txn_id' ] ) ) ) ? sanitize_text_field( $data[ 'txn_id' ] ) : __('Payment under processing!', 'better-payment');
155 }
156 return false;
157 }
158
159 /**
160 * Stripe payment success
161 *
162 * @since 0.0.1
163 */
164 public static function stripe_payment_success( $settings = [] ) {
165
166 $data = $_REQUEST;
167
168 if ( !empty( $data[ 'better_payment_stripe_id' ] ) ) {
169 global $wpdb;
170 $table = "{$wpdb->prefix}better_payment";
171 $results = $wpdb->get_row(
172 $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' ] ) )
173 );
174
175 if ( !empty( $results->obj_id ) ) {
176
177 $header = array(
178 'Authorization' => 'Basic ' . base64_encode( 'sk_test_w3EkC2jHywBiypu6a3jYutgZ:' ),
179 'Stripe-Version' => '2019-05-16',
180 );
181
182 $request = [
183 'expand' => [
184 'subscription.latest_invoice.payment_intent',
185 'payment_intent'
186 ]
187 ];
188
189 $response = wp_safe_remote_post(
190 'https://api.stripe.com/v1/checkout/sessions/' . $results->obj_id,
191 array(
192 'method' => 'GET',
193 'headers' => $header,
194 'timeout' => 70,
195 'body' => $request
196 )
197 );
198
199 if ( is_wp_error( $response ) || empty( $response[ 'body' ] ) ) {
200 return new \WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) );
201 }
202
203 $response = json_decode( $response[ 'body' ] );
204
205 if ( isset( $response->error->message ) ) {
206 return new \WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) );
207 }
208
209 $updated = $wpdb->update(
210 $table,
211 array(
212 'status' => sanitize_text_field( $response->payment_status ),
213 'email' => sanitize_email( current( $response->payment_intent->charges->data )->billing_details->email ),
214 'customer_info' => maybe_serialize( $response ),
215 ),
216 array( 'ID' => $results->id )
217 );
218
219 if ( false !== $updated ) {
220 //Send email notification
221 $better_customer_email = sanitize_email( current( $response->payment_intent->charges->data )->billing_details->email );
222 if (
223 (isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
224 || ( $results->referer === 'elementor-form' )
225 ) {
226 self::better_email_notification($results->transaction_id, $better_customer_email, $settings, 'Stripe', $results->form_fields_info);
227 }
228
229 return $results->transaction_id;
230 }
231 }
232 }
233 return false;
234 }
235
236 /**
237 * Get currency symbols
238 *
239 * @since 0.0.1
240 */
241 public static function get_currency_symbols( $currency = 'USD' ) {
242 $list = [
243 'AUD' => "$",
244 'CAD' => "$",
245 'CZK' => "Kč",
246 'DKK' => "kr",
247 'EUR' => "€",
248 'HKD' => "$",
249 'HUF' => "ft",
250 'ILS' => "₪",
251 'JPY' => "¥",
252 'MXN' => "$",
253 'NOK' => "kr",
254 'NZD' => "$",
255 'PHP' => "₱",
256 'PLN' => "zł",
257 'GBP' => "£",
258 'RUB' => "₽",
259 'SGD' => "$",
260 'SEK' => "kr",
261 'CHF' => "CHF",
262 'TWD' => "$",
263 'THB' => "฿",
264 'TRY' => "₺",
265 'USD' => "$",
266 ];
267 return !empty( $list[ $currency ] ) ? $list[ $currency ] : '$';
268 }
269
270 /**
271 * Success message template
272 *
273 * @since 0.0.1
274 */
275 public static function success_message_template( $settings = [], $tr_id = '' ) {
276 if ( empty( $tr_id ) || is_wp_error($tr_id)) {
277 return false;
278 }
279
280 $image_url = BETTER_PAYMENT_ASSETS . '/img/success.svg';
281 $show_icon = 0;
282
283 if ( !empty( $settings[ 'better_payment_form_success_message_icon' ][ 'library' ] ) ) {
284 if ( $settings[ 'better_payment_form_success_message_icon' ][ 'library' ] == 'svg' ) {
285 $image_url = $settings[ 'better_payment_form_success_message_icon' ][ 'value' ][ 'url' ];
286 } else {
287 $show_icon = 1;
288 $image_url = $settings[ 'better_payment_form_success_message_icon' ][ 'value' ];
289 }
290 }
291 ?>
292 <div class="pt140 pb140 background__grey2">
293 <div class="better-payment-payment__report better-payment-success-report">
294 <div class="report__thumb">
295 <?php if($show_icon) : ?>
296 <i class="<?php echo esc_attr($image_url); ?>"></i>
297 <?php else : ?>
298 <img src="<?php echo esc_url($image_url); ?>" alt="">
299 <?php endif; ?>
300 </div>
301 <div class="report__content">
302 <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>
303 <p class="transaction__number"><?php printf( "%s : <span 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 );; ?></p>
304 <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>
305 </div>
306 </div>
307 </div>
308 <?php
309 }
310
311
312 /**
313 * Error message template
314 *
315 * @since 0.0.1
316 */
317 public static function failed_message_template( $settings = [] ) {
318
319 $image_url = BETTER_PAYMENT_ASSETS . '/img/fail.svg';
320 $show_icon = 0;
321
322 if ( !empty( $settings[ 'better_payment_form_error_message_icon' ][ 'library' ] ) ) {
323 if ( $settings[ 'better_payment_form_error_message_icon' ][ 'library' ] == 'svg' ) {
324 $image_url = $settings[ 'better_payment_form_error_message_icon' ][ 'value' ][ 'url' ];
325 } else {
326 $show_icon = 1;
327 $image_url = $settings[ 'better_payment_form_error_message_icon' ][ 'value' ];
328 }
329 }
330 ?>
331 <div class="pb140 background__grey2">
332 <div class="better-payment-payment__report better-payment-error-report">
333 <div class="report__thumb">
334 <?php if($show_icon) : ?>
335 <i class="<?php echo esc_attr($image_url); ?>"></i>
336 <?php else : ?>
337 <img src="<?php echo esc_url($image_url); ?>" alt="">
338 <?php endif; ?>
339 </div>
340 <div class="report__content">
341 <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>
342 </div>
343 </div>
344 </div>
345 <?php
346 }
347
348 /**
349 * Remove args from url
350 *
351 * @since 0.0.1
352 */
353 public static function remove_arg() {
354 ?>
355 <script>
356
357 if(typeof params === 'undefined'){
358 let params = '';
359 }
360
361 params = new URLSearchParams(location.search);
362
363 if (params.has('better_payment_paypal_status') || params.has('better_payment_stripe_status')) {
364 params.delete('better_payment_paypal_status');
365 params.delete('better_payment_stripe_status');
366 params.delete('better_payment_widget_id');
367 params.delete('better_payment_stripe_id');
368 window.history.replaceState({}, '', `${location.pathname}?${params}`);
369 }
370 </script>
371 <?php
372 }
373
374 /**
375 * Email template
376 *
377 * @since 0.0.1
378 */
379 public static function better_email_notification($transaction_id, $customer_email, $settings, $referrer='Stripe', $form_fields_info=''){
380 //Send Email: customer and admin
381 $better_txn_id = sanitize_text_field( $transaction_id );
382 $better_cus_email = sanitize_email( $customer_email );
383 $better_payment_global_settings = Better_Payment_DB::get_settings();
384
385 $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' );
386 $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');
387 $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'] : '';
388 $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'] : '';
389 $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'] : '';
390 $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'] : '';
391 $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'] : '';
392 $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'] : '';
393 $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';
394
395 $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');
396 $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'] : '';
397 $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'] : '';
398 $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'] : '';
399 $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'] : '';
400 $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'] : '';
401 $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'] : '';
402 $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';
403
404 if(isset($settings['better_payment_email_to'])){
405 $better_payment_email_to = sanitize_email($settings['better_payment_email_to']);
406 }
407
408 if(isset($settings['better_payment_email_subject'])){
409 $better_payment_email_subject = sanitize_text_field($settings['better_payment_email_subject']);
410 }
411
412 if(isset($settings['better_payment_email_subject_customer'])){
413 $better_payment_email_subject_customer = sanitize_text_field($settings['better_payment_email_subject_customer']);
414 }
415
416 if(isset($settings['better_payment_email_content_type'])){
417 $better_payment_email_content_type = sanitize_text_field($settings['better_payment_email_content_type']);
418 }
419
420 if(isset($settings['better_payment_email_content_type_customer'])){
421 $better_payment_email_content_type_customer = sanitize_text_field($settings['better_payment_email_content_type_customer']);
422 }
423
424 $line_break = $better_payment_email_content_type == 'html' ? '<br>' : "\n";
425 $line_break_customer = $better_payment_email_content_type_customer == 'html' ? '<br>' : "\n";
426
427 global $wpdb;
428 $table = "{$wpdb->prefix}better_payment";
429 $transaction_obj = $wpdb->get_row(
430 $wpdb->prepare( "SELECT * FROM $table WHERE transaction_id=%s limit 1", sanitize_text_field( $transaction_id ) )
431 );
432
433 if(isset($settings['better_payment_email_content'])){
434 $better_payment_email_content = sanitize_text_field($settings['better_payment_email_content']);
435 $better_payment_email_content = self::better_render_email_body( $better_payment_email_content, $form_fields_info, $line_break, 'admin', $transaction_obj );
436 } else if ( !empty($better_payment_email_content) ){
437 $better_payment_email_content = self::better_render_email_body( $better_payment_email_content, $form_fields_info, $line_break, 'admin', $transaction_obj );
438 }
439
440 if(isset($settings['better_payment_email_content_customer'])){
441 $better_payment_email_content_customer = sanitize_text_field($settings['better_payment_email_content_customer']);
442 $better_payment_email_content_customer = self::better_render_email_body( $better_payment_email_content_customer, $form_fields_info, $line_break_customer, 'customer', $transaction_obj );
443 } else if ( !empty($better_payment_email_content_customer) ){
444 $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.
445 }
446
447 if(isset($settings['better_payment_email_from'])){
448 $better_payment_email_from = sanitize_email($settings['better_payment_email_from']);
449 }
450
451 if(isset($settings['better_payment_email_from_name'])){
452 $better_payment_email_from_name = sanitize_text_field($settings['better_payment_email_from_name']);
453 }
454
455 if(isset($settings['better_payment_email_reply_to'])){
456 $better_payment_email_reply_to = sanitize_email($settings['better_payment_email_reply_to']);
457 }
458
459 if(isset($settings['better_payment_email_cc'])){
460 $better_payment_email_cc = sanitize_email($settings['better_payment_email_cc']);
461 }
462
463 if(isset($settings['better_payment_email_bcc'])){
464 $better_payment_email_bcc = sanitize_email($settings['better_payment_email_bcc']);
465 }
466
467 //Customer Email
468 if(isset($settings['better_payment_email_from_customer'])){
469 $better_payment_email_from_customer = sanitize_email($settings['better_payment_email_from_customer']);
470 }
471
472 if(isset($settings['better_payment_email_from_name_customer'])){
473 $better_payment_email_from_name_customer = sanitize_text_field($settings['better_payment_email_from_name_customer']);
474 }
475
476 if(isset($settings['better_payment_email_reply_to_customer'])){
477 $better_payment_email_reply_to_customer = sanitize_email($settings['better_payment_email_reply_to_customer']);
478 }
479
480 if(isset($settings['better_payment_email_cc_customer'])){
481 $better_payment_email_cc_customer = sanitize_email($settings['better_payment_email_cc_customer']);
482 }
483
484 if(isset($settings['better_payment_email_bcc_customer'])){
485 $better_payment_email_bcc_customer = sanitize_email($settings['better_payment_email_bcc_customer']);
486 }
487
488 if($better_payment_email_content == ''){
489 $better_payment_email_content = __('New better payment transaction! ', 'better-payment');
490 }
491
492 if($better_payment_email_content_customer == ''){
493 $better_payment_email_content_customer = __('New better payment transaction! ', 'better-payment');
494 }
495
496 $better_payment_email_headers = [];
497 $better_payment_email_headers_customer = [];
498
499 if($better_payment_email_content_type == 'html'){
500 $better_payment_email_headers[] = 'Content-Type: text/html; charset=UTF-8';
501 $better_payment_email_headers_customer[] = 'Content-Type: text/html; charset=UTF-8';
502 }
503
504 if($better_payment_email_from != ''){
505 $better_payment_email_headers[] = "From: $better_payment_email_from_name <$better_payment_email_from>";
506 }
507
508 if($better_payment_email_cc != ''){
509 $better_payment_email_headers[] = "Cc: <$better_payment_email_cc>";
510 }
511
512 if($better_payment_email_bcc != ''){
513 $better_payment_email_headers[] = "BCc: $better_payment_email_bcc";
514 }
515
516 if($better_payment_email_reply_to != ''){
517 $better_payment_email_headers[] = "Reply-To: $better_payment_email_reply_to";
518 }
519
520 //Customer Email
521 if($better_payment_email_from_customer != ''){
522 $better_payment_email_headers_customer[] = "From: $better_payment_email_from_name_customer <$better_payment_email_from_customer>";
523 }
524
525 if($better_payment_email_cc_customer != ''){
526 $better_payment_email_headers_customer[] = "Cc: <$better_payment_email_cc_customer>";
527 }
528
529 if($better_payment_email_bcc_customer != ''){
530 $better_payment_email_headers_customer[] = "BCc: $better_payment_email_bcc_customer";
531 }
532
533 if($better_payment_email_reply_to_customer != ''){
534 $better_payment_email_headers_customer[] = "Reply-To: $better_payment_email_reply_to_customer";
535 }
536
537 self::send_better_email($better_cus_email, $better_payment_email_subject_customer, $better_payment_email_content_customer, $better_payment_email_headers_customer); //customer mail
538 self::send_better_email($better_payment_email_to, $better_payment_email_subject, $better_payment_email_content, $better_payment_email_headers); //admin mail
539 }
540
541 /**
542 * Sends an HTML email.
543 *
544 * @since 0.0.2
545 *
546 * @param string $to
547 * @param string $subject
548 * @param array $message
549 *
550 * @return bool false indicates mail sending failed while true doesn't gurantee that mail sent.
551 * true just indicate script processed successfully without any errors.
552 * Ref: https://developer.wordpress.org/reference/functions/wp_mail/
553 */
554 public static function send_better_email( $to, $subject, $message, $headers=[]) {
555 $response = false;
556
557 $mailValidated = filter_var($to, FILTER_VALIDATE_EMAIL);
558
559 if ($mailValidated) {
560 $response = wp_mail( $to, $subject, $message, $headers );
561 }
562
563 return $response;
564 }
565
566 /**
567 * Email body
568 *
569 *
570 * @return string
571 * @since 0.0.1
572 */
573 public static function better_render_email_body( $email_body, $form_fields_info, $line_break, $type = 'admin', $transaction_obj = null ) {
574 $transaction_id =
575 $currency =
576 $payment_date =
577 $customer_name =
578 $customer_first_name =
579 $customer_last_name =
580 $customer_middle_name =
581 $customer_sur_name =
582 $customer_full_name =
583 $customer_name_only =
584 $amount = '';
585
586 if(null !== $transaction_obj && is_object($transaction_obj)){
587 $transaction_id = $transaction_obj->transaction_id;
588 $amount = $transaction_obj->amount;
589 $currency = $transaction_obj->currency;
590 $payment_date = wp_date(get_option('date_format').' '.get_option('time_format'), strtotime($transaction_obj->payment_date));
591 }
592
593 $is_empty_email_body = empty($email_body);
594
595 $email_body = do_shortcode( $email_body );
596 $bp_form_fields_html_content = $email_body;
597
598 $bp_all_fields_shortcode = 'bp-all-fields';
599 $referer_content_page_link = '#';
600
601 $field_text = __('Field', 'better-payment');
602 $value_text = __('Entry', 'better-payment');
603
604 // $bp_form_fields_html_header = '<table style="margin-bottom: 20px; font-size: 14px; border-collapse: collapse; width: 100%;">
605 // <tr style="background-color: #6E58F7; color: #fff; display: none; ">
606 // <td style="padding: 10px; border-left: 1px solid #6E58F7; border-right: 1px solid rgba(161, 161, 161, 0.5);">
607 // '.$field_text.'
608 // </th>
609 // <td style="padding: 10px; border-left: 1px solid rgba(161, 161, 161, 0.5); border-right: 1px solid #6E58F7;">
610 // '.$value_text.'
611 // </th>
612 // </tr>';
613
614 $bp_form_fields_html_header = '<table style="margin-bottom: 20px; font-size: 14px; border-collapse: collapse; width: 100%;">';
615
616 $bp_form_fields_html_footer = "</table>";
617
618 if ( false !== strpos( $email_body, $bp_all_fields_shortcode ) ) {
619 $content = ''. $line_break;
620 $form_fields_info_arr = maybe_unserialize($form_fields_info);
621
622 foreach ( $form_fields_info_arr as $key => $field ) {
623 //Hide few fields
624 if($key === 'referer_page_id' || $key === 'referer_widget_id' || $key === 'source' || $key === 'el_form_fields') {
625 if($key === 'referer_page_id'){
626 $referer_content_page_link = !empty($field) ? get_permalink( $field ) : $referer_content_page_link;
627 }
628
629 continue;
630 }
631
632 if($key === 'first_name'){
633 $customer_first_name = $field;
634 }
635 if($key === 'last_name'){
636 $customer_last_name = $field;
637 }
638 if($key === 'middle_name'){
639 $customer_middle_name = $field;
640 }
641 if($key === 'sur_name'){
642 $customer_sur_name = $field;
643 }
644 if($key === 'full_name'){
645 $customer_full_name = $field;
646 }
647
648 if($key === 'name'){
649 $customer_name_only = $field;
650 }
651
652 $key_formatted = self::better_title_case($key);
653 if($key_formatted === 'Amount'){
654 $key_formatted = __('Paid', 'better-payment');
655 }
656
657 $content .= "<tr>
658 <td style='padding: 7px; border: 1px solid #666;'> <strong>$key_formatted</strong> </td>
659 <td style='padding: 7px; border: 1px solid #666;'> $field </td>
660 </tr>";
661 }
662
663 if($customer_first_name) {
664 $customer_name = $customer_first_name . ' ';
665 }
666 if($customer_middle_name) {
667 $customer_name .= $customer_middle_name . ' ';
668 }
669 if($customer_last_name) {
670 $customer_name .= $customer_last_name . ' ';
671 }
672 if($customer_sur_name) {
673 $customer_name .= $customer_sur_name . ' ';
674 }
675 if($customer_full_name) {
676 $customer_name .= $customer_full_name . ' ';
677 }
678 if($customer_name_only) {
679 $customer_name = $customer_name_only;
680 }
681
682 $bp_form_fields_html_body = $content;
683 $bp_form_fields_html_content = $bp_form_fields_html_header . $bp_form_fields_html_body . $bp_form_fields_html_footer ;
684 // $bp_form_fields_html_content = $bp_form_fields_html_body;
685
686 //Replace shortcode with form fields info
687 $email_body = str_replace( "[$bp_all_fields_shortcode]", $bp_form_fields_html_content, $email_body );
688 }
689
690 ob_start();
691 include BETTER_PAYMENT_ADMIN_VIEWS_PATH . "/template-email-notification.php";
692 $email_body = ob_get_contents();
693 ob_end_clean();
694
695 return $email_body;
696 }
697
698 /**
699 * String helper method
700 * helps to convert string to title case
701 *
702 * @return string
703 * @since 0.0.1
704 */
705 public static function better_title_case($string){
706 $string = str_replace('_',' ', $string);
707 $string = ucwords($string);
708 return $string;
709 }
710
711 }
712