mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-08 21:52:55 +08:00
Merge pull request #1668 from woocommerce/PCP-1974-by-disconnecting-or-disabling-the-plugin-the-connection-should-clear-the-onboarding-links-from-cache
By disconnecting or disabling the plugin the connection should clear the Onboarding links from cache (1974)
This commit is contained in:
commit
abd26dc016
7 changed files with 79 additions and 8 deletions
|
@ -45,6 +45,12 @@ return array(
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
'uninstall.ppcp-all-action-names' => function( ContainerInterface $container ) : array {
|
||||||
|
return array(
|
||||||
|
'woocommerce_paypal_payments_uninstall',
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
'uninstall.clear-db-endpoint' => function( ContainerInterface $container ) : string {
|
'uninstall.clear-db-endpoint' => function( ContainerInterface $container ) : string {
|
||||||
return 'ppcp-clear-db';
|
return 'ppcp-clear-db';
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,4 +31,13 @@ class ClearDatabase implements ClearDatabaseInterface {
|
||||||
as_unschedule_action( $action_name );
|
as_unschedule_action( $action_name );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function clear_actions( array $action_names ): void {
|
||||||
|
foreach ( $action_names as $action_name ) {
|
||||||
|
do_action( $action_name );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,4 +29,12 @@ interface ClearDatabaseInterface {
|
||||||
*/
|
*/
|
||||||
public function clear_scheduled_actions( array $action_names ): void;
|
public function clear_scheduled_actions( array $action_names ): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the given actions.
|
||||||
|
*
|
||||||
|
* @param string[] $action_names The list of action names.
|
||||||
|
* @throws RuntimeException If problem clearing.
|
||||||
|
*/
|
||||||
|
public function clear_actions( array $action_names ): void;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,8 +47,9 @@ class UninstallModule implements ModuleInterface {
|
||||||
$clear_db_endpoint = $container->get( 'uninstall.clear-db-endpoint' );
|
$clear_db_endpoint = $container->get( 'uninstall.clear-db-endpoint' );
|
||||||
$option_names = $container->get( 'uninstall.ppcp-all-option-names' );
|
$option_names = $container->get( 'uninstall.ppcp-all-option-names' );
|
||||||
$scheduled_action_names = $container->get( 'uninstall.ppcp-all-scheduled-action-names' );
|
$scheduled_action_names = $container->get( 'uninstall.ppcp-all-scheduled-action-names' );
|
||||||
|
$action_names = $container->get( 'uninstall.ppcp-all-action-names' );
|
||||||
|
|
||||||
$this->handleClearDbAjaxRequest( $request_data, $clear_db, $clear_db_endpoint, $option_names, $scheduled_action_names );
|
$this->handleClearDbAjaxRequest( $request_data, $clear_db, $clear_db_endpoint, $option_names, $scheduled_action_names, $action_names );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -69,17 +70,19 @@ class UninstallModule implements ModuleInterface {
|
||||||
* @param string $nonce The nonce.
|
* @param string $nonce The nonce.
|
||||||
* @param string[] $option_names The list of option names.
|
* @param string[] $option_names The list of option names.
|
||||||
* @param string[] $scheduled_action_names The list of scheduled action names.
|
* @param string[] $scheduled_action_names The list of scheduled action names.
|
||||||
|
* @param string[] $action_names The list of action names.
|
||||||
*/
|
*/
|
||||||
protected function handleClearDbAjaxRequest(
|
protected function handleClearDbAjaxRequest(
|
||||||
RequestData $request_data,
|
RequestData $request_data,
|
||||||
ClearDatabaseInterface $clear_db,
|
ClearDatabaseInterface $clear_db,
|
||||||
string $nonce,
|
string $nonce,
|
||||||
array $option_names,
|
array $option_names,
|
||||||
array $scheduled_action_names
|
array $scheduled_action_names,
|
||||||
|
array $action_names
|
||||||
): void {
|
): void {
|
||||||
add_action(
|
add_action(
|
||||||
"wc_ajax_{$nonce}",
|
"wc_ajax_{$nonce}",
|
||||||
static function () use ( $request_data, $clear_db, $nonce, $option_names, $scheduled_action_names ) {
|
static function () use ( $request_data, $clear_db, $nonce, $option_names, $scheduled_action_names, $action_names ) {
|
||||||
try {
|
try {
|
||||||
if ( ! current_user_can( 'manage_woocommerce' ) ) {
|
if ( ! current_user_can( 'manage_woocommerce' ) ) {
|
||||||
wp_send_json_error( 'Not admin.', 403 );
|
wp_send_json_error( 'Not admin.', 403 );
|
||||||
|
@ -91,6 +94,7 @@ class UninstallModule implements ModuleInterface {
|
||||||
|
|
||||||
$clear_db->delete_options( $option_names );
|
$clear_db->delete_options( $option_names );
|
||||||
$clear_db->clear_scheduled_actions( $scheduled_action_names );
|
$clear_db->clear_scheduled_actions( $scheduled_action_names );
|
||||||
|
$clear_db->clear_actions( $action_names );
|
||||||
|
|
||||||
wp_send_json_success();
|
wp_send_json_success();
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -401,9 +401,7 @@ class SettingsListener {
|
||||||
$this->webhook_registrar->unregister();
|
$this->webhook_registrar->unregister();
|
||||||
|
|
||||||
foreach ( $this->signup_link_ids as $key ) {
|
foreach ( $this->signup_link_ids as $key ) {
|
||||||
if ( $this->signup_link_cache->has( $key ) ) {
|
( new OnboardingUrl( $this->signup_link_cache, $key, get_current_user_id() ) )->delete();
|
||||||
$this->signup_link_cache->delete( $key );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -613,4 +611,40 @@ class SettingsListener {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent enabling tracking if it is not enabled for merchant account.
|
||||||
|
*
|
||||||
|
* @throws RuntimeException When API request fails.
|
||||||
|
*/
|
||||||
|
public function listen_for_tracking_enabled(): void {
|
||||||
|
if ( State::STATE_ONBOARDED !== $this->state->current_state() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$token = $this->bearer->bearer();
|
||||||
|
if ( ! $token->is_tracking_available() ) {
|
||||||
|
$this->settings->set( 'tracking_enabled', false );
|
||||||
|
$this->settings->persist();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch ( RuntimeException $exception ) {
|
||||||
|
$this->settings->set( 'tracking_enabled', false );
|
||||||
|
$this->settings->persist();
|
||||||
|
|
||||||
|
throw $exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles onboarding URLs deletion
|
||||||
|
*/
|
||||||
|
public function listen_for_uninstall(): void {
|
||||||
|
// Clear onboarding links from cache.
|
||||||
|
foreach ( $this->signup_link_ids as $key ) {
|
||||||
|
( new OnboardingUrl( $this->signup_link_cache, $key, get_current_user_id() ) )->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -392,6 +392,16 @@ class WCGatewayModule implements ModuleInterface {
|
||||||
3
|
3
|
||||||
);
|
);
|
||||||
|
|
||||||
|
add_action(
|
||||||
|
'woocommerce_paypal_payments_uninstall',
|
||||||
|
static function () use ( $c ) {
|
||||||
|
$listener = $c->get( 'wcgateway.settings.listener' );
|
||||||
|
assert( $listener instanceof SettingsListener );
|
||||||
|
|
||||||
|
$listener->listen_for_uninstall();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
||||||
\WP_CLI::add_command(
|
\WP_CLI::add_command(
|
||||||
'pcp settings',
|
'pcp settings',
|
||||||
|
|
|
@ -3,7 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace WooCommerce\PayPalCommerce\Onboarding\Helper;
|
namespace WooCommerce\PayPalCommerce\Onboarding\Helper;
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use WooCommerce\PayPalCommerce\TestCase;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
|
use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
use function Brain\Monkey\Functions\when;
|
use function Brain\Monkey\Functions\when;
|
||||||
|
@ -15,7 +15,7 @@ class OnboardingUrlTest extends TestCase
|
||||||
private $user_id = 123;
|
private $user_id = 123;
|
||||||
private $onboardingUrl;
|
private $onboardingUrl;
|
||||||
|
|
||||||
protected function setUp(): void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue