woocommerce-paypal-payments/modules/ppcp-uninstall/services.php
Narek Zakarian a233bc529a
fix: clear BCDC migration override flag on plugin uninstall
Add OPTION_NAME_BCDC_MIGRATION_OVERRIDE to uninstall cleanup list to
ensure the BCDC migration override flag is removed when plugin is
uninstalled. This prevents the flag from persisting and incorrectly
affecting payment method availability if the plugin is reinstalled.

Addresses issue where flag could prevent Fastlane/ACDC access when
merchants reconnect with different accounts after reinstalling plugin.
2025-10-15 12:58:20 +04:00

100 lines
4.2 KiB
PHP

<?php
/**
* The uninstall module services.
*
* @package WooCommerce\PayPalCommerce\Uninstall
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\Uninstall;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PayPalRequestIdRepository;
use WooCommerce\PayPalCommerce\Settings\Ajax\SwitchSettingsUiEndpoint;
use WooCommerce\PayPalCommerce\Settings\Service\Migration\PaymentSettingsMigration;
use WooCommerce\PayPalCommerce\Uninstall\Assets\ClearDatabaseAssets;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\PayUponInvoiceGateway;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
use WooCommerce\PayPalCommerce\Webhooks\Status\WebhookSimulation;
use WooCommerce\PayPalCommerce\Webhooks\WebhookRegistrar;
return array(
'uninstall.ppcp-all-option-names' => function ( ContainerInterface $container ): array {
return array(
$container->get( 'webhook.last-webhook-storage.key' ),
'woocommerce_ppcp-is_pay_later_settings_migrated',
'woocommerce_' . PayPalGateway::ID . '_settings',
'woocommerce_' . CreditCardGateway::ID . '_settings',
'woocommerce_' . PayUponInvoiceGateway::ID . '_settings',
'woocommerce_' . CardButtonGateway::ID . '_settings',
Settings::KEY,
'woocommerce-ppcp-version',
WebhookSimulation::OPTION_ID,
WebhookRegistrar::KEY,
'ppcp_payment_tokens_migration_initialized',
SwitchSettingsUiEndpoint::OPTION_NAME_SHOULD_USE_OLD_UI,
SwitchSettingsUiEndpoint::OPTION_NAME_MIGRATION_IS_DONE,
PaymentSettingsMigration::OPTION_NAME_BCDC_MIGRATION_OVERRIDE,
);
},
'uninstall.ppcp-all-scheduled-action-names' => function ( ContainerInterface $container ): array {
return array(
'woocommerce_paypal_payments_check_pui_payment_captured',
'woocommerce_paypal_payments_check_saved_payment',
'woocommerce_paypal_payments_payment_tokens_migration',
);
},
'uninstall.ppcp-all-action-names' => function ( ContainerInterface $container ): array {
return array(
'woocommerce_paypal_payments_uninstall',
);
},
'uninstall.clear-db-endpoint' => function ( ContainerInterface $container ): string {
return 'ppcp-clear-db';
},
'uninstall.clear-database-script-data' => function ( ContainerInterface $container ): array {
return array(
'clearDb' => array(
'endpoint' => \WC_AJAX::get_endpoint( $container->get( 'uninstall.clear-db-endpoint' ) ),
'nonce' => wp_create_nonce( $container->get( 'uninstall.clear-db-endpoint' ) ),
'button' => '.ppcp-clear_db_now',
'messageSelector' => '.clear-db-info-message',
'confirmationMessage' => __( 'Are you sure? the operation will remove all plugin data.', 'woocommerce-paypal-payments' ),
'successMessage' => sprintf(
'<div class="updated clear-db-info-message"><p><strong>%1$s</strong></p></div>',
esc_html__( 'The plugin data is successfully cleared.', 'woocommerce-paypal-payments' )
),
'failureMessage' => sprintf(
'<div class="error clear-db-info-message"><p><strong>%1$s</strong></p></div>',
esc_html__( 'Operation failed. Check WooCommerce logs for more details.', 'woocommerce-paypal-payments' )
),
'redirectUrl' => admin_url( 'admin.php?page=wc-settings&tab=checkout&section=ppcp-gateway' ),
),
);
},
'uninstall.module-url' => static function ( ContainerInterface $container ): string {
return plugins_url( '/modules/ppcp-uninstall/', $container->get( 'ppcp.path-to-plugin-main-file' ) );
},
'uninstall.clear-db-assets' => function ( ContainerInterface $container ): ClearDatabaseAssets {
return new ClearDatabaseAssets(
$container->get( 'uninstall.module-url' ),
$container->get( 'ppcp.asset-version' ),
'ppcp-clear-db',
$container->get( 'uninstall.clear-database-script-data' )
);
},
'uninstall.clear-db' => function ( ContainerInterface $container ): ClearDatabaseInterface {
return new ClearDatabase();
},
);