mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-08-30 05:00:51 +08:00
Merge pull request #3536 from woocommerce/PCP-5009-phase-1-things-to-do-next-action-item
Add "Things to do next" item after settings migration (5009)
This commit is contained in:
commit
a3313148eb
4 changed files with 73 additions and 3 deletions
|
@ -410,7 +410,8 @@ $services = array(
|
||||||
'settings.data.definition.todos' => static function ( ContainerInterface $container ) : TodosDefinition {
|
'settings.data.definition.todos' => static function ( ContainerInterface $container ) : TodosDefinition {
|
||||||
return new TodosDefinition(
|
return new TodosDefinition(
|
||||||
$container->get( 'settings.service.todos_eligibilities' ),
|
$container->get( 'settings.service.todos_eligibilities' ),
|
||||||
$container->get( 'settings.data.general' )
|
$container->get( 'settings.data.general' ),
|
||||||
|
$container->get( 'settings.data.todos' )
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
'settings.data.definition.methods' => static function ( ContainerInterface $container ) : PaymentMethodsDefinition {
|
'settings.data.definition.methods' => static function ( ContainerInterface $container ) : PaymentMethodsDefinition {
|
||||||
|
|
|
@ -24,6 +24,7 @@ class SwitchSettingsUiEndpoint {
|
||||||
|
|
||||||
public const ENDPOINT = 'ppcp-settings-switch-ui';
|
public const ENDPOINT = 'ppcp-settings-switch-ui';
|
||||||
public const OPTION_NAME_SHOULD_USE_OLD_UI = 'woocommerce_ppcp-settings-should-use-old-ui';
|
public const OPTION_NAME_SHOULD_USE_OLD_UI = 'woocommerce_ppcp-settings-should-use-old-ui';
|
||||||
|
public const OPTION_NAME_MIGRATION_IS_DONE = 'woocommerce_ppcp-settings-migration-is-done';
|
||||||
|
|
||||||
protected RequestData $request_data;
|
protected RequestData $request_data;
|
||||||
protected LoggerInterface $logger;
|
protected LoggerInterface $logger;
|
||||||
|
@ -70,6 +71,8 @@ class SwitchSettingsUiEndpoint {
|
||||||
$this->onboarding_profile->save();
|
$this->onboarding_profile->save();
|
||||||
|
|
||||||
$this->settings_data_migration->migrate();
|
$this->settings_data_migration->migrate();
|
||||||
|
|
||||||
|
update_option( self::OPTION_NAME_MIGRATION_IS_DONE, true );
|
||||||
wp_send_json_success();
|
wp_send_json_success();
|
||||||
} catch ( Exception $error ) {
|
} catch ( Exception $error ) {
|
||||||
wp_send_json_error( array( 'message' => $error->getMessage() ), 500 );
|
wp_send_json_error( array( 'message' => $error->getMessage() ), 500 );
|
||||||
|
|
|
@ -9,6 +9,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace WooCommerce\PayPalCommerce\Settings\Data\Definition;
|
namespace WooCommerce\PayPalCommerce\Settings\Data\Definition;
|
||||||
|
|
||||||
|
use WooCommerce\PayPalCommerce\Settings\Ajax\SwitchSettingsUiEndpoint;
|
||||||
|
use WooCommerce\PayPalCommerce\Settings\Data\TodosModel;
|
||||||
use WooCommerce\PayPalCommerce\Settings\Service\TodosEligibilityService;
|
use WooCommerce\PayPalCommerce\Settings\Service\TodosEligibilityService;
|
||||||
use WooCommerce\PayPalCommerce\Settings\Data\GeneralSettings;
|
use WooCommerce\PayPalCommerce\Settings\Data\GeneralSettings;
|
||||||
|
|
||||||
|
@ -34,18 +36,23 @@ class TodosDefinition {
|
||||||
*/
|
*/
|
||||||
protected GeneralSettings $settings;
|
protected GeneralSettings $settings;
|
||||||
|
|
||||||
|
protected TodosModel $todos;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param TodosEligibilityService $eligibilities The todos eligibility service.
|
* @param TodosEligibilityService $eligibilities The todos eligibility service.
|
||||||
* @param GeneralSettings $settings The general settings service.
|
* @param GeneralSettings $settings The general settings service.
|
||||||
|
* @param TodosModel $todos The todos model instance.
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
TodosEligibilityService $eligibilities,
|
TodosEligibilityService $eligibilities,
|
||||||
GeneralSettings $settings
|
GeneralSettings $settings,
|
||||||
|
TodosModel $todos
|
||||||
) {
|
) {
|
||||||
$this->eligibilities = $eligibilities;
|
$this->eligibilities = $eligibilities;
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
|
$this->todos = $todos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -56,7 +63,7 @@ class TodosDefinition {
|
||||||
public function get(): array {
|
public function get(): array {
|
||||||
$eligibility_checks = $this->eligibilities->get_eligibility_checks();
|
$eligibility_checks = $this->eligibilities->get_eligibility_checks();
|
||||||
|
|
||||||
return array(
|
$todo_items = array(
|
||||||
'enable_fastlane' => array(
|
'enable_fastlane' => array(
|
||||||
'title' => __( 'Enable Fastlane', 'woocommerce-paypal-payments' ),
|
'title' => __( 'Enable Fastlane', 'woocommerce-paypal-payments' ),
|
||||||
'description' => __( 'Accelerate your guest checkout with Fastlane by PayPal', 'woocommerce-paypal-payments' ),
|
'description' => __( 'Accelerate your guest checkout with Fastlane by PayPal', 'woocommerce-paypal-payments' ),
|
||||||
|
@ -228,5 +235,63 @@ class TodosDefinition {
|
||||||
'priority' => 13,
|
'priority' => 13,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$todo_items['check_settings_after_migration'] = array(
|
||||||
|
'title' => __( "You're now using the new PayPal Payments interface!", 'woocommerce-paypal-payments' ),
|
||||||
|
'description' => __( 'Complete the items below to ensure your payment configuration is optimized for your store.', 'woocommerce-paypal-payments' ),
|
||||||
|
'isEligible' => fn(): bool => $this->is_settings_migration_done() && ! $this->are_all_todos_completed( $todo_items ),
|
||||||
|
'action' => array(
|
||||||
|
'type' => 'tab',
|
||||||
|
'tab' => 'overview',
|
||||||
|
),
|
||||||
|
'priority' => 0,
|
||||||
|
);
|
||||||
|
|
||||||
|
return $todo_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the settings migration to the new UI has been completed.
|
||||||
|
*
|
||||||
|
* @return bool True if the migration is marked as done, false otherwise.
|
||||||
|
*/
|
||||||
|
protected function is_settings_migration_done(): bool {
|
||||||
|
return '1' === get_option( SwitchSettingsUiEndpoint::OPTION_NAME_MIGRATION_IS_DONE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether all todos have been completed or dismissed appropriately.
|
||||||
|
*
|
||||||
|
* A to-do is considered completed if:
|
||||||
|
* - It's eligible (based on the callable `isEligible`), AND
|
||||||
|
* - It is either:
|
||||||
|
* - A "completeOnClick" type and is present in the completed list, OR
|
||||||
|
* - Not a "completeOnClick" type and is present in the dismissed list.
|
||||||
|
*
|
||||||
|
* @param array $todos The array of to-do definitions.
|
||||||
|
* @return bool True if all to-dos are completed or dismissed as expected, false otherwise.
|
||||||
|
*/
|
||||||
|
protected function are_all_todos_completed( array $todos ): bool {
|
||||||
|
$dismissed = $this->todos->get_dismissed_todos();
|
||||||
|
$completed = $this->todos->get_completed_onclick_todos();
|
||||||
|
|
||||||
|
foreach ( $todos as $id => $todo ) {
|
||||||
|
if ( ! is_callable( $todo['isEligible'] ) || ! call_user_func( $todo['isEligible'] ) ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_click_to_complete = $todo['action']['completeOnClick'] ?? false;
|
||||||
|
|
||||||
|
if ( $is_click_to_complete && ! in_array( $id, $completed, true ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $is_click_to_complete && ! in_array( $id, $dismissed, true ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ return array(
|
||||||
WebhookRegistrar::KEY,
|
WebhookRegistrar::KEY,
|
||||||
'ppcp_payment_tokens_migration_initialized',
|
'ppcp_payment_tokens_migration_initialized',
|
||||||
SwitchSettingsUiEndpoint::OPTION_NAME_SHOULD_USE_OLD_UI,
|
SwitchSettingsUiEndpoint::OPTION_NAME_SHOULD_USE_OLD_UI,
|
||||||
|
SwitchSettingsUiEndpoint::OPTION_NAME_MIGRATION_IS_DONE,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue