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

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