diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 73239fc66..b17258473 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -24,6 +24,7 @@ use WooCommerce\PayPalCommerce\WcGateway\Admin\RenderAuthorizeAction; use WooCommerce\PayPalCommerce\WcGateway\Checkout\CheckoutPayPalAddressPreset; use WooCommerce\PayPalCommerce\WcGateway\Checkout\DisableGateways; use WooCommerce\PayPalCommerce\WcGateway\Endpoint\ReturnUrlEndpoint; +use WooCommerce\PayPalCommerce\WcGateway\FundingSource\FundingSourceRenderer; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\TransactionUrlProvider; @@ -45,6 +46,7 @@ return array( 'wcgateway.paypal-gateway' => static function ( ContainerInterface $container ): PayPalGateway { $order_processor = $container->get( 'wcgateway.order-processor' ); $settings_renderer = $container->get( 'wcgateway.settings.render' ); + $funding_source_renderer = $container->get( 'wcgateway.funding-source.renderer' ); $authorized_payments = $container->get( 'wcgateway.processor.authorized-payments' ); $settings = $container->get( 'wcgateway.settings' ); $session_handler = $container->get( 'session.handler' ); @@ -60,6 +62,7 @@ return array( $logger = $container->get( 'woocommerce.logger.woocommerce' ); return new PayPalGateway( $settings_renderer, + $funding_source_renderer, $order_processor, $authorized_payments, $settings, @@ -2030,4 +2033,10 @@ return array( $container->get( 'api.shop.country' ) ); }, + + 'wcgateway.funding-source.renderer' => function ( ContainerInterface $container ) : FundingSourceRenderer { + return new FundingSourceRenderer( + $container->get( 'wcgateway.settings' ) + ); + }, ); diff --git a/modules/ppcp-wc-gateway/src/FundingSource/FundingSourceRenderer.php b/modules/ppcp-wc-gateway/src/FundingSource/FundingSourceRenderer.php new file mode 100644 index 000000000..3d7ad050f --- /dev/null +++ b/modules/ppcp-wc-gateway/src/FundingSource/FundingSourceRenderer.php @@ -0,0 +1,61 @@ +settings = $settings; + } + + /** + * Returns name of the funding source (suitable for displaying to user). + * + * @param string $id The ID of the funding source, such as 'venmo'. + */ + public function render_name( string $id ): string { + if ( 'venmo' === $id ) { + return __( 'Venmo', 'woocommerce-paypal-payments' ); + } + return $this->settings->has( 'title' ) ? + $this->settings->get( 'title' ) + : __( 'PayPal', 'woocommerce-paypal-payments' ); + } + + /** + * Returns description of the funding source (for checkout). + * + * @param string $id The ID of the funding source, such as 'venmo'. + */ + public function render_description( string $id ): string { + if ( 'venmo' === $id ) { + return __( 'Pay via Venmo.', 'woocommerce-paypal-payments' ); + } + return $this->settings->has( 'description' ) ? + $this->settings->get( 'description' ) + : __( 'Pay via PayPal.', 'woocommerce-paypal-payments' ); + } +} diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php b/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php index 475945a36..162b2934d 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php @@ -18,6 +18,7 @@ use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\Subscription\Helper\SubscriptionHelper; use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenRepository; +use WooCommerce\PayPalCommerce\WcGateway\FundingSource\FundingSourceRenderer; use WooCommerce\PayPalCommerce\WcGateway\Processor\AuthorizedPaymentsProcessor; use WooCommerce\PayPalCommerce\WcGateway\Processor\OrderProcessor; use WooCommerce\PayPalCommerce\WcGateway\Processor\RefundProcessor; @@ -44,6 +45,13 @@ class PayPalGateway extends \WC_Payment_Gateway { */ protected $settings_renderer; + /** + * The funding source renderer. + * + * @var FundingSourceRenderer + */ + protected $funding_source_renderer; + /** * The processor for orders. * @@ -153,6 +161,7 @@ class PayPalGateway extends \WC_Payment_Gateway { * PayPalGateway constructor. * * @param SettingsRenderer $settings_renderer The Settings Renderer. + * @param FundingSourceRenderer $funding_source_renderer The funding source renderer. * @param OrderProcessor $order_processor The Order Processor. * @param AuthorizedPaymentsProcessor $authorized_payments_processor The Authorized Payments Processor. * @param ContainerInterface $config The settings. @@ -170,6 +179,7 @@ class PayPalGateway extends \WC_Payment_Gateway { */ public function __construct( SettingsRenderer $settings_renderer, + FundingSourceRenderer $funding_source_renderer, OrderProcessor $order_processor, AuthorizedPaymentsProcessor $authorized_payments_processor, ContainerInterface $config, @@ -190,6 +200,7 @@ class PayPalGateway extends \WC_Payment_Gateway { $this->order_processor = $order_processor; $this->authorized_payments_processor = $authorized_payments_processor; $this->settings_renderer = $settings_renderer; + $this->funding_source_renderer = $funding_source_renderer; $this->config = $config; $this->session_handler = $session_handler; $this->refund_processor = $refund_processor; @@ -242,9 +253,9 @@ class PayPalGateway extends \WC_Payment_Gateway { $this->config->get( 'description' ) : $this->method_description; $funding_source = $this->session_handler->funding_source(); - if ( 'venmo' === $funding_source ) { - $this->title = 'Venmo'; - $this->description = __( 'Pay via Venmo.', 'woocommerce-paypal-payments' ); + if ( $funding_source ) { + $this->title = $this->funding_source_renderer->render_name( $funding_source ); + $this->description = $this->funding_source_renderer->render_description( $funding_source ); } $this->init_form_fields(); diff --git a/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php b/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php index c7cca8b69..0df1b0e99 100644 --- a/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php +++ b/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php @@ -16,6 +16,7 @@ use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\Subscription\Helper\SubscriptionHelper; use WooCommerce\PayPalCommerce\TestCase; use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenRepository; +use WooCommerce\PayPalCommerce\WcGateway\FundingSource\FundingSourceRenderer; use WooCommerce\PayPalCommerce\WcGateway\Notice\AuthorizeOrderActionNotice; use WooCommerce\PayPalCommerce\WcGateway\Processor\AuthorizedPaymentsProcessor; use WooCommerce\PayPalCommerce\WcGateway\Processor\OrderProcessor; @@ -33,6 +34,7 @@ class WcGatewayTest extends TestCase private $fundingSource = null; private $settingsRenderer; + private $funding_source_renderer; private $orderProcessor; private $authorizedOrdersProcessor; private $settings; @@ -67,6 +69,7 @@ class WcGatewayTest extends TestCase $this->logger = Mockery::mock(LoggerInterface::class); $this->paymentsEndpoint = Mockery::mock(PaymentsEndpoint::class); $this->orderEndpoint = Mockery::mock(OrderEndpoint::class); + $this->funding_source_renderer = new FundingSourceRenderer($this->settings); $this->onboardingState->shouldReceive('current_state')->andReturn(State::STATE_ONBOARDED); @@ -85,6 +88,7 @@ class WcGatewayTest extends TestCase { return new PayPalGateway( $this->settingsRenderer, + $this->funding_source_renderer, $this->orderProcessor, $this->authorizedOrdersProcessor, $this->settings,