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

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