diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 7e3ff7eca..6a95c98a2 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -231,8 +231,11 @@ return array( 'wcgateway.settings.sections-renderer' => static function ( ContainerInterface $container ): SectionsRenderer { return new SectionsRenderer( $container->get( 'wcgateway.current-ppcp-settings-page-id' ), - $container->get( 'wcgateway.settings.sections' ), - $container->get( 'onboarding.state' ) + $container->get( 'onboarding.state' ), + $container->get( 'wcgateway.helper.dcc-product-status' ), + $container->get( 'api.helpers.dccapplies' ), + $container->get( 'button.helper.messages-apply' ), + $container->get( 'wcgateway.pay-upon-invoice-product-status' ) ); }, 'wcgateway.settings.header-renderer' => static function ( ContainerInterface $container ): HeaderRenderer { @@ -241,52 +244,6 @@ return array( $container->get( 'wcgateway.url' ) ); }, - 'wcgateway.settings.sections' => static function ( ContainerInterface $container ): array { - $sections = array( - Settings::CONNECTION_TAB_ID => __( 'Connection', 'woocommerce-paypal-payments' ), - PayPalGateway::ID => __( 'Standard Payments', 'woocommerce-paypal-payments' ), - Settings::PAY_LATER_TAB_ID => __( 'Pay Later', 'woocommerce-paypal-payments' ), - CreditCardGateway::ID => __( 'Advanced Card Processing', 'woocommerce-paypal-payments' ), - CardButtonGateway::ID => __( 'Standard Card Button', 'woocommerce-paypal-payments' ), - OXXOGateway::ID => __( 'OXXO', 'woocommerce-paypal-payments' ), - PayUponInvoiceGateway::ID => __( 'Pay upon Invoice', 'woocommerce-paypal-payments' ), - ); - - // Remove for all not registered in WC gateways that cannot render anything in this case. - $gateways = WC()->payment_gateways->payment_gateways(); - foreach ( array_diff( - array_keys( $sections ), - array( Settings::CONNECTION_TAB_ID, PayPalGateway::ID, CreditCardGateway::ID, Settings::PAY_LATER_TAB_ID ) - ) as $id ) { - if ( ! isset( $gateways[ $id ] ) ) { - unset( $sections[ $id ] ); - } - } - - $dcc_product_status = $container->get( 'wcgateway.helper.dcc-product-status' ); - assert( $dcc_product_status instanceof DCCProductStatus ); - $dcc_applies = $container->get( 'api.helpers.dccapplies' ); - assert( $dcc_applies instanceof DccApplies ); - if ( ! $dcc_product_status->dcc_is_active() || ! $dcc_applies->for_country_currency() ) { - unset( $sections['ppcp-credit-card-gateway'] ); - } - - $messages_apply = $container->get( 'button.helper.messages-apply' ); - assert( $messages_apply instanceof MessagesApply ); - - if ( ! $messages_apply->for_country() ) { - unset( $sections[ Settings::PAY_LATER_TAB_ID ] ); - } - - $pui_product_status = $container->get( 'wcgateway.pay-upon-invoice-product-status' ); - assert( $pui_product_status instanceof PayUponInvoiceProductStatus ); - - if ( ! $pui_product_status->pui_is_active() ) { - unset( $sections[ PayUponInvoiceGateway::ID ] ); - } - - return $sections; - }, 'wcgateway.settings.status' => static function ( ContainerInterface $container ): SettingsStatus { $settings = $container->get( 'wcgateway.settings' ); return new SettingsStatus( $settings ); diff --git a/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php b/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php index 753caef1a..93ec4a6d4 100644 --- a/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php +++ b/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php @@ -9,8 +9,16 @@ declare( strict_types=1 ); namespace WooCommerce\PayPalCommerce\WcGateway\Settings; +use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; +use WooCommerce\PayPalCommerce\Button\Helper\MessagesApply; use WooCommerce\PayPalCommerce\Onboarding\State; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\OXXO\OXXOGateway; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\PayUponInvoiceGateway; +use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCProductStatus; +use WooCommerce\PayPalCommerce\WcGateway\Helper\PayUponInvoiceProductStatus; /** * Class SectionsRenderer @@ -26,13 +34,6 @@ class SectionsRenderer { */ protected $page_id; - /** - * Key - page/gateway ID, value - displayed text. - * - * @var array - */ - protected $sections; - /** * The onboarding state. * @@ -40,17 +41,65 @@ class SectionsRenderer { */ private $state; + /** + * The DCC product status + * + * @var DCCProductStatus + */ + private $dcc_product_status; + + /** + * The DCC applies + * + * @var DccApplies + */ + private $dcc_applies; + + /** + * The messages apply. + * + * @var MessagesApply + */ + private $messages_apply; + + /** + * The PUI product status. + * + * @var PayUponInvoiceProductStatus + */ + private $pui_product_status; + /** * SectionsRenderer constructor. * * @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page. - * @param array $sections Key - page/gateway ID, value - displayed text. * @param State $state The onboarding state. */ - public function __construct( string $page_id, array $sections, State $state ) { + + /** + * SectionsRenderer constructor. + * + * @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page. + * @param State $state The onboarding state. + * @param DCCProductStatus $dcc_product_status The DCC product status. + * @param DccApplies $dcc_applies The DCC applies. + * @param MessagesApply $messages_apply The Messages apply + * @param PayUponInvoiceProductStatus $pui_product_status The PUI product status. + */ + public function __construct( + string $page_id, + State $state, + DCCProductStatus $dcc_product_status, + DccApplies $dcc_applies, + MessagesApply $messages_apply, + PayUponInvoiceProductStatus $pui_product_status + ) { $this->page_id = $page_id; - $this->sections = $sections; $this->state = $state; + $this->dcc_product_status = $dcc_product_status; + $this->dcc_applies = $dcc_applies; + $this->messages_apply = $messages_apply; + $this->pui_product_status = $pui_product_status; } /** @@ -66,6 +115,8 @@ class SectionsRenderer { /** * Renders the Sections tab. + * + * @return string */ public function render(): string { if ( ! $this->should_render() ) { @@ -74,7 +125,7 @@ class SectionsRenderer { $html = '