2626use WooCommerce \PayPalCommerce \WcGateway \Gateway \CreditCardGateway ;
2727use WooCommerce \PayPalCommerce \WcGateway \Gateway \PayPalGateway ;
2828use WooCommerce \PayPalCommerce \WcGateway \Processor \TransactionIdHandlingTrait ;
29- use WooCommerce \PayPalCommerce \WcGateway \ Settings \Settings ;
29+ use WooCommerce \PayPalCommerce \Settings \Data \ SettingsProvider ;
3030use WooCommerce \PayPalCommerce \WcSubscriptions \Endpoint \SubscriptionChangePaymentMethod ;
3131use WooCommerce \PayPalCommerce \WcSubscriptions \Helper \FreeTrialSubscriptionHelper ;
3232use WooCommerce \PayPalCommerce \WcSubscriptions \Helper \SubscriptionHelper ;
@@ -487,10 +487,13 @@ private function add_gateways_support( ContainerInterface $c ): void {
487487 add_filter (
488488 'woocommerce_paypal_payments_paypal_gateway_supports ' ,
489489 function ( array $ supports ) use ( $ c ): array {
490- $ settings = $ c ->get ( 'wcgateway .settings ' );
491- assert ( $ settings instanceof Settings );
490+ $ settings_provider = $ c ->get ( 'settings .settings-provider ' );
491+ assert ( $ settings_provider instanceof SettingsProvider );
492492
493- $ subscriptions_mode = $ settings ->has ( 'subscriptions_mode ' ) ? $ settings ->get ( 'subscriptions_mode ' ) : '' ;
493+ $ subscription_helper = $ c ->get ( 'wc-subscriptions.helper ' );
494+ assert ( $ subscription_helper instanceof SubscriptionHelper );
495+
496+ $ subscriptions_mode = $ this ->get_subscriptions_mode ( $ settings_provider , $ subscription_helper );
494497 if ( 'disable_paypal_subscriptions ' === $ subscriptions_mode ) {
495498 return $ supports ;
496499 }
@@ -504,15 +507,17 @@ function ( array $supports ) use ( $c ): array {
504507 add_filter (
505508 'woocommerce_paypal_payments_credit_card_gateway_supports ' ,
506509 function ( array $ supports ) use ( $ c ): array {
507- $ settings = $ c ->get ( 'wcgateway.settings ' );
508- assert ( $ settings instanceof Settings );
510+ $ settings_provider = $ c ->get ( 'settings.settings-provider ' );
511+ assert ( $ settings_provider instanceof SettingsProvider );
512+
513+ $ subscription_helper = $ c ->get ( 'wc-subscriptions.helper ' );
514+ assert ( $ subscription_helper instanceof SubscriptionHelper );
509515
510- $ subscriptions_mode = $ settings -> has ( ' subscriptions_mode ' ) ? $ settings -> get ( ' subscriptions_mode ' ) : '' ;
516+ $ subscriptions_mode = $ this -> get_subscriptions_mode ( $ settings_provider , $ subscription_helper ) ;
511517 if ( 'disable_paypal_subscriptions ' === $ subscriptions_mode ) {
512518 return $ supports ;
513519 }
514- $ vaulting_enabled = $ settings ->has ( 'vault_enabled_dcc ' ) && $ settings ->get ( 'vault_enabled_dcc ' );
515- if ( ! $ vaulting_enabled ) {
520+ if ( ! $ settings_provider ->save_card_details () ) {
516521 return $ supports ;
517522 }
518523 return array_merge (
@@ -525,10 +530,13 @@ function ( array $supports ) use ( $c ): array {
525530 add_filter (
526531 'woocommerce_paypal_payments_card_button_gateway_supports ' ,
527532 function ( array $ supports ) use ( $ c ): array {
528- $ settings = $ c ->get ( 'wcgateway .settings ' );
529- assert ( $ settings instanceof Settings );
533+ $ settings_provider = $ c ->get ( 'settings .settings-provider ' );
534+ assert ( $ settings_provider instanceof SettingsProvider );
530535
531- $ subscriptions_mode = $ settings ->has ( 'subscriptions_mode ' ) ? $ settings ->get ( 'subscriptions_mode ' ) : '' ;
536+ $ subscription_helper = $ c ->get ( 'wc-subscriptions.helper ' );
537+ assert ( $ subscription_helper instanceof SubscriptionHelper );
538+
539+ $ subscriptions_mode = $ this ->get_subscriptions_mode ( $ settings_provider , $ subscription_helper );
532540 if ( 'disable_paypal_subscriptions ' === $ subscriptions_mode ) {
533541 return $ supports ;
534542 }
@@ -539,4 +547,33 @@ function ( array $supports ) use ( $c ): array {
539547 }
540548 );
541549 }
550+
551+ /**
552+ * Gets the subscriptions mode based on settings.
553+ *
554+ * @param SettingsProvider $settings_provider The settings provider.
555+ * @param SubscriptionHelper $subscription_helper The subscription helper.
556+ * @return string The subscriptions mode ('vaulting_api', 'subscriptions_api', or 'disable_paypal_subscriptions').
557+ */
558+ private function get_subscriptions_mode (
559+ SettingsProvider $ settings_provider ,
560+ SubscriptionHelper $ subscription_helper
561+ ): string {
562+ if ( ! $ subscription_helper ->plugin_is_active () ) {
563+ return '' ;
564+ }
565+
566+ $ subscription_mode_disabled = (bool ) apply_filters (
567+ 'woocommerce_paypal_payments_subscription_mode_disabled ' ,
568+ false
569+ );
570+
571+ if ( $ subscription_mode_disabled ) {
572+ return 'disable_paypal_subscriptions ' ;
573+ }
574+
575+ return $ settings_provider ->save_paypal_and_venmo ()
576+ ? 'vaulting_api '
577+ : 'subscriptions_api ' ;
578+ }
542579}
0 commit comments