mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-01 07:02:48 +08:00
Move settings sections service to sections render class
This commit is contained in:
parent
af34a0cbce
commit
8a1d38ec0e
2 changed files with 109 additions and 59 deletions
|
@ -231,8 +231,11 @@ return array(
|
||||||
'wcgateway.settings.sections-renderer' => static function ( ContainerInterface $container ): SectionsRenderer {
|
'wcgateway.settings.sections-renderer' => static function ( ContainerInterface $container ): SectionsRenderer {
|
||||||
return new SectionsRenderer(
|
return new SectionsRenderer(
|
||||||
$container->get( 'wcgateway.current-ppcp-settings-page-id' ),
|
$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 {
|
'wcgateway.settings.header-renderer' => static function ( ContainerInterface $container ): HeaderRenderer {
|
||||||
|
@ -241,52 +244,6 @@ return array(
|
||||||
$container->get( 'wcgateway.url' )
|
$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 {
|
'wcgateway.settings.status' => static function ( ContainerInterface $container ): SettingsStatus {
|
||||||
$settings = $container->get( 'wcgateway.settings' );
|
$settings = $container->get( 'wcgateway.settings' );
|
||||||
return new SettingsStatus( $settings );
|
return new SettingsStatus( $settings );
|
||||||
|
|
|
@ -9,8 +9,16 @@ declare( strict_types=1 );
|
||||||
|
|
||||||
namespace WooCommerce\PayPalCommerce\WcGateway\Settings;
|
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\Onboarding\State;
|
||||||
|
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway;
|
||||||
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway;
|
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
|
* Class SectionsRenderer
|
||||||
|
@ -26,13 +34,6 @@ class SectionsRenderer {
|
||||||
*/
|
*/
|
||||||
protected $page_id;
|
protected $page_id;
|
||||||
|
|
||||||
/**
|
|
||||||
* Key - page/gateway ID, value - displayed text.
|
|
||||||
*
|
|
||||||
* @var array<string, string>
|
|
||||||
*/
|
|
||||||
protected $sections;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The onboarding state.
|
* The onboarding state.
|
||||||
*
|
*
|
||||||
|
@ -40,17 +41,65 @@ class SectionsRenderer {
|
||||||
*/
|
*/
|
||||||
private $state;
|
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.
|
* SectionsRenderer constructor.
|
||||||
*
|
*
|
||||||
* @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page.
|
* @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page.
|
||||||
* @param array<string, string> $sections Key - page/gateway ID, value - displayed text.
|
|
||||||
* @param State $state The onboarding state.
|
* @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->page_id = $page_id;
|
||||||
$this->sections = $sections;
|
|
||||||
$this->state = $state;
|
$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.
|
* Renders the Sections tab.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function render(): string {
|
public function render(): string {
|
||||||
if ( ! $this->should_render() ) {
|
if ( ! $this->should_render() ) {
|
||||||
|
@ -74,7 +125,7 @@ class SectionsRenderer {
|
||||||
|
|
||||||
$html = '<nav class="nav-tab-wrapper woo-nav-tab-wrapper">';
|
$html = '<nav class="nav-tab-wrapper woo-nav-tab-wrapper">';
|
||||||
|
|
||||||
foreach ( $this->sections as $id => $label ) {
|
foreach ( $this->sections() as $id => $label ) {
|
||||||
$url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=' . $id );
|
$url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=' . $id );
|
||||||
if ( in_array( $id, array( Settings::CONNECTION_TAB_ID, CreditCardGateway::ID, Settings::PAY_LATER_TAB_ID ), true ) ) {
|
if ( in_array( $id, array( Settings::CONNECTION_TAB_ID, CreditCardGateway::ID, Settings::PAY_LATER_TAB_ID ), true ) ) {
|
||||||
// We need section=ppcp-gateway for the webhooks page because it is not a gateway,
|
// We need section=ppcp-gateway for the webhooks page because it is not a gateway,
|
||||||
|
@ -89,4 +140,46 @@ class SectionsRenderer {
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns sections as Key - page/gateway ID, value - displayed text.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function sections(): 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 ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $this->dcc_product_status->dcc_is_active() || ! $this->dcc_applies->for_country_currency() ) {
|
||||||
|
unset( $sections['ppcp-credit-card-gateway'] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $this->messages_apply->for_country() ) {
|
||||||
|
unset( $sections[ Settings::PAY_LATER_TAB_ID ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $this->pui_product_status->pui_is_active() ) {
|
||||||
|
unset( $sections[ PayUponInvoiceGateway::ID ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sections;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue