query_vars, get_the_permalink() . '?better_payment_paypal_status=success&better_payment_widget_id=' . $widget_id );
$cancel_url = add_query_arg( $wp->query_vars, get_the_permalink() . '?better_payment_error_status=error&better_payment_widget_id=' . $widget_id );
ob_start();
$error_info = [
'business_email' => !empty($settings['better_payment_paypal_business_email'])
];
?>
bp_allowed_tags() );
}
/**
* Paystack button
*
* @since 0.0.1
*/
public static function paystack_button( $widget_id = '' , $settings = [], $args = [] ) {
$args['extra_classes'] = ! empty( $args['extra_classes'] ) ? $args['extra_classes'] : '';
$args['extra_classes'] = is_array($args['extra_classes']) ? implode(' ', $args['extra_classes']) : $args['extra_classes'];
$args['button_text_default'] = ! empty( $args['button_text_default'] ) ? sanitize_text_field( $args['button_text_default'] ) : 'Proceed to Payment';
$paystack_button_text = ! empty( $settings["better_payment_form_form_buttons_paystack_button_text"] ) ? sanitize_text_field( $settings["better_payment_form_form_buttons_paystack_button_text"] ) : __( $args['button_text_default'], 'better-payment' );
ob_start();
?>
bp_allowed_tags() );
}
public static function hide_show_payment_button_class( $settings, $type = 'paypal' ){
$button_hidden_class = 'is-hidden';
$types = ['paypal', 'stripe', 'paystack'];
if( ! in_array($type, $types) ){
return $button_hidden_class;
}
$is_type_enable = ! empty( $settings[ "better_payment_form_{$type}_enable" ] ) && 'yes' === $settings[ "better_payment_form_{$type}_enable" ];
if( ! $is_type_enable ){
return $button_hidden_class;
}
$is_paypal_enable = ! empty( $settings[ "better_payment_form_paypal_enable" ] ) && 'yes' === $settings[ "better_payment_form_paypal_enable" ];
$is_stripe_enable = ! empty( $settings[ "better_payment_form_stripe_enable" ] ) && 'yes' === $settings[ "better_payment_form_stripe_enable" ];
$is_paystack_enable = ! empty( $settings[ "better_payment_form_paystack_enable" ] ) && 'yes' === $settings[ "better_payment_form_paystack_enable" ];
switch( $type ){
case 'paypal':
$button_hidden_class = '';
break;
case 'stripe':
if( ( ! $is_paypal_enable ) ){
$button_hidden_class = '';
}
break;
case 'paystack':
if( ( ! $is_paypal_enable ) && ( ! $is_stripe_enable ) ){
$button_hidden_class = '';
}
break;
default:
break;
}
return $button_hidden_class;
}
/**
* Payment create in db
*
* @since 0.0.1
*/
public static function payment_create( $data ) {
global $wpdb;
$table = "{$wpdb->prefix}better_payment";
$wpdb->insert( $table, $data );
if ( $wpdb->insert_id ) {
return $wpdb->insert_id;
} else {
return false;
}
}
/**
* Mamage response
*
* @since 0.0.1
*/
public static function manage_response( $settings = [], $widget_id = '' ) {
$status = false;
//if widget id is different then return false
if ( !empty( $_REQUEST[ 'better_payment_widget_id' ] ) && $_REQUEST[ 'better_payment_widget_id' ] !== $widget_id ) {
return $status;
}
if ( !empty( $_REQUEST[ 'better_payment_error_status' ] ) ) {
// Determine order_id based on payment method
$order_id = '';
if ( !empty( $_REQUEST['better_payment_stripe_id'] ) ) {
$order_id = sanitize_text_field( $_REQUEST['better_payment_stripe_id'] );
} elseif ( !empty( $_REQUEST['better_payment_paystack_id'] ) ) {
$order_id = sanitize_text_field( $_REQUEST['better_payment_paystack_id'] );
} elseif ( !empty( $_REQUEST['better_payment_paypal_id'] ) ) {
$order_id = sanitize_text_field( $_REQUEST['better_payment_paypal_id'] );
}
// Fetch transaction data from database
$transaction_data = self::get_failed_transaction_data( $order_id );
self::failed_message_template( $settings, $transaction_data );
$redirection_url_error = ! empty( $settings['better_payment_form_error_page_url']['url'] ) ? esc_url( $settings['better_payment_form_error_page_url']['url'] ) : '';
if( $redirection_url_error ){
?>
! empty( $data['payment_gross'] ) ? floatval( $data['payment_gross'] ) : 0,
'email' => ! empty( $data['payer_email'] ) ? sanitize_email( $data['payer_email'] ) : '',
'transaction_id' => ! empty( $data[ 'txn_id' ] ) ? sanitize_text_field( $data[ 'txn_id' ] ) : '',
'currency' => ! empty( $data['mc_currency'] ) ? sanitize_text_field( $data['mc_currency'] ) : __( 'USD', 'better-payment' ),
'method' => 'paypal',
];
if ( !empty( $data[ 'payment_status' ] ) && !empty( $data[ 'payer_id' ] ) && !empty( $data[ 'payer_status' ] ) ) {
global $wpdb;
$table = "{$wpdb->prefix}better_payment";
$results = $wpdb->get_row(
$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' ] ) )
);
if ( !empty( $results->id ) ) {
$updated = $wpdb->update(
$table,
array(
'transaction_id' => sanitize_text_field( $data[ 'txn_id' ] ),
'status' => sanitize_text_field( $data[ 'payment_status' ] ),
'email' => sanitize_email( $data[ 'payer_email' ] ),
'customer_info' => maybe_serialize( $data ),
),
array( 'ID' => $results->id )
);
if ( false !== $updated ) {
//Send email notification
if (
( isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
|| ( $results->referer === 'elementor-form' )
) {
$is_elementor_form = ! empty( $results->referer ) && $results->referer === 'elementor-form' ? 1 : 0;
self::better_email_notification(sanitize_text_field( $data[ 'txn_id' ] ), sanitize_email( $data[ 'payer_email' ] ), $settings, 'PayPal', $results->form_fields_info, $is_elementor_form);
}
return $frontend_data;
}
}
}else if($data['better_payment_paypal_status'] === 'success'){
return ( isset($data[ 'txn_id' ]) && !empty( sanitize_text_field( $data[ 'txn_id' ] ) ) ) ? $frontend_data : __('Payment under processing!', 'better-payment');
}
return false;
}
/**
* Stripe payment success
*
* @since 0.0.1
*/
public static function stripe_payment_success( $settings = [] ) {
$data = $_REQUEST;
if ( !empty( $data[ 'better_payment_stripe_id' ] ) ) {
global $wpdb;
$table = "{$wpdb->prefix}better_payment";
$results = $wpdb->get_row(
$wpdb->prepare( "SELECT id, obj_id, amount, transaction_id, currency, form_fields_info, referer FROM $table WHERE order_id=%s and status = 'unpaid' limit 1", sanitize_text_field( $data[ 'better_payment_stripe_id' ] ) )
);
if ( !empty( $results->obj_id ) && !empty( $settings[ 'better_payment_stripe_secret_key' ] ) ) {
$header = array(
'Authorization' => 'Basic ' . base64_encode( sanitize_text_field( $settings[ 'better_payment_stripe_secret_key' ] ) . ':' ),
'Stripe-Version' => '2019-05-16',
);
$request = [
'expand' => [
'subscription.latest_invoice.payment_intent',
'payment_intent'
]
];
$form_fields_info = maybe_unserialize($results->form_fields_info);
$is_payment_recurring = ! empty( $form_fields_info['mode'] ) && 'subscription' === $form_fields_info['mode'];
$is_payment_split_payment = ( $is_payment_recurring ) && ( ! empty( $form_fields_info['is_payment_split_payment'] ) && 1 === intval( $form_fields_info['is_payment_split_payment'] ) );
$action_data = [
'form_fields_info' => $form_fields_info,
'is_payment_recurring' => $is_payment_recurring,
'is_payment_split_payment' => $is_payment_split_payment,
'checkout_session_id' => $results->obj_id,
];
$response = wp_safe_remote_post(
'https://api.stripe.com/v1/checkout/sessions/' . $results->obj_id,
array(
'method' => 'GET',
'headers' => $header,
'timeout' => 70,
'body' => $request
)
);
if ( is_wp_error( $response ) || empty( $response[ 'body' ] ) ) {
return new \WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) );
}
$response = json_decode( $response[ 'body' ] );
$transaction_id = ! empty( $results->transaction_id ) ? sanitize_text_field( $results->transaction_id ) : '';
if ( $is_payment_recurring && ! empty( $response->subscription->id ) ) {
$transaction_id = sanitize_text_field( $response->subscription->id );
$subscription_obj = $response->subscription;
$form_fields_info['subscription_id'] = sanitize_text_field( $transaction_id );
$form_fields_info['subscription_customer_id'] = ! empty( $response->customer ) ? sanitize_text_field( $response->customer ) : '';
$form_fields_info['subscription_plan_id'] = ! empty( $subscription_obj->items->data[0]->plan->id ) ? sanitize_text_field( $subscription_obj->items->data[0]->plan->id ) : '';
$form_fields_info['subscription_interval'] = ! empty( $subscription_obj->items->data[0]->plan->interval_count ) ? intval( $subscription_obj->items->data[0]->plan->interval_count ) : '';
$form_fields_info['subscription_interval'] .= ! empty( $subscription_obj->items->data[0]->plan->interval ) ? ' ' . sanitize_text_field( $subscription_obj->items->data[0]->plan->interval ) : $form_fields_info['subscription_interval'];
$form_fields_info['subscription_current_period_start'] = ! empty( $subscription_obj->current_period_start ) ? intval( $subscription_obj->current_period_start ) : 0;
$form_fields_info['subscription_current_period_end'] = ! empty( $subscription_obj->current_period_end ) ? intval( $subscription_obj->current_period_end ) : 0;
$form_fields_info['subscription_status'] = sanitize_text_field( $response->status );
$form_fields_info['subscription_created_date'] = sanitize_text_field( $subscription_obj->created );
}
if ( isset( $response->error->message ) ) {
return new \WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) );
}
$customer_email = $is_payment_recurring && ( ! empty( $response->customer_email ) ) ? sanitize_email( $response->customer_email ) : '';
$customer_email_optional = '';
if (
isset( $response->payment_intent ) &&
isset( $response->payment_intent->charges ) &&
isset( $response->payment_intent->charges->data ) &&
! empty( $response->payment_intent->charges->data )
) {
$charge = current( $response->payment_intent->charges->data );
if (
isset( $charge->billing_details ) &&
isset( $charge->billing_details->email ) &&
! empty( $charge->billing_details->email )
) {
$customer_email_optional = sanitize_email( $charge->billing_details->email );
}
}
$form_fields_info['is_coupon_applied'] = 0;
$exact_paid_amount = ! empty( $response->amount_total ) ? floatval( $response->amount_total ) : $results->amount * 100;
$exact_paid_amount = $exact_paid_amount / 100;
$form_fields_info['exact_paid_amount'] = $exact_paid_amount;
if( (int)$exact_paid_amount != (int)$results->amount ) {
$form_fields_info['paid_amount_diff'] = $results->amount - $exact_paid_amount;
$form_fields_info['is_coupon_applied'] = 1;
}
$updated = $wpdb->update(
$table,
array(
'amount' => $exact_paid_amount,
'status' => sanitize_text_field( $response->payment_status ),
'email' => $is_payment_recurring ? $customer_email : $customer_email_optional,
'customer_info' => maybe_serialize( $response ),
'form_fields_info' => maybe_serialize( $form_fields_info ),
'transaction_id' => $transaction_id,
),
array( 'ID' => $results->id )
);
do_action('better_payment/stripe_payment/success', $action_data);
$frontend_data = [
'amount' => $exact_paid_amount,
'email' => $is_payment_recurring ? $customer_email : $customer_email_optional,
'transaction_id' => $transaction_id,
'currency' => ! empty( $results->currency ) ? $results->currency : __( 'USD', 'better-payment' ),
'method' => 'stripe',
'is_payment_recurring' => $is_payment_recurring,
'is_payment_split_payment' => $is_payment_split_payment,
'is_payment_mixed' => ! empty( $form_fields_info['is_payment_mixed'] ) ? intval( $form_fields_info['is_payment_mixed'] ) : 0,
'mixed_payment_selected_type' => ! empty( $form_fields_info['mixed_payment_selected_type'] ) ? sanitize_text_field( $form_fields_info['mixed_payment_selected_type'] ) : '',
];
if ( $is_payment_split_payment ) {
$total_amount = ! empty( $form_fields_info['split_payment_total_amount'] )
? sanitize_text_field( $form_fields_info['split_payment_total_amount'] )
: 0;
$total_installment = ! empty( $form_fields_info['split_payment_installment_iteration'] )
? sanitize_text_field( $form_fields_info['split_payment_installment_iteration'] )
: 1;
// $frontend_data['amount'] = floatval( $total_amount / $total_installment );
$frontend_data['total_amount'] = $total_amount;
}
if ( false !== $updated ) {
//Send email notification
$better_customer_email = $is_payment_recurring ? $customer_email : $customer_email_optional;
if (
(isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
|| ( $results->referer === 'elementor-form' )
) {
$is_elementor_form = ! empty( $results->referer ) && $results->referer === 'elementor-form' ? 1 : 0;
self::better_email_notification($transaction_id, $better_customer_email, $settings, 'Stripe', $results->form_fields_info, $is_elementor_form);
}
return $frontend_data;
}
}
}
return false;
}
/**
* Paystack payment success
*
* @since 0.0.1
*/
public static function paystack_payment_success( $settings = [] ) {
$data = $_REQUEST;
if ( ! empty( $data[ 'better_payment_paystack_id' ] ) ) {
global $wpdb;
$table = "{$wpdb->prefix}better_payment";
$results = $wpdb->get_row(
$wpdb->prepare( "SELECT id,obj_id,transaction_id,form_fields_info,referer FROM $table WHERE order_id=%s and status = 'unpaid' limit 1", sanitize_text_field( $data[ 'better_payment_paystack_id' ] ) )
);
$header_info = array(
'Authorization' => 'Bearer ' . sanitize_text_field( $settings[ 'better_payment_paystack_secret_key' ] ),
"Cache-Control: no-cache",
);
$response = wp_safe_remote_get(
'https://api.paystack.co/transaction/verify/'. sanitize_text_field( $data[ 'reference' ] ),
array(
'headers' => $header_info,
'timeout' => 70,
)
);
$response = json_decode(wp_remote_retrieve_body($response));
if ( ! empty( $response->status ) ) {
$updated = $wpdb->update(
$table,
array(
'status' => ! empty( $response->data->status ) ? sanitize_text_field( $response->data->status ) : '',
'amount' => ! empty( $response->data->amount ) ? floatval( ( $response->data->amount ) / 100 ) : 0,
'obj_id' => ! empty( $response->data->id ) ? sanitize_text_field( $response->data->id ) : '',
'transaction_id' => ! empty( $response->data->reference ) ? sanitize_text_field( $response->data->reference ) : '',
'customer_info' => ! empty( $response->data->customer ) ? maybe_serialize( $response->data->customer ) : '',
'email' => ! empty( $response->data->customer->email ) ? sanitize_email( $response->data->customer->email ) : '',
),
array( 'ID' => $results->id )
);
}
$better_customer_email = ! empty( $response->data->customer->email ) ? maybe_serialize( $response->data->customer->email ) : '';
$transaction_id = ! empty( $response->data->reference ) ? sanitize_text_field( $response->data->reference ) : '';
$frontend_data = [
'amount' => ! empty( $response->data->amount ) ? floatval( ( $response->data->amount ) / 100 ) : 0,
'email' => ! empty( $better_customer_email ) ? $better_customer_email : '',
'transaction_id' => $transaction_id,
'currency' => ! empty( $response->data->currency ) ? sanitize_text_field( $response->data->currency ) : __( 'USD', 'better-payment' ),
'method' => 'paystack',
];
if ( ! empty( $updated ) && $better_customer_email ) {
//Send email notification
if (
(isset($settings[ 'better_payment_form_email_enable' ]) && $settings[ 'better_payment_form_email_enable' ] == 'yes' )
|| ( $results->referer === 'elementor-form' )
) {
$is_elementor_form = ! empty( $results->referer ) && $results->referer === 'elementor-form' ? 1 : 0;
self::better_email_notification($transaction_id, $better_customer_email, $settings, 'Paystack', $results->form_fields_info, $is_elementor_form);
}
return $frontend_data;
}
}
return false;
}
/**
* Success message template
*
* @since 0.0.1
*/
public static function success_message_template( $settings = [], $tr_id = '' ) {
if ( empty( $tr_id ) || is_wp_error($tr_id)) {
return false;
}
wp_enqueue_script('better-payment-admin-script');
$image_url = BETTER_PAYMENT_ASSETS . '/img/success.svg';
$show_icon = 0;
$default_icon = 1;
$helper_obj = new Helper();
$store_name = ( isset( $settings['better_payment_form_payment_source'] ) && $settings['better_payment_form_payment_source'] === 'manual' && !empty( $settings['better_payment_form_title'] ) )
? esc_html($settings['better_payment_form_title'])
: esc_html( get_bloginfo('name') );
$payment_desc_text = !empty( $settings['better_payment_form_success_message_heading'] )
? esc_html($settings['better_payment_form_success_message_heading'])
: esc_html( __('You paid', 'better-payment') . ' [currency_symbol][amount] ' . __('to', 'better-payment') . ' [store_name]');
$bp__currency_symbol = esc_html( ! empty( $tr_id['currency'] ) ? $helper_obj->get_currency_symbol( $tr_id['currency'] ) : '' );
$payment_desc_text = str_replace( '[currency_symbol]', '' . $bp__currency_symbol . '', $payment_desc_text );
$payment_desc_text = str_replace( '[amount]', '' . esc_html( ! empty( $tr_id['amount'] ) ? $tr_id['amount'] : 0 ) . '', $payment_desc_text );
$payment_desc_text = str_replace( '[store_name]', '' . esc_html( $store_name ) . '', $payment_desc_text );
$payment_mail_text = !empty( $settings['better_payment_form_success_message_sub_heading'] ) ? esc_html($settings['better_payment_form_success_message_sub_heading']) : esc_html( __('Payment Confirmation email will be sent to ', 'better-payment') . '[customer_email]');
$payment_mail_text = str_replace( '[customer_email]', '' . esc_html( ! empty( $tr_id['email'] ) ? $tr_id['email'] : '' ) . '', $payment_mail_text );
if ( !empty( $settings[ 'better_payment_form_success_message_icon' ][ 'library' ] ) ) {
if ( $settings[ 'better_payment_form_success_message_icon' ][ 'library' ] == 'svg' ) {
$image_url = $settings[ 'better_payment_form_success_message_icon' ][ 'value' ][ 'url' ];
$default_icon = 0;
} else {
$show_icon = 1;
$image_url = $settings[ 'better_payment_form_success_message_icon' ][ 'value' ];
$default_icon = 0;
}
}
$allowed_payment_methods = [
'paypal' => BETTER_PAYMENT_ASSETS . '/img/paypal-2.svg',
'stripe' => BETTER_PAYMENT_ASSETS . '/img/stripe-2.svg',
'paystack' => BETTER_PAYMENT_ASSETS . '/img/paystack-2.svg',
];
$payment_method_logo = isset( $tr_id['method'] ) && isset( $allowed_payment_methods[ $tr_id['method'] ] ) ? $allowed_payment_methods[ $tr_id['method'] ] : '';
$better_payment_form_success_message_thanks = !empty( $settings['better_payment_form_success_message_thanks'] )
? esc_html( $settings['better_payment_form_success_message_thanks'] )
: esc_html__('Thank You!', 'better-payment');
$better_payment_form_success_message_transaction = !empty( $settings['better_payment_form_success_message_transaction'] )
? esc_html__( $settings['better_payment_form_success_message_transaction'], 'better-payment' )
: esc_html__('Transaction ID', 'better-payment');
$better_payment_form_success_message_amount_text = !empty( $settings['better_payment_form_success_message_amount_text'] )
? esc_html( $settings['better_payment_form_success_message_amount_text'] )
: esc_html__( 'Amount', 'better-payment' );
$better_payment_form_success_message_currency_text = !empty( $settings['better_payment_form_success_message_currency_text'] )
? esc_html( $settings['better_payment_form_success_message_currency_text'] )
: esc_html__( 'Currency', 'better-payment' );
$better_payment_form_success_message_pay_method_text = !empty( $settings['better_payment_form_success_message_pay_method_text'] ) ? esc_html( $settings['better_payment_form_success_message_pay_method_text'] ) : esc_html__( 'Payment Method', 'better-payment' );
$better_payment_form_success_message_pay_type_text = !empty( $settings['better_payment_form_success_message_pay_type_text'] )
? esc_html( $settings['better_payment_form_success_message_pay_type_text'] )
: esc_html__( 'Payment Type', 'better-payment' );
$better_payment_form_payment_type = !empty( $settings['better_payment_form_payment_type'] )
? esc_html( $settings['better_payment_form_payment_type'] )
: '';
if ( ! empty( $better_payment_form_payment_type ) ) {
if ( 'one-time' === $better_payment_form_payment_type ) {
$better_payment_form_payment_type_value = esc_html__( 'One Time Payment', 'better-payment' );
} elseif ( 'recurring' === $better_payment_form_payment_type ) {
$better_payment_form_payment_type_value = esc_html__( 'Recurring Payment', 'better-payment' );
} elseif ( 'mixed' === $better_payment_form_payment_type ) {
$mixed_payment_selected_type = ! empty( $tr_id['mixed_payment_selected_type'] ) ? sanitize_text_field( $tr_id['mixed_payment_selected_type'] ) : '';
$is_mixed_recurring = 'recurring' === $mixed_payment_selected_type;
if ( empty( $mixed_payment_selected_type ) ) {
$is_mixed_recurring = ! empty( $tr_id['is_payment_recurring'] ) && empty( $tr_id['is_payment_split_payment'] );
}
$better_payment_form_payment_type_value = $is_mixed_recurring
? esc_html__( 'Recurring Payment', 'better-payment' )
: esc_html__( 'One Time Payment', 'better-payment' );
} else {
$better_payment_form_payment_type_value = esc_html__( 'Split Payment', 'better-payment' );
}
}
$better_payment_form_success_message_merchant_details_text = !empty( $settings['better_payment_form_success_message_merchant_details_text'] )
? esc_html( $settings['better_payment_form_success_message_merchant_details_text'] )
: esc_html__( 'Merchant Details', 'better-payment' );
$better_payment_form_success_message_merchant_details_value = isset( $settings['better_payment_form_payment_source'] ) && $settings['better_payment_form_payment_source'] === 'manual' && ! empty( $settings['better_payment_form_title'] )
? esc_html($settings['better_payment_form_title'])
: esc_html( get_bloginfo( 'name' ) );
$better_payment_form_success_message_paid_amount_text = !empty( $settings['better_payment_form_success_message_paid_amount_text'] )
? esc_html( $settings['better_payment_form_success_message_paid_amount_text'] )
: esc_html__( 'Paid Amount', 'better-payment' );
$better_payment_form_success_message_purchase_details_text = !empty( $settings['better_payment_form_success_message_purchase_details_text'] )
? esc_html( $settings['better_payment_form_success_message_purchase_details_text'] )
: esc_html__( 'Purchase Details', 'better-payment' );
$better_payment_form_success_message_print_text = !empty( $settings['better_payment_form_success_message_print_text'] )
? esc_html( $settings['better_payment_form_success_message_print_text'] )
: esc_html__( 'Print', 'better-payment' );
$better_payment_form_success_message_view_details_btn_text = !empty( $settings['better_payment_form_success_message_view_details_btn_text'] )
? esc_html( $settings['better_payment_form_success_message_view_details_btn_text'] )
: esc_html__( 'View Details', 'better-payment' );
$better_payment_form_success_page_view_details_url = !empty( $settings['better_payment_form_success_page_view_details_url']['url'] ) ? esc_url( $settings['better_payment_form_success_page_view_details_url']['url'] ) : 'javascript:void(0)';
?>
🎉
:
' : "\n";
$line_break_customer = $better_payment_email_content_type_customer == 'html' ? '
' : "\n";
global $wpdb;
$table = "{$wpdb->prefix}better_payment";
$transaction_obj = $wpdb->get_row(
$wpdb->prepare( "SELECT * FROM $table WHERE transaction_id=%s limit 1", sanitize_text_field( $transaction_id ) )
);
if(isset($settings['better_payment_email_content'])){
$better_payment_email_content = sanitize_text_field($settings['better_payment_email_content']);
$better_payment_email_content = self::better_render_email_body( $better_payment_email_content, $form_fields_info, $line_break, 'admin', $transaction_obj, $args );
} else if ( !empty($better_payment_email_content) ){
$better_payment_email_content = self::better_render_email_body( $better_payment_email_content, $form_fields_info, $line_break, 'admin', $transaction_obj, $args );
}
if(isset($settings['better_payment_email_content_customer'])){
$better_payment_email_content_customer = sanitize_text_field($settings['better_payment_email_content_customer']);
$better_payment_email_content_customer = self::better_render_email_body( $better_payment_email_content_customer, $form_fields_info, $line_break_customer, 'customer', $transaction_obj, $args );
} else if ( !empty($better_payment_email_content_customer) ){
$better_payment_email_content_customer = self::better_render_email_body( $better_payment_email_content_customer, $form_fields_info, $line_break, 'customer', $transaction_obj, $args ); //$line_break_customer not used : need to check type on parent method and add headers accordingly.
}
if(isset($settings['better_payment_email_from'])){
$better_payment_email_from = sanitize_email($settings['better_payment_email_from']);
}
if(isset($settings['better_payment_email_from_name'])){
$better_payment_email_from_name = sanitize_text_field($settings['better_payment_email_from_name']);
}
if(isset($settings['better_payment_email_reply_to'])){
$better_payment_email_reply_to = sanitize_email($settings['better_payment_email_reply_to']);
}
if(isset($settings['better_payment_email_cc'])){
$better_payment_email_cc = sanitize_email($settings['better_payment_email_cc']);
}
if(isset($settings['better_payment_email_bcc'])){
$better_payment_email_bcc = sanitize_email($settings['better_payment_email_bcc']);
}
//Customer Email
if(isset($settings['better_payment_email_from_customer'])){
$better_payment_email_from_customer = sanitize_email($settings['better_payment_email_from_customer']);
}
if(isset($settings['better_payment_email_from_name_customer'])){
$better_payment_email_from_name_customer = sanitize_text_field($settings['better_payment_email_from_name_customer']);
}
if(isset($settings['better_payment_email_reply_to_customer'])){
$better_payment_email_reply_to_customer = sanitize_email($settings['better_payment_email_reply_to_customer']);
}
if(isset($settings['better_payment_email_cc_customer'])){
$better_payment_email_cc_customer = sanitize_email($settings['better_payment_email_cc_customer']);
}
if(isset($settings['better_payment_email_bcc_customer'])){
$better_payment_email_bcc_customer = sanitize_email($settings['better_payment_email_bcc_customer']);
}
if($better_payment_email_content == ''){
$better_payment_email_content = __('New better payment transaction! ', 'better-payment');
}
if($better_payment_email_content_customer == ''){
$better_payment_email_content_customer = __('New better payment transaction! ', 'better-payment');
}
$better_payment_email_headers = [];
$better_payment_email_headers_customer = [];
if($better_payment_email_content_type == 'html'){
$better_payment_email_headers[] = 'Content-Type: text/html; charset=UTF-8';
}
if($better_payment_email_content_type_customer == 'html'){
$better_payment_email_headers_customer[] = 'Content-Type: text/html; charset=UTF-8';
}
if($better_payment_email_from != ''){
$better_payment_email_headers[] = "From: $better_payment_email_from_name <$better_payment_email_from>";
}
if($better_payment_email_cc != ''){
$better_payment_email_headers[] = "Cc: <$better_payment_email_cc>";
}
if($better_payment_email_bcc != ''){
$better_payment_email_headers[] = "BCc: $better_payment_email_bcc";
}
if($better_payment_email_reply_to != ''){
$better_payment_email_headers[] = "Reply-To: $better_payment_email_reply_to";
}
//Customer Email
if($better_payment_email_from_customer != ''){
$better_payment_email_headers_customer[] = "From: $better_payment_email_from_name_customer <$better_payment_email_from_customer>";
}
$form_fields_info_array = [];
if( ! empty( $form_fields_info ) ){
$form_fields_info_array = maybe_unserialize( $form_fields_info );
}
$form_fields_info_cus_email = ! empty( $form_fields_info_array['primary_email'] ) ? sanitize_email( $form_fields_info_array['primary_email'] ) : '';
if($better_payment_email_cc_customer != '' || ! empty( $form_fields_info_cus_email ) ){
$better_payment_email_cc_customer_multiple = implode(',', [$form_fields_info_cus_email, $better_payment_email_cc_customer]);
$better_payment_email_headers_customer[] = "Cc: $better_payment_email_cc_customer_multiple";
}
if($better_payment_email_bcc_customer != ''){
$better_payment_email_headers_customer[] = "BCc: $better_payment_email_bcc_customer";
}
if($better_payment_email_reply_to_customer != ''){
$better_payment_email_headers_customer[] = "Reply-To: $better_payment_email_reply_to_customer";
}
$email_attachments = ! empty( $args['email_attachment_path'] ) ? [ $args['email_attachment_path'] ] : [];
$allowed_extensions = array('jpg', 'jpeg', 'png', 'pdf');
$file_info = count( $email_attachments ) ? pathinfo($email_attachments[0]) : [];
$file_extension = count( $file_info ) ? strtolower($file_info['extension']) : '';
if ( ! in_array( $file_extension, $allowed_extensions ) ){
$email_attachments = [];
}
self::send_better_email($better_cus_email, $better_payment_email_subject_customer, $better_payment_email_content_customer, $better_payment_email_headers_customer, $email_attachments); //customer mail
self::send_better_email($better_payment_email_to, $better_payment_email_subject, $better_payment_email_content, $better_payment_email_headers); //admin mail
}
/**
* Sends an HTML email.
*
* @since 0.0.2
*
* @param string $to
* @param string $subject
* @param array $message
*
* @return bool false indicates mail sending failed while true doesn't gurantee that mail sent.
* true just indicate script processed successfully without any errors.
* Ref: https://developer.wordpress.org/reference/functions/wp_mail/
*/
public static function send_better_email( $to, $subject, $message, $headers=[], $attachments = [] ) {
$response = false;
$mailValidated = filter_var($to, FILTER_VALIDATE_EMAIL);
if ($mailValidated) {
$response = wp_mail( $to, $subject, $message, $headers, $attachments );
}
return $response;
}
/**
* Email body
*
*
* @return string
* @since 0.0.1
*/
public static function better_render_email_body( $email_body, $form_fields_info, $line_break, $type = 'admin', $transaction_obj = null, $args = [] ) {
$transaction_id =
$currency =
$payment_date =
$customer_name =
$customer_first_name =
$customer_last_name =
$amount = '';
$helper_obj = new Helper();
if(null !== $transaction_obj && is_object($transaction_obj)){
$transaction_id = $transaction_obj->transaction_id;
$amount = $transaction_obj->amount;
$status = $transaction_obj->status;
$source = $transaction_obj->source;
$currency = $transaction_obj->currency;
$currency_symbol = $helper_obj->get_currency_symbol( esc_html($currency) );
$payment_date = wp_date(get_option('date_format').' '.get_option('time_format'), strtotime($transaction_obj->payment_date));
}
$is_empty_email_body = empty($email_body);
$email_body = do_shortcode( $email_body );
$bp_form_fields_html_content = $email_body;
$bp_all_fields_shortcode = 'bp-all-fields';
$referer_content_page_link = '#';
$field_text = __('Field', 'better-payment');
$value_text = __('Entry', 'better-payment');
$form_fields_info_arr = maybe_unserialize($form_fields_info);
$email_logo_url = ! empty( $args['email_logo_url'] ) ? $args['email_logo_url'] : '';
$email_content_greeting = ! empty( $args['email_content_greeting'] ) ? 1 : 0;
$email_form_name = ! empty( $args['email_form_name'] ) ? $args['email_form_name'] : 'N/A';
$bp_form_fields_html_header = '