e-payments' ), ); if ( $should_be ) { return $active_rule; } return (object) array( 'type' => 'not', 'operand' => array( $active_rule ), ); } /** * Get default rules for WooPayments being connected or not. * * This does not include the check for the WooPayments plugin to be active. * * @param bool $should_be Whether WooPayments should be connected. * * @return object Rules to match. */ public static function get_rules_for_wcpay_connected( $should_be ) { return (object) array( 'type' => 'option', 'transformers' => array( // Extract only the 'data' key from the option. (object) array( 'use' => 'dot_notation', 'arguments' => (object) array( 'path' => 'data', ), ), // Extract the keys from the data array. (object) array( 'use' => 'array_keys', ), ), 'option_name' => 'wcpay_account_data', // The rule will be look for the 'account_id' key in the account data array. 'operation' => $should_be ? 'contains' : '!contains', 'value' => 'account_id', 'default' => array(), ); } /** * Get recommendation priority for a given payment gateway by id and country. * If country is not supported, return null. * * @param string $gateway_id Payment gateway id. * @param string $country_code Store country code. * @return int|null Priority. Priority is 0-indexed, so 0 is the highest priority. */ private static function get_recommendation_priority( $gateway_id, $country_code ) { $recommendation_priority_map = array( 'US' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'square_credit_card', 'amazon_payments_advanced', 'affirm', 'afterpay', 'klarna_payments', ), 'CA' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'square_credit_card', 'affirm', 'afterpay', 'klarna_payments', ), 'AT' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'klarna_payments', 'amazon_payments_advanced', ), 'BE' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'klarna_payments', 'amazon_payments_advanced', ), 'BG' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'HR' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'ppcp-gateway', ), 'CH' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'mollie_wc_gateway_banktransfer', 'klarna_payments', ), 'CY' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'amazon_payments_advanced', ), 'CZ' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'DK' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'klarna_payments', 'amazon_payments_advanced', ), 'EE' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', ), 'ES' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'mollie_wc_gateway_banktransfer', 'square_credit_card', 'klarna_payments', 'amazon_payments_advanced', ), 'FI' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'mollie_wc_gateway_banktransfer', 'kco', 'klarna_payments', ), 'FR' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'square_credit_card', 'klarna_payments', 'amazon_payments_advanced', ), 'DE' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'klarna_payments', 'amazon_payments_advanced', ), 'GB' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'square_credit_card', 'klarna_payments', 'amazon_payments_advanced', ), 'GR' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', ), 'HU' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'amazon_payments_advanced', ), 'IE' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'square_credit_card', 'amazon_payments_advanced', ), 'IT' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'klarna_payments', 'amazon_payments_advanced', ), 'LV' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'LT' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'LU' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'amazon_payments_advanced', ), 'MT' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'NL' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'klarna_payments', 'amazon_payments_advanced', ), 'NO' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'kco', 'klarna_payments', ), 'PL' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'mollie_wc_gateway_banktransfer', 'klarna_payments', ), 'PT' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'airwallex_main', 'amazon_payments_advanced', ), 'RO' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'SK' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', ), 'SL' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'amazon_payments_advanced', ), 'SE' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'kco', 'klarna_payments', 'amazon_payments_advanced', ), 'MX' => array( 'stripe', 'woo-mercado-pago-custom', 'ppcp-gateway', 'klarna_payments', ), 'BR' => array( 'stripe', 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'AR' => array( 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'BO' => array(), 'CL' => array( 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'CO' => array( 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'EC' => array( 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'FK' => array(), 'GF' => array(), 'GY' => array(), 'PY' => array(), 'PE' => array( 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'SR' => array(), 'UY' => array( 'woo-mercado-pago-custom', 'ppcp-gateway' ), 'VE' => array( 'ppcp-gateway' ), 'AU' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'airwallex_main', 'ppcp-gateway', 'square_credit_card', 'afterpay', 'klarna_payments', ), 'NZ' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'airwallex_main', 'ppcp-gateway', 'klarna_payments', ), 'HK' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'airwallex_main', 'ppcp-gateway', 'payoneer-checkout', ), 'JP' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'ppcp-gateway', 'square_credit_card', 'amazon_payments_advanced', ), 'SG' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', 'stripe', 'airwallex_main', 'ppcp-gateway', ), 'CN' => array( 'airwallex_main', 'ppcp-gateway', 'payoneer-checkout' ), 'FJ' => array(), 'GU' => array(), 'ID' => array( 'stripe', 'ppcp-gateway' ), 'IN' => array( 'stripe', 'razorpay', 'payubiz', 'ppcp-gateway' ), 'ZA' => array( 'payfast', 'paystack' ), 'NG' => array( 'paystack' ), 'GH' => array( 'paystack' ), 'AE' => array( 'woocommerce_payments:with-in-person-payments', 'woocommerce_payments:without-in-person-payments', 'woocommerce_payments', ), ); // If the country code is not in the list, return default priority. if ( ! isset( $recommendation_priority_map[ $country_code ] ) ) { return self::get_default_recommendation_priority( $gateway_id ); } $index = array_search( $gateway_id, $recommendation_priority_map[ $country_code ], true ); // If the gateway is not in the list, return the last index + 1. if ( false === $index ) { return count( $recommendation_priority_map[ $country_code ] ); } return $index; } /** * Get the default recommendation priority for a payment gateway. * This is used when a country is not in the $recommendation_priority_map array. * * @param string $id Payment gateway id. * @return int Priority. */ private static function get_default_recommendation_priority( $id ) { if ( ! $id || ! array_key_exists( $id, self::$recommendation_priority ) ) { return null; } return self::$recommendation_priority[ $id ]; } }