|
Server : LiteSpeed System : Linux premium92.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : rbnsfqys ( 805) PHP Version : 8.1.33 Disable Function : NONE Directory : /home/rbnsfqys/public_html/wp-content/plugins/latepoint/lib/helpers/ |
<?php
class OsPaymentsHelper {
public static function get_payment_processors_for_select( $enabled_only = false, $include_other = false ) {
$processors_for_select = [];
$processors = self::get_payment_processors( $enabled_only );
foreach ( $processors as $processor ) {
$processors_for_select[ $processor['code'] ] = $processor['name'];
}
if ( $include_other ) {
$processors_for_select['other'] = __( 'Other', 'latepoint' );
}
return apply_filters( 'latepoint_payment_processors_for_select', $processors_for_select, $enabled_only, $include_other );
}
public static function get_payment_processors( bool $enabled_only = false ) {
$payment_processors = [];
/**
* Result an array of registered payment processors, array looks like this:
* $payment_processors['stripe'] = ['code' => 'stripe', 'name' => 'Stripe', 'image_url' => 'URL_TO_LOGO'];
*
* @param {array} $payment_processors The array of payment processors
*
* @returns {array} The array of payment processors
* @since 5.0.0
* @hook latepoint_payment_processors
*
*/
$payment_processors = apply_filters( 'latepoint_payment_processors', $payment_processors );
if ( $enabled_only ) {
$enabled_processors = [];
foreach ( $payment_processors as $payment_processor ) {
if ( OsPaymentsHelper::is_payment_processor_enabled( $payment_processor['code'] ?? '' ) ) {
$enabled_processors[] = $payment_processor;
}
}
$payment_processors = $enabled_processors;
}
return $payment_processors;
}
public static function get_nice_payment_method_name( $code ) {
$payment_methods = OsPaymentsHelper::get_all_payment_methods_for_select();
return $payment_methods[ $code ] ?? $code;
}
public static function get_nice_payment_processor_name( $code ) {
$processors = OsPaymentsHelper::get_payment_processors();
return $processors[ $code ]['name'] ?? $code;
}
public static function get_enabled_payment_processors() {
return self::get_payment_processors( true );
}
public static function is_local_payments_enabled() {
return OsSettingsHelper::is_on( 'enable_payments_local' );
}
public static function is_accepting_payments(): bool {
$enabled_payment_methods = self::get_enabled_payment_methods_for_payment_time( LATEPOINT_PAYMENT_TIME_NOW );
return ! empty( $enabled_payment_methods );
}
public static function is_payment_processor_enabled( $processor_code ) {
return OsSettingsHelper::is_on( 'enable_payment_processor_' . $processor_code );
}
public static function should_processor_handle_payment_for_transaction_intent( string $processor_code, OsTransactionIntentModel $transaction_intent ): bool {
if ( $transaction_intent->get_payment_data_value('processor') != $processor_code ) {
return false;
}
$payment_times = self::get_enabled_payment_times();
return ! empty( $payment_times[ LATEPOINT_PAYMENT_TIME_NOW ][ $transaction_intent->get_payment_data_value('method') ][ $transaction_intent->get_payment_data_value('processor' )] );
}
public static function should_processor_handle_payment_for_cart( string $processor_code, OsCartModel $cart ): bool {
if ( $cart->payment_processor != $processor_code ) {
return false;
}
$payment_times = self::get_enabled_payment_times();
return ! empty( $payment_times[ $cart->payment_time ][ $cart->payment_method ][ $cart->payment_processor ] );
}
public static function should_processor_handle_payment_for_order_intent( string $processor_code, OsOrderIntentModel $order_intent ): bool {
$cart = new OsCartModel();
$cart->payment_processor = $order_intent->get_payment_data_value( 'processor' );
$cart->payment_time = $order_intent->get_payment_data_value( 'time' );
$cart->payment_method = $order_intent->get_payment_data_value( 'method' );
$cart->payment_portion = $order_intent->get_payment_data_value( 'portion' );
return self::should_processor_handle_payment_for_cart( $processor_code, $cart );
}
public static function is_cart_payment_enabled( OsCartModel $cart ): bool {
$payment_times = self::get_enabled_payment_times();
return ! empty( $payment_times[ $cart->payment_time ][ $cart->payment_method ][ $cart->payment_processor ] );
}
public static function get_all_payment_methods_for_select(): array {
$payment_methods_for_select = [];
$payment_times = self::get_all_payment_times();
foreach ( $payment_times as $payment_time_code => $payment_time_methods ) {
foreach ( $payment_time_methods as $payment_time_method_code => $payment_time_processors ) {
foreach ( $payment_time_processors as $payment_time_processor_code => $payment_time_method ) {
$payment_methods_for_select[ $payment_time_method_code ] = $payment_time_method['label'];
}
}
}
$payment_methods_for_select['other'] = __( 'Other', 'latepoint' );
/**
* List of all payment methods for select field
*
* @param {array} $payment_methods_for_select Array of payment methods for select field
*
* @returns {array} Filtered array of payment methods for select field
* @since 5.0.0
* @hook latepoint_all_payment_methods_for_select
*
*/
return apply_filters( 'latepoint_all_payment_methods_for_select', $payment_methods_for_select );
}
public static function get_local_payment_method_info(): array {
return [
'code' => LATEPOINT_PAYMENT_METHOD_LOCAL,
'label' => __( 'Pay Locally', 'latepoint' ),
'image_url' => LATEPOINT_IMAGES_URL . 'payment_later.png'
];
}
public static function get_enabled_payment_methods_for_payment_time( string $payment_time ): array {
$enabled_payment_methods_for_time = [];
$enabled_payment_times = self::get_enabled_payment_times();
if ( ! empty( $enabled_payment_times[ $payment_time ] ) ) {
$enabled_payment_methods_for_time = $enabled_payment_times[ $payment_time ];
}
/**
* List of enabled payment methods for a specific payment time
*
* @param {array} $enabled_payment_methods_for_time Array of enabled payment methods for requested time
* @param {string} $payment_time Payment time that should be supported by payment methods
*
* @returns {array} Filtered array of enabled payment methods for requested time type
* @since 5.0.0
* @hook latepoint_enabled_payment_methods_for_payment_time
*
*/
return apply_filters( 'latepoint_enabled_payment_methods_for_payment_time', $enabled_payment_methods_for_time, $payment_time );
}
public static function get_enabled_payment_processors_for_payment_time_and_method( string $payment_time, string $payment_method ): array {
$enabled_payment_processors_for_payment_time_and_method = [];
$enabled_payment_methods_for_time = self::get_enabled_payment_methods_for_payment_time( $payment_time );
if ( ! empty( $enabled_payment_methods_for_time[ $payment_method ] ) ) {
$enabled_payment_processors_for_payment_time_and_method = $enabled_payment_methods_for_time[ $payment_method ];
}
/**
* List of enabled payment processors for a specific payment time and method
*
* @param {array} $enabled_payment_processors_for_payment_time_and_method Array of enabled payment processors for requested time and method
* @param {string} $payment_time Payment time that should be supported by payment processors
* @param {string} $payment_method Payment method that should be supported by payment processors
*
* @returns {array} Filtered array of enabled payment processors for requested time and method
* @since 5.0.0
* @hook latepoint_enabled_payment_processors_for_payment_time_and_method
*
*/
return apply_filters( 'latepoint_enabled_payment_processors_for_payment_time_and_method', $enabled_payment_processors_for_payment_time_and_method, $payment_time, $payment_method );
}
public static function get_all_payment_times(): array {
$payment_times = [
LATEPOINT_PAYMENT_TIME_NOW => [],
LATEPOINT_PAYMENT_TIME_LATER => []
];
$payment_times[ LATEPOINT_PAYMENT_TIME_LATER ][ LATEPOINT_PAYMENT_METHOD_LOCAL ]['latepoint'] = self::get_local_payment_method_info();
/**
* List of all payment times
*
* @param {array} $payment_times Array of payment times
*
* @returns {array} Filtered array of enabled payment times
* @since 5.0.0
* @hook latepoint_get_all_payment_times
*
*/
return apply_filters( 'latepoint_get_all_payment_times', $payment_times );
}
/**
*
* Array of payment times that have at least one payment method enabled
*
* @return array
*/
public static function get_enabled_payment_times(): array {
$enabled_payment_times = [];
if ( self::is_local_payments_enabled() ) {
$enabled_payment_times[ LATEPOINT_PAYMENT_TIME_LATER ][ LATEPOINT_PAYMENT_METHOD_LOCAL ]['latepoint'] = self::get_local_payment_method_info();
}
/**
* List of only enabled payment times
*
* @param {array} $enabled_payment_times Array of payment times
*
* @returns {array} Filtered array of enabled payment times
* @since 5.0.0
* @hook latepoint_get_enabled_payment_times
*
*/
return apply_filters( 'latepoint_get_enabled_payment_times', $enabled_payment_times );
}
public static function get_transactions_for_select() {
$transactions = new OsTransactionModel();
$transactions = $transactions->set_limit( 100 )->get_results_as_models();
$transactions_options = [];
foreach ( $transactions as $transaction ) {
$name = $transaction->token . ', ' . OsMoneyHelper::format_price( $transaction->amount, true, false ) . ' [' . $transaction->processor . '/' . $transaction->payment_method . ' ' . $transaction->status . ']';
$transactions_options[] = [ 'value' => $transaction->id, 'label' => $name ];
}
return $transactions_options;
}
public static function get_payment_portions_list() {
$payment_portions = [
LATEPOINT_PAYMENT_PORTION_FULL => __( 'Full Balance', 'latepoint' ),
LATEPOINT_PAYMENT_PORTION_REMAINING => __( 'Remaining Balance', 'latepoint' ),
LATEPOINT_PAYMENT_PORTION_DEPOSIT => __( 'Deposit', 'latepoint' ),
LATEPOINT_PAYMENT_PORTION_CUSTOM => __( 'Custom', 'latepoint' )
];
return apply_filters( 'latepoint_payment_portions', $payment_portions );
}
public static function get_list_of_transaction_kinds() {
$statuses = [
LATEPOINT_TRANSACTION_KIND_CAPTURE => __( 'Capture', 'latepoint' ),
LATEPOINT_TRANSACTION_KIND_AUTHORIZATION => __( 'Authorization', 'latepoint' ),
LATEPOINT_TRANSACTION_KIND_VOID => __( 'Void', 'latepoint' ),
];
return apply_filters( 'latepoint_transaction_kinds', $statuses );
}
public static function get_nice_transaction_kind_name( $kind ) {
$kids_list = OsPaymentsHelper::get_list_of_transaction_kinds();
return $kids_list[ $kind ] ?? $kind;
}
public static function get_transaction_statuses_list() {
$statuses = [
LATEPOINT_TRANSACTION_STATUS_SUCCEEDED => __( 'Succeeded', 'latepoint' ),
LATEPOINT_TRANSACTION_STATUS_PROCESSING => __( 'Processing', 'latepoint' ),
LATEPOINT_TRANSACTION_STATUS_FAILED => __( 'Failed', 'latepoint' )
];
return apply_filters( 'latepoint_transaction_statuses', $statuses );
}
public static function get_nice_transaction_status_name( $status ) {
$statuses_list = OsPaymentsHelper::get_transaction_statuses_list();
return $statuses_list[ $status ] ?? $status;
}
public static function display_transaction_payment_method_info( $payment_method ) {
switch ( $payment_method ) {
case LATEPOINT_PAYMENT_METHOD_CARD:
echo '<div class="lp-method-logo"><i class="latepoint-icon latepoint-icon-credit-card"></i></div>';
break;
case LATEPOINT_PAYMENT_METHOD_PAYPAL:
echo '<div class="lp-method-logo"><i class="latepoint-icon latepoint-icon-paypal"></i></div>';
break;
default:
echo '<div class="lp-method-name">' . esc_html( $payment_method ) . '</div>';
break;
}
}
public static function process_payment_for_order_intent( OsOrderIntentModel $order_intent ) {
if ( ( $order_intent->charge_amount <= 0 ) || OsSettingsHelper::is_env_demo() ) {
return false;
}
$payment_processing_result = [];
/**
* Hook to change a result of payment processing when order intent is being converted to order and payment is required
*
* @param {array} $result Array that holds result of payment processing
* @param {OsOrderIntentModel} $order_intent Order intent which is being converted to Order which payment is being processed
*
* @returns {array} Filtered array that holds result of payment processing
* @since 5.0.0
* @hook latepoint_process_payment_for_order_intent
*
*/
$payment_processing_result = apply_filters( 'latepoint_process_payment_for_order_intent', $payment_processing_result, $order_intent );
if ( $payment_processing_result && $payment_processing_result['status'] == LATEPOINT_STATUS_SUCCESS ) {
$transaction = new OsTransactionModel();
$transaction->token = $payment_processing_result['charge_id'];
$transaction->payment_method = $order_intent->get_payment_data_value( 'method' );
$transaction->payment_portion = $order_intent->get_payment_data_value( 'portion' );
$transaction->amount = $order_intent->charge_amount;
$transaction->customer_id = $order_intent->customer_id;
$transaction->processor = $payment_processing_result['processor'];
$transaction->kind = $payment_processing_result['kind'] ?? LATEPOINT_TRANSACTION_KIND_CAPTURE;
$transaction->status = LATEPOINT_TRANSACTION_STATUS_SUCCEEDED;
} else {
$transaction = false;
}
return $transaction;
}
public static function process_payment_for_transaction_intent( OsTransactionIntentModel $transaction_intent ) {
if ( ( $transaction_intent->charge_amount <= 0 ) || OsSettingsHelper::is_env_demo() ) {
return false;
}
$payment_processing_result = [];
/**
* Hook to change a result of payment processing when transaction intent is being converted to transaction and payment is required
*
* @param {array} $result Array that holds result of payment processing
* @param {OsTransactionIntentModel} $transaction_intent Transaction intent which is being converted to Transaction which payment is being processed
*
* @returns {array} Filtered array that holds result of payment processing
* @since 5.0.0
* @hook latepoint_process_payment_for_transaction_intent
*
*/
$payment_processing_result = apply_filters( 'latepoint_process_payment_for_transaction_intent', $payment_processing_result, $transaction_intent );
if ( $payment_processing_result && $payment_processing_result['status'] == LATEPOINT_STATUS_SUCCESS ) {
$transaction = new OsTransactionModel();
$transaction->token = $payment_processing_result['charge_id'];
$transaction->payment_method = $transaction_intent->get_payment_data_value( 'method' );
$transaction->payment_portion = $transaction_intent->get_payment_data_value( 'portion' );
$transaction->amount = $transaction_intent->charge_amount;
$transaction->order_id = $transaction_intent->order_id;
$transaction->customer_id = $transaction_intent->customer_id;
$transaction->invoice_id = $transaction_intent->invoice_id;
$transaction->processor = $payment_processing_result['processor'];
$transaction->kind = $payment_processing_result['kind'] ?? LATEPOINT_TRANSACTION_KIND_CAPTURE;
$transaction->status = LATEPOINT_TRANSACTION_STATUS_SUCCEEDED;
} else {
$transaction = false;
}
return $transaction;
}
public static function convert_charge_amount_to_requirements( $charge_amount, OsCartModel $cart ) {
/**
* Hook to convert amount to requirements based on a payment processor and method selected in a cart
*
* @param {float} $chart_amount Amount to charge
* @param {OsCartModel} $cart Cart object
*
* @returns {float} Filtered amount to spec
* @since 5.0.0
* @hook latepoint_convert_charge_amount_to_requirements
*
*/
return apply_filters( 'latepoint_convert_charge_amount_to_requirements', $charge_amount, $cart );
}
}