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

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