diff --git a/changelog.txt b/changelog.txt index f2a731aea1..1afd715517 100644 --- a/changelog.txt +++ b/changelog.txt @@ -40,6 +40,7 @@ * Update - Support block checkout custom fields when using express payment methods like Apple Pay and Google Pay * Dev - Fix failing optimized checkout e2e test due to incorrect order of operations * Tweak - Remove Payment Method Configurations fallback cache +* Dev - Implement a class autoloader for the plugin to reduce unnecessary file loads * Fix - Show correct price in express checkout for zero decimal currencies * Fix - Fix buggy unsaved changes warning in settings page * Fix - Use the platform's payment method configuration id constant when rendering the Optimized Checkout diff --git a/composer.json b/composer.json index 1819c6451a..d32d231048 100644 --- a/composer.json +++ b/composer.json @@ -19,6 +19,9 @@ "woocommerce/woocommerce-sniffs": "1.0.0", "wp-cli/wp-cli-bundle": "2.5.0" }, + "autoload": { + "classmap": [ "includes/" ] + }, "autoload-dev": { "psr-4": { "WooCommerce\\Stripe\\Tests\\": "tests/phpunit/" diff --git a/includes/admin/class-wc-stripe-admin-notices.php b/includes/admin/class-wc-stripe-admin-notices.php index 789acf4a51..2af4e75892 100644 --- a/includes/admin/class-wc-stripe-admin-notices.php +++ b/includes/admin/class-wc-stripe-admin-notices.php @@ -605,5 +605,3 @@ public function stripe_updated() { } } } - -new WC_Stripe_Admin_Notices(); diff --git a/includes/admin/class-wc-stripe-inbox-notes.php b/includes/admin/class-wc-stripe-inbox-notes.php index c17513cbf3..6462a81a31 100644 --- a/includes/admin/class-wc-stripe-inbox-notes.php +++ b/includes/admin/class-wc-stripe-inbox-notes.php @@ -226,5 +226,3 @@ public static function cleanup_campaign_2020() { } } } - -new WC_Stripe_Inbox_Notes(); diff --git a/includes/admin/class-wc-stripe-privacy.php b/includes/admin/class-wc-stripe-privacy.php index de01186b96..81fcd24f3d 100644 --- a/includes/admin/class-wc-stripe-privacy.php +++ b/includes/admin/class-wc-stripe-privacy.php @@ -447,5 +447,3 @@ public function is_retention_expired( $created_date ) { return $is_expired; } } - -new WC_Stripe_Privacy(); diff --git a/includes/class-wc-stripe-autoloader.php b/includes/class-wc-stripe-autoloader.php new file mode 100644 index 0000000000..a9523f0337 --- /dev/null +++ b/includes/class-wc-stripe-autoloader.php @@ -0,0 +1,219 @@ + __DIR__ . '/migrations/class-allowed-payment-request-button-types-update.php', + 'migrate_payment_request_data_to_express_checkout_data' => __DIR__ . '/migrations/class-migrate-payment-request-data-to-express-checkout-data.php', + 'wc_gateway_stripe' => __DIR__ . '/class-wc-gateway-stripe.php', + 'wc_gateway_stripe_alipay' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-alipay.php', + 'wc_gateway_stripe_bancontact' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-bancontact.php', + 'wc_gateway_stripe_boleto' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-boleto.php', + 'wc_gateway_stripe_eps' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-eps.php', + 'wc_gateway_stripe_giropay' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-giropay.php', + 'wc_gateway_stripe_ideal' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-ideal.php', + 'wc_gateway_stripe_multibanco' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-multibanco.php', + 'wc_gateway_stripe_oxxo' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-oxxo.php', + 'wc_gateway_stripe_p24' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-p24.php', + 'wc_gateway_stripe_sepa' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-sepa.php', + 'wc_gateway_stripe_sofort' => __DIR__ . '/payment-methods/class-wc-gateway-stripe-sofort.php', + 'wc_payment_token_ach' => __DIR__ . '/payment-tokens/class-wc-stripe-ach-payment-token.php', + 'wc_payment_token_acss' => __DIR__ . '/payment-tokens/class-wc-stripe-acss-payment-token.php', + 'wc_payment_token_amazon_pay' => __DIR__ . '/payment-tokens/class-wc-stripe-amazon-pay-payment-token.php', + 'wc_payment_token_bacs_debit' => __DIR__ . '/payment-tokens/class-wc-stripe-bacs-payment-token.php', + 'wc_payment_token_becs_debit' => __DIR__ . '/payment-tokens/class-wc-stripe-becs-debit-payment-token.php', + 'wc_payment_token_cashapp' => __DIR__ . '/payment-tokens/class-wc-stripe-cash-app-payment-token.php', + 'wc_payment_token_link' => __DIR__ . '/payment-tokens/class-wc-stripe-link-payment-token.php', + 'wc_payment_token_sepa' => __DIR__ . '/payment-tokens/class-wc-stripe-sepa-payment-token.php', + 'wc_rest_stripe_account_controller' => __DIR__ . '/admin/class-wc-rest-stripe-account-controller.php', + 'wc_rest_stripe_account_keys_controller' => __DIR__ . '/admin/class-wc-rest-stripe-account-keys-controller.php', + 'wc_rest_stripe_connection_tokens_controller' => __DIR__ . '/admin/class-wc-rest-stripe-connection-tokens-controller.php', + 'wc_rest_stripe_locations_controller' => __DIR__ . '/admin/class-wc-rest-stripe-locations-controller.php', + 'wc_rest_stripe_orders_controller' => __DIR__ . '/admin/class-wc-rest-stripe-orders-controller.php', + 'wc_rest_stripe_settings_controller' => __DIR__ . '/admin/class-wc-rest-stripe-settings-controller.php', + 'wc_rest_stripe_tokens_controller' => __DIR__ . '/admin/class-wc-rest-stripe-tokens-controller.php', + 'wc_stripe' => __DIR__ . '/class-wc-stripe.php', + 'wc_stripe_account' => __DIR__ . '/class-wc-stripe-account.php', + 'wc_stripe_action_scheduler_service' => __DIR__ . '/class-wc-stripe-action-scheduler-service.php', + 'wc_stripe_admin_upe_compatibility_controller' => __DIR__ . '/admin/class-wc-stripe-upe-compatibility-controller.php', + 'wc_stripe_amazon_pay_controller' => __DIR__ . '/admin/class-wc-stripe-amazon-pay-controller.php', + 'wc_stripe_api' => __DIR__ . '/class-wc-stripe-api.php', + 'wc_stripe_apple_pay' => __DIR__ . '/deprecated/class-wc-stripe-apple-pay.php', + 'wc_stripe_apple_pay_registration' => __DIR__ . '/class-wc-stripe-apple-pay-registration.php', + 'wc_stripe_blocks_support' => __DIR__ . '/class-wc-stripe-blocks-support.php', + 'wc_stripe_co_branded_cc_compatibility' => __DIR__ . '/class-wc-stripe-co-branded-cc-compatibility.php', + 'wc_stripe_connect' => __DIR__ . '/connect/class-wc-stripe-connect.php', + 'wc_stripe_connect_api' => __DIR__ . '/connect/class-wc-stripe-connect-api.php', + 'wc_stripe_connect_rest_controller' => __DIR__ . '/abstracts/abstract-wc-stripe-connect-rest-controller.php', + 'wc_stripe_connect_rest_oauth_connect_controller' => __DIR__ . '/connect/class-wc-stripe-connect-rest-oauth-connect-controller.php', + 'wc_stripe_connect_rest_oauth_init_controller' => __DIR__ . '/connect/class-wc-stripe-connect-rest-oauth-init-controller.php', + 'wc_stripe_currency_code' => __DIR__ . '/constants/class-wc-stripe-currency-code.php', + 'wc_stripe_customer' => __DIR__ . '/class-wc-stripe-customer.php', + 'wc_stripe_database_cache' => __DIR__ . '/class-wc-stripe-database-cache.php', + 'wc_stripe_email_failed_authentication' => __DIR__ . '/compat/class-wc-stripe-email-failed-authentication.php', + 'wc_stripe_email_failed_authentication_retry' => __DIR__ . '/compat/class-wc-stripe-email-failed-authentication-retry.php', + 'wc_stripe_email_failed_preorder_authentication' => __DIR__ . '/compat/class-wc-stripe-email-failed-preorder-authentication.php', + 'wc_stripe_email_failed_renewal_authentication' => __DIR__ . '/compat/class-wc-stripe-email-failed-renewal-authentication.php', + 'wc_stripe_exception' => __DIR__ . '/class-wc-stripe-exception.php', + 'wc_stripe_express_checkout_ajax_handler' => __DIR__ . '/payment-methods/class-wc-stripe-express-checkout-ajax-handler.php', + 'wc_stripe_express_checkout_element' => __DIR__ . '/payment-methods/class-wc-stripe-express-checkout-element.php', + 'wc_stripe_express_checkout_helper' => __DIR__ . '/payment-methods/class-wc-stripe-express-checkout-helper.php', + 'wc_stripe_feature_flags' => __DIR__ . '/class-wc-stripe-feature-flags.php', + 'wc_stripe_fingerprint_trait' => __DIR__ . '/payment-tokens/trait-wc-stripe-fingerprint.php', + 'wc_stripe_helper' => __DIR__ . '/class-wc-stripe-helper.php', + 'wc_stripe_hong_kong_states' => __DIR__ . '/constants/class-wc-stripe-hong-kong-states.php', + 'wc_stripe_inbox_notes' => __DIR__ . '/admin/class-wc-stripe-inbox-notes.php', + 'wc_stripe_intent_controller' => __DIR__ . '/class-wc-stripe-intent-controller.php', + 'wc_stripe_intent_status' => __DIR__ . '/constants/class-wc-stripe-intent-status.php', + 'wc_stripe_logger' => __DIR__ . '/class-wc-stripe-logger.php', + 'wc_stripe_mode' => __DIR__ . '/class-wc-stripe-mode.php', + 'wc_stripe_order' => __DIR__ . '/class-wc-stripe-order.php', + 'wc_stripe_order_handler' => __DIR__ . '/class-wc-stripe-order-handler.php', + 'wc_stripe_payment_gateway' => __DIR__ . '/abstracts/abstract-wc-stripe-payment-gateway.php', + 'wc_stripe_payment_gateway_voucher' => __DIR__ . '/abstracts/abstract-wc-stripe-payment-gateway-voucher.php', + 'wc_stripe_payment_gateways_controller' => __DIR__ . '/admin/class-wc-stripe-payment-gateways-controller.php', + 'wc_stripe_payment_method_comparison_interface' => __DIR__ . '/payment-tokens/interface-wc-stripe-payment-method-comparison.php', + 'wc_stripe_payment_method_configurations' => __DIR__ . '/class-wc-stripe-payment-method-configurations.php', + 'wc_stripe_payment_methods' => __DIR__ . '/constants/class-wc-stripe-payment-methods.php', + 'wc_stripe_payment_request' => __DIR__ . '/payment-methods/class-wc-stripe-payment-request.php', + 'wc_stripe_payment_request_button_states' => __DIR__ . '/constants/class-wc-stripe-payment-request-button-states.php', + 'wc_stripe_payment_requests_controller' => __DIR__ . '/admin/class-wc-stripe-payment-requests-controller.php', + 'wc_stripe_payment_token_cc' => __DIR__ . '/payment-tokens/class-wc-stripe-cc-payment-token.php', + 'wc_stripe_payment_tokens' => __DIR__ . '/payment-tokens/class-wc-stripe-payment-tokens.php', + 'wc_stripe_pre_orders_trait' => __DIR__ . '/compat/trait-wc-stripe-pre-orders.php', + 'wc_stripe_rest_base_controller' => __DIR__ . '/admin/class-wc-stripe-rest-base-controller.php', + 'wc_stripe_rest_upe_flag_toggle_controller' => __DIR__ . '/admin/class-wc-stripe-rest-upe-flag-toggle-controller.php', + 'wc_stripe_settings_controller' => __DIR__ . '/admin/class-wc-stripe-settings-controller.php', + 'wc_stripe_status' => __DIR__ . '/class-wc-stripe-status.php', + 'wc_stripe_subscriptions_helper' => __DIR__ . '/compat/class-wc-stripe-subscriptions-helper.php', + 'wc_stripe_subscriptions_legacy_sepa_token_update' => __DIR__ . '/compat/class-wc-stripe-subscriptions-legacy-sepa-token-update.php', + 'wc_stripe_subscriptions_trait' => __DIR__ . '/compat/trait-wc-stripe-subscriptions.php', + 'wc_stripe_subscriptions_utilities_trait' => __DIR__ . '/compat/trait-wc-stripe-subscriptions-utilities.php', + 'wc_stripe_upe_availability_note' => __DIR__ . '/notes/class-wc-stripe-upe-availability-note.php', + 'wc_stripe_upe_compatibility' => __DIR__ . '/class-wc-stripe-upe-compatibility.php', + 'wc_stripe_upe_compatibility_controller' => __DIR__ . '/admin/class-wc-stripe-upe-compatibility-controller.php', + 'wc_stripe_upe_payment_gateway' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-gateway.php', + 'wc_stripe_upe_payment_method' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method.php', + 'wc_stripe_upe_payment_method_ach' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-ach.php', + 'wc_stripe_upe_payment_method_acss' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-acss.php', + 'wc_stripe_upe_payment_method_affirm' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-affirm.php', + 'wc_stripe_upe_payment_method_afterpay_clearpay' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-afterpay-clearpay.php', + 'wc_stripe_upe_payment_method_alipay' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-alipay.php', + 'wc_stripe_upe_payment_method_amazon_pay' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-amazon-pay.php', + 'wc_stripe_upe_payment_method_bacs_debit' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-bacs-debit.php', + 'wc_stripe_upe_payment_method_bancontact' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-bancontact.php', + 'wc_stripe_upe_payment_method_becs_debit' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-becs-debit.php', + 'wc_stripe_upe_payment_method_blik' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-blik.php', + 'wc_stripe_upe_payment_method_boleto' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-boleto.php', + 'wc_stripe_upe_payment_method_cash_app_pay' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-cash-app-pay.php', + 'wc_stripe_upe_payment_method_cc' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-cc.php', + 'wc_stripe_upe_payment_method_eps' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-eps.php', + 'wc_stripe_upe_payment_method_giropay' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-giropay.php', + 'wc_stripe_upe_payment_method_ideal' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-ideal.php', + 'wc_stripe_upe_payment_method_klarna' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-klarna.php', + 'wc_stripe_upe_payment_method_link' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-link.php', + 'wc_stripe_upe_payment_method_multibanco' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-multibanco.php', + 'wc_stripe_upe_payment_method_oxxo' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-oxxo.php', + 'wc_stripe_upe_payment_method_p24' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-p24.php', + 'wc_stripe_upe_payment_method_sepa' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-sepa.php', + 'wc_stripe_upe_payment_method_sofort' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-sofort.php', + 'wc_stripe_upe_payment_method_wechat_pay' => __DIR__ . '/payment-methods/class-wc-stripe-upe-payment-method-wechat-pay.php', + 'wc_stripe_upe_stripelink_note' => __DIR__ . '/notes/class-wc-stripe-upe-stripe-link-note.php', + 'wc_stripe_webhook_handler' => __DIR__ . '/class-wc-stripe-webhook-handler.php', + 'wc_stripe_webhook_state' => __DIR__ . '/class-wc-stripe-webhook-state.php', + 'wc_stripe_woo_compat_utils' => __DIR__ . '/compat/class-wc-stripe-woo-compat-utils.php', + ]; + } + + /** + * Returns the classmap for admin-specific classes for the plugin. + * + * @return array + */ + private static function get_admin_classmap() { + return [ + 'wc_stripe_admin_inbox_notes' => __DIR__ . '/admin/class-wc-stripe-inbox-notes.php', + 'wc_stripe_admin_notices' => __DIR__ . '/admin/class-wc-stripe-admin-notices.php', + 'wc_stripe_privacy' => __DIR__ . '/admin/class-wc-stripe-privacy.php', + ]; + } +} diff --git a/includes/class-wc-stripe-customer.php b/includes/class-wc-stripe-customer.php index 9e18fa74a3..5ef6431379 100644 --- a/includes/class-wc-stripe-customer.php +++ b/includes/class-wc-stripe-customer.php @@ -20,7 +20,7 @@ class WC_Stripe_Customer { */ const STRIPE_PAYMENT_METHODS = [ WC_Stripe_UPE_Payment_Method_CC::STRIPE_ID, - WC_Stripe_UPE_Payment_Method_LINK::STRIPE_ID, + WC_Stripe_UPE_Payment_Method_Link::STRIPE_ID, WC_Stripe_UPE_Payment_Method_Sepa::STRIPE_ID, WC_Stripe_UPE_Payment_Method_Cash_App_Pay::STRIPE_ID, WC_Stripe_UPE_Payment_Method_ACH::STRIPE_ID, diff --git a/includes/class-wc-stripe.php b/includes/class-wc-stripe.php index 0a9174552f..d04cc78864 100644 --- a/includes/class-wc-stripe.php +++ b/includes/class-wc-stripe.php @@ -113,101 +113,11 @@ public function __construct() { */ public function init() { if ( is_admin() ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-privacy.php'; - } - if ( file_exists( WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-feature-flags.php' ) ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-feature-flags.php'; + new WC_Stripe_Privacy(); } - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-upe-compatibility.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-co-branded-cc-compatibility.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-exception.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-logger.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-helper.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-database-cache.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-payment-method-configurations.php'; - include_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-api.php'; - include_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-mode.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-subscriptions-helper.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/trait-wc-stripe-subscriptions-utilities.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/trait-wc-stripe-subscriptions.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/trait-wc-stripe-pre-orders.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-subscriptions-legacy-sepa-token-update.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/abstracts/abstract-wc-stripe-payment-gateway.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/abstracts/abstract-wc-stripe-payment-gateway-voucher.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-action-scheduler-service.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-webhook-state.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-webhook-handler.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/trait-wc-stripe-fingerprint.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/interface-wc-stripe-payment-method-comparison.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-cc-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-ach-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-acss-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-sepa-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-link-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-cash-app-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-bacs-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-becs-debit-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-amazon-pay-payment-token.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-apple-pay-registration.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-status.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-gateway-stripe.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/constants/class-wc-stripe-currency-code.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/constants/class-wc-stripe-payment-methods.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/constants/class-wc-stripe-intent-status.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-gateway.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-cc.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-ach.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-alipay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-bacs-debit.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-becs-debit.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-blik.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-giropay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-ideal.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-klarna.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-affirm.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-afterpay-clearpay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-bancontact.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-boleto.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-oxxo.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-eps.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-sepa.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-p24.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-sofort.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-multibanco.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-link.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-cash-app-pay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-wechat-pay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-acss.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-upe-payment-method-amazon-pay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-bancontact.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-sofort.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-giropay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-eps.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-ideal.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-p24.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-alipay.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-sepa.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-multibanco.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-boleto.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-gateway-stripe-oxxo.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-payment-request.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-express-checkout-element.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-express-checkout-helper.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-methods/class-wc-stripe-express-checkout-ajax-handler.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-woo-compat-utils.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/connect/class-wc-stripe-connect.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/connect/class-wc-stripe-connect-api.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-order-handler.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/payment-tokens/class-wc-stripe-payment-tokens.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-customer.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-intent-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-inbox-notes.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-upe-compatibility-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/migrations/class-allowed-payment-request-button-types-update.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/migrations/class-migrate-payment-request-data-to-express-checkout-data.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-account.php'; + new WC_Stripe_Inbox_Notes(); + new WC_Stripe_Apple_Pay_Registration(); new Allowed_Payment_Request_Button_Types_Update(); // TODO: Temporary disabling the migration as it has a conflict with the new UPE checkout. @@ -225,27 +135,23 @@ public function init() { $intent_controller->init_hooks(); if ( is_admin() ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-admin-notices.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-settings-controller.php'; + new WC_Stripe_Admin_Notices(); if ( isset( $_GET['area'] ) && 'payment_requests' === $_GET['area'] ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-payment-requests-controller.php'; new WC_Stripe_Payment_Requests_Controller(); } elseif ( isset( $_GET['area'] ) && 'amazon_pay' === $_GET['area'] && WC_Stripe_Feature_Flags::is_amazon_pay_available() ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-amazon-pay-controller.php'; new WC_Stripe_Amazon_Pay_Controller(); } else { new WC_Stripe_Settings_Controller( $this->account ); } if ( WC_Stripe_Feature_Flags::is_upe_checkout_enabled() ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-payment-gateways-controller.php'; new WC_Stripe_Payment_Gateways_Controller(); } } // REMOVE IN THE FUTURE. - require_once WC_STRIPE_PLUGIN_PATH . '/includes/deprecated/class-wc-stripe-apple-pay.php'; + new WC_Stripe_Apple_Pay(); add_filter( 'woocommerce_payment_gateways', [ $this, 'add_gateways' ] ); add_filter( 'pre_update_option_woocommerce_stripe_settings', [ $this, 'gateway_settings_update' ], 10, 2 ); @@ -682,11 +588,6 @@ protected function disable_upe( $settings ) { * @return WC_Email[] */ public function add_emails( $email_classes ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-email-failed-authentication.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-email-failed-renewal-authentication.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-email-failed-preorder-authentication.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/compat/class-wc-stripe-email-failed-authentication-retry.php'; - // Add all emails, generated by the gateway. $email_classes['WC_Stripe_Email_Failed_Renewal_Authentication'] = new WC_Stripe_Email_Failed_Renewal_Authentication( $email_classes ); $email_classes['WC_Stripe_Email_Failed_Preorder_Authentication'] = new WC_Stripe_Email_Failed_Preorder_Authentication( $email_classes ); @@ -701,17 +602,6 @@ public function add_emails( $email_classes ) { * New endpoints/controllers can be added here. */ public function register_routes() { - /** API includes */ - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-rest-base-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/abstracts/abstract-wc-stripe-connect-rest-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-account-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-connection-tokens-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-locations-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-orders-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-tokens-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/connect/class-wc-stripe-connect-rest-oauth-init-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/connect/class-wc-stripe-connect-rest-oauth-connect-controller.php'; - $connection_tokens_controller = new WC_REST_Stripe_Connection_Tokens_Controller( $this->get_main_stripe_gateway() ); $locations_controller = new WC_REST_Stripe_Locations_Controller(); $orders_controller = new WC_REST_Stripe_Orders_Controller( $this->get_main_stripe_gateway() ); @@ -729,10 +619,6 @@ public function register_routes() { $stripe_account_controller->register_routes(); if ( WC_Stripe_Feature_Flags::is_upe_preview_enabled() ) { - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-settings-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-stripe-rest-upe-flag-toggle-controller.php'; - require_once WC_STRIPE_PLUGIN_PATH . '/includes/admin/class-wc-rest-stripe-account-keys-controller.php'; - $upe_flag_toggle_controller = new WC_Stripe_REST_UPE_Flag_Toggle_Controller(); $upe_flag_toggle_controller->register_routes(); diff --git a/includes/deprecated/class-wc-stripe-apple-pay.php b/includes/deprecated/class-wc-stripe-apple-pay.php index 2179169211..b5500a4431 100644 --- a/includes/deprecated/class-wc-stripe-apple-pay.php +++ b/includes/deprecated/class-wc-stripe-apple-pay.php @@ -33,5 +33,3 @@ public function __call( $name, $arguments ) { } } } - -new WC_Stripe_Apple_Pay(); diff --git a/package.json b/package.json index c1cc471381..8e776a2126 100644 --- a/package.json +++ b/package.json @@ -119,10 +119,11 @@ "postinstall": "composer install && npx playwright install", "prebuild": "npm install && composer install", "prepare": "is-ci || husky install", - "build": "npm run uglify && npm run sass && rimraf build/* && npm run build:webpack && npm run build:i18n && npm run build:release", + "build": "npm run uglify && npm run sass && rimraf build/* && npm run build:webpack && npm run build:i18n && npm run build:deps && npm run build:release", "build:i18n": "npm run i18n:makepot && npm run i18n:merge", "build:release": "node tasks/release.js && mv release/woocommerce-gateway-stripe.zip .", "build:webpack": "wp-scripts build", + "build:deps": "rm -rf vendor && composer install --no-dev --classmap-authoritative", "i18n:makepot": "./vendor/bin/wp i18n make-pot . languages/woocommerce-gateway-stripe.pot --exclude=assets,bin,build,docker,docs,node_modules,release,tests,vendor", "i18n:merge": "php bin/update-pot-file-references.php languages/woocommerce-gateway-stripe.pot", "start": "npm run start:webpack", diff --git a/readme.txt b/readme.txt index 2576d674a5..0bdb7f6a01 100644 --- a/readme.txt +++ b/readme.txt @@ -151,6 +151,7 @@ If you get stuck, you can ask for help in the [Plugin Forum](https://wordpress.o * Update - Support block checkout custom fields when using express payment methods like Apple Pay and Google Pay * Dev - Fix failing optimized checkout e2e test due to incorrect order of operations * Tweak - Remove Payment Method Configurations fallback cache +* Dev - Implement a class autoloader for the plugin to reduce unnecessary file loads * Fix - Show correct price in express checkout for zero decimal currencies * Fix - Fix buggy unsaved changes warning in settings page * Fix - Use the platform's payment method configuration id constant when rendering the Optimized Checkout diff --git a/tasks/release.js b/tasks/release.js index 9e968abc74..4c4e5cfeba 100644 --- a/tasks/release.js +++ b/tasks/release.js @@ -17,6 +17,7 @@ const filesToCopy = [ 'includes', 'languages', 'templates', + 'vendor', 'woocommerce-gateway-stripe.php', 'changelog.txt', 'readme.txt', diff --git a/woocommerce-gateway-stripe.php b/woocommerce-gateway-stripe.php index 6ecc2865f8..82947b892e 100644 --- a/woocommerce-gateway-stripe.php +++ b/woocommerce-gateway-stripe.php @@ -81,8 +81,15 @@ function woocommerce_gateway_stripe() { static $plugin; if ( ! isset( $plugin ) ) { - require_once __DIR__ . '/includes/class-wc-stripe.php'; - + // Attempts to include the default composer autoloader. + $autoload_filepath = __DIR__ . '/vendor/autoload.php'; + if ( file_exists( $autoload_filepath ) ) { + require $autoload_filepath; + } elseif ( file_exists( __DIR__ . '/includes/class-wc-stripe-autoloader.php' ) ) { + // Initialize our custom autoloader as a fallback. + require_once __DIR__ . '/includes/class-wc-stripe-autoloader.php'; + WC_Stripe_Autoloader::init(); + } $plugin = WC_Stripe::get_instance(); }