mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-05 08:59:14 +08:00
Merge pull request #754 from woocommerce/pcp-839-unavailable-gateways-sections
Refactor sections renderer, hide unavailable sections
This commit is contained in:
commit
168e8030c0
2 changed files with 40 additions and 31 deletions
|
@ -211,9 +211,32 @@ 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( 'api.shop.country' )
|
$container->get( 'wcgateway.settings.sections' )
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
'wcgateway.settings.sections' => static function ( ContainerInterface $container ): array {
|
||||||
|
$sections = array(
|
||||||
|
PayPalGateway::ID => __( 'PayPal Checkout', 'woocommerce-paypal-payments' ),
|
||||||
|
CreditCardGateway::ID => __( 'PayPal Card Processing', 'woocommerce-paypal-payments' ),
|
||||||
|
CardButtonGateway::ID => __( 'PayPal Card Button', 'woocommerce-paypal-payments' ),
|
||||||
|
OXXOGateway::ID => __( 'OXXO', 'woocommerce-paypal-payments' ),
|
||||||
|
PayUponInvoiceGateway::ID => __( 'Pay upon Invoice', 'woocommerce-paypal-payments' ),
|
||||||
|
WebhooksStatusPage::ID => __( 'Webhooks Status', '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( PayPalGateway::ID, CreditCardGateway::ID, WebhooksStatusPage::ID )
|
||||||
|
) as $id ) {
|
||||||
|
if ( ! isset( $gateways[ $id ] ) ) {
|
||||||
|
unset( $sections[ $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,11 +9,7 @@ declare( strict_types=1 );
|
||||||
|
|
||||||
namespace WooCommerce\PayPalCommerce\WcGateway\Settings;
|
namespace WooCommerce\PayPalCommerce\WcGateway\Settings;
|
||||||
|
|
||||||
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\Webhooks\Status\WebhooksStatusPage;
|
use WooCommerce\PayPalCommerce\Webhooks\Status\WebhooksStatusPage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,21 +27,21 @@ class SectionsRenderer {
|
||||||
protected $page_id;
|
protected $page_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The api shop country.
|
* Key - page/gateway ID, value - displayed text.
|
||||||
*
|
*
|
||||||
* @var string
|
* @var array<string, string>
|
||||||
*/
|
*/
|
||||||
protected $api_shop_country;
|
protected $sections;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 string $api_shop_country The api shop country.
|
* @param array<string, string> $sections Key - page/gateway ID, value - displayed text.
|
||||||
*/
|
*/
|
||||||
public function __construct( string $page_id, string $api_shop_country ) {
|
public function __construct( string $page_id, array $sections ) {
|
||||||
$this->page_id = $page_id;
|
$this->page_id = $page_id;
|
||||||
$this->api_shop_country = $api_shop_country;
|
$this->sections = $sections;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -65,27 +61,17 @@ class SectionsRenderer {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sections = array(
|
|
||||||
PayPalGateway::ID => __( 'PayPal Checkout', 'woocommerce-paypal-payments' ),
|
|
||||||
CreditCardGateway::ID => __( 'PayPal Card Processing', 'woocommerce-paypal-payments' ),
|
|
||||||
CardButtonGateway::ID => __( 'PayPal Card Button', 'woocommerce-paypal-payments' ),
|
|
||||||
OXXOGateway::ID => __( 'OXXO', 'woocommerce-paypal-payments' ),
|
|
||||||
PayUponInvoiceGateway::ID => __( 'Pay upon Invoice', 'woocommerce-paypal-payments' ),
|
|
||||||
WebhooksStatusPage::ID => __( 'Webhooks Status', 'woocommerce-paypal-payments' ),
|
|
||||||
);
|
|
||||||
|
|
||||||
if ( 'DE' !== $this->api_shop_country ) {
|
|
||||||
unset( $sections[ PayUponInvoiceGateway::ID ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '<ul class="subsubsub">';
|
echo '<ul class="subsubsub">';
|
||||||
|
|
||||||
$array_keys = array_keys( $sections );
|
$array_keys = array_keys( $this->sections );
|
||||||
|
|
||||||
foreach ( $sections as $id => $label ) {
|
foreach ( $this->sections as $id => $label ) {
|
||||||
$url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway&' . self::KEY . '=' . $id );
|
$url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=' . $id );
|
||||||
if ( in_array( $id, array( PayUponInvoiceGateway::ID, CardButtonGateway::ID, OXXOGateway::ID ), true ) ) {
|
if ( in_array( $id, array( CreditCardGateway::ID, WebhooksStatusPage::ID ), true ) ) {
|
||||||
$url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=' . $id );
|
// We need section=ppcp-gateway for the webhooks page because it is not a gateway,
|
||||||
|
// and for DCC because otherwise it will not render the page if gateway is not available (country/currency).
|
||||||
|
// Other gateways render fields differently, and their pages are not expected to work when gateway is not available.
|
||||||
|
$url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway&' . self::KEY . '=' . $id );
|
||||||
}
|
}
|
||||||
echo '<li><a href="' . esc_url( $url ) . '" class="' . ( $this->page_id === $id ? 'current' : '' ) . '">' . esc_html( $label ) . '</a> ' . ( end( $array_keys ) === $id ? '' : '|' ) . ' </li>';
|
echo '<li><a href="' . esc_url( $url ) . '" class="' . ( $this->page_id === $id ? 'current' : '' ) . '">' . esc_html( $label ) . '</a> ' . ( end( $array_keys ) === $id ? '' : '|' ) . ' </li>';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue