<?php
if ( ! defined( 'ABSPATH' ) ) {
die( 'You are not allowed to call this page directly.' );
}
/**
* @since 6.5, introduced in v3.1 of the Stripe add on.
*/
class FrmStrpLitePaymentTypeHandler {
/**
* @var array
*/
private static $types_by_action_id = array();
/**
* When no payment method types are added, default to automatic.
*
* @since 6.5, introduced in v3.1 of the Stripe add on.
*
* @param WP_Post $action
* @return bool
*/
public static function should_use_automatic_payment_methods( $action ) {
return ! self::get_payment_method_types( $action );
}
/**
* Get the payment method types for a target Stripe action.
*
* @since 6.5, introduced in v3.1 of the Stripe add on.
*
* @param WP_Post $action
* @return string[] An empty array is treated as automatic.
*/
public static function get_payment_method_types( $action ) {
if ( ! isset( self::$types_by_action_id[ $action->ID ] ) ) {
self::$types_by_action_id[ $action->ID ] = self::get_filtered_payment_method_types( $action );
}
return self::$types_by_action_id[ $action->ID ];
}
/**
* @since 6.5, introduced in v3.1 of the Stripe add on.
*
* @param WP_Post $action
* @return string[]
*/
private static function get_filtered_payment_method_types( $action ) {
/**
* Allow users to filter payment method types to add possible other options like "us_bank_account".
* An empty array is treated as automatic.
*
* @since 6.5, introduced in v3.1 of the Stripe add on.
*
* @param array<string> $payment_method_types
* @param array $args {
* @type WP_Post $action
* }
*/
$payment_method_types = apply_filters(
'frm_stripe_payment_method_types',
array(),
array(
'action' => $action,
'form_id' => $action->menu_order,
)
);
if ( ! is_array( $payment_method_types ) ) {
_doing_it_wrong( __METHOD__, 'Payment method types should always be an array. All other values are invalid.', '3.1' );
// Fallback to automatic when an invalid value is used.
$payment_method_types = array();
}
return $payment_method_types;
}
}