first commit
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
/**
|
||||
* WooCommerce Onboarding Setup Wizard
|
||||
*/
|
||||
|
||||
namespace Automattic\WooCommerce\Internal\Admin\Onboarding;
|
||||
|
||||
use Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskLists;
|
||||
use Automattic\WooCommerce\Admin\PageController;
|
||||
use Automattic\WooCommerce\Admin\WCAdminHelper;
|
||||
|
||||
/**
|
||||
* Contains backend logic for the onboarding profile and checklist feature.
|
||||
*/
|
||||
class OnboardingProfile {
|
||||
/**
|
||||
* Profile data option name.
|
||||
*/
|
||||
const DATA_OPTION = 'woocommerce_onboarding_profile';
|
||||
|
||||
/**
|
||||
* Add onboarding actions.
|
||||
*/
|
||||
public static function init() {
|
||||
add_action( 'woocommerce_updated', array( __CLASS__, 'maybe_mark_complete' ) );
|
||||
add_action( 'update_option_' . self::DATA_OPTION, array( __CLASS__, 'trigger_complete' ), 10, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger the woocommerce_onboarding_profile_completed action
|
||||
*
|
||||
* @param array $old_value Previous value.
|
||||
* @param array $value Current value.
|
||||
*/
|
||||
public static function trigger_complete( $old_value, $value ) {
|
||||
if ( isset( $old_value['completed'] ) && $old_value['completed'] ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! isset( $value['completed'] ) || ! $value['completed'] ) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Action hook fired when the onboarding profile (or onboarding wizard,
|
||||
* or profiler) is completed.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*/
|
||||
do_action( 'woocommerce_onboarding_profile_completed' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the profiler still needs to be completed.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function needs_completion() {
|
||||
$onboarding_data = get_option( self::DATA_OPTION, array() );
|
||||
|
||||
$is_completed = isset( $onboarding_data['completed'] ) && true === $onboarding_data['completed'];
|
||||
$is_skipped = isset( $onboarding_data['skipped'] ) && true === $onboarding_data['skipped'];
|
||||
|
||||
// @todo When merging to WooCommerce Core, we should set the `completed` flag to true during the upgrade progress.
|
||||
// https://github.com/woocommerce/woocommerce-admin/pull/2300#discussion_r287237498.
|
||||
return ! $is_completed && ! $is_skipped;
|
||||
}
|
||||
|
||||
/**
|
||||
* When updating WooCommerce, mark the profiler and task list complete.
|
||||
*
|
||||
* @todo The `maybe_enable_setup_wizard()` method should be revamped on onboarding enable in core.
|
||||
* See https://github.com/woocommerce/woocommerce/blob/1ca791f8f2325fe2ee0947b9c47e6a4627366374/includes/class-wc-install.php#L341
|
||||
*/
|
||||
public static function maybe_mark_complete() {
|
||||
// The install notice still exists so don't complete the profiler.
|
||||
if ( ! class_exists( 'WC_Admin_Notices' ) || \WC_Admin_Notices::has_notice( 'install' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$onboarding_data = get_option( self::DATA_OPTION, array() );
|
||||
// Don't make updates if the profiler is completed or skipped, but task list is potentially incomplete.
|
||||
if (
|
||||
( isset( $onboarding_data['completed'] ) && $onboarding_data['completed'] ) ||
|
||||
( isset( $onboarding_data['skipped'] ) && $onboarding_data['skipped'] )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
$onboarding_data['completed'] = true;
|
||||
update_option( self::DATA_OPTION, $onboarding_data );
|
||||
|
||||
if ( ! WCAdminHelper::is_wc_admin_active_for( DAY_IN_SECONDS ) ) {
|
||||
$task_list = TaskLists::get_list( 'setup' );
|
||||
if ( ! $task_list ) {
|
||||
return;
|
||||
}
|
||||
$task_list->hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user