From 61c1241857ca1f1a78f780ee67c8b10ec9975173 Mon Sep 17 00:00:00 2001 From: Filip Ilic Date: Fri, 26 Dec 2025 11:08:19 +0100 Subject: [PATCH 1/6] delay onboarding init a bit --- classes/class-onboard-wizard.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/class-onboard-wizard.php b/classes/class-onboard-wizard.php index 1b50183dc..06ecd1ef9 100644 --- a/classes/class-onboard-wizard.php +++ b/classes/class-onboard-wizard.php @@ -25,7 +25,7 @@ class Onboard_Wizard { * @return void */ public function __construct() { - \add_action( 'init', [ $this, 'maybe_register_popover_hooks' ], 0 ); + \add_action( 'init', [ $this, 'maybe_register_popover_hooks' ], 10 ); // Wait for the Playground to register its hooks. } /** From 3fbf691bcf5f5a0d51c2431ef9f980dfb7b3a72e Mon Sep 17 00:00:00 2001 From: Filip Ilic Date: Fri, 26 Dec 2025 15:56:01 +0100 Subject: [PATCH 2/6] update playground "toggle onboarding" --- classes/utils/class-playground.php | 49 +++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/classes/utils/class-playground.php b/classes/utils/class-playground.php index 988043db8..620918c3a 100644 --- a/classes/utils/class-playground.php +++ b/classes/utils/class-playground.php @@ -31,7 +31,8 @@ public function register_hooks() { if ( ! \progress_planner()->get_license_key() && ! \get_option( 'progress_planner_demo_data_generated', false ) ) { $this->generate_data(); \update_option( 'progress_planner_license_key', \str_replace( ' ', '-', $this->create_random_string( 20 ) ) ); - \update_option( 'progress_planner_force_show_onboarding', false ); + // Hide onboarding by default in the Playground demo. + \update_option( 'progress_planner_playground_hide_onboarding', true ); \update_option( 'progress_planner_todo', [ @@ -51,6 +52,9 @@ public function register_hooks() { \add_action( 'wp_ajax_progress_planner_hide_onboarding', [ $this, 'hide_onboarding' ] ); \add_action( 'wp_ajax_progress_planner_show_onboarding', [ $this, 'show_onboarding' ] ); + // Filter to control onboarding visibility in Playground. + \add_filter( 'progress_planner_show_onboarding', [ $this, 'filter_show_onboarding' ] ); + \progress_planner()->get_settings()->set( 'activation_date', ( new \DateTime() )->modify( '-2 months' )->format( 'Y-m-d' ) ); } @@ -79,6 +83,22 @@ public function enable_debug_tools() { \update_option( 'prpl_debug', true ); } + /** + * Check if onboarding would currently be shown. + * + * Mirrors the logic in Onboard_Wizard::maybe_register_popover_hooks(). + * + * @return bool + */ + private function is_onboarding_shown() { + $is_branded = 0 !== (int) \progress_planner()->get_ui__branding()->get_branding_id(); + $show_onboarding = ! \progress_planner()->is_privacy_policy_accepted() + || \get_option( 'prpl_onboard_progress', false ) + || $is_branded; + + return (bool) \apply_filters( 'progress_planner_show_onboarding', $show_onboarding ); + } + /** * Toggle the onboarding visibility in the Playground environment. * @@ -94,18 +114,39 @@ private function toggle_onboarding( $action ) { \wp_die( \esc_html__( 'You do not have sufficient permissions to access this page.', 'progress-planner' ) ); } + // Always delete onboarding progress to reset the state. + \delete_option( 'prpl_onboard_progress' ); + if ( $action === 'hide' ) { - \add_option( 'progress_planner_license_key', \str_replace( ' ', '-', $this->create_random_string( 20 ) ) ); + // Add a license key to mark privacy as accepted. + \update_option( 'progress_planner_license_key', \str_replace( ' ', '-', $this->create_random_string( 20 ) ) ); + // Use filter to force hide onboarding. + \update_option( 'progress_planner_playground_hide_onboarding', true ); $message = \esc_html__( 'Onboarding hidden successfully', 'progress-planner' ); } else { + // Delete the license key to trigger onboarding (privacy not accepted). \delete_option( 'progress_planner_license_key' ); + // Remove the force hide filter. + \delete_option( 'progress_planner_playground_hide_onboarding' ); $message = \esc_html__( 'Onboarding shown successfully', 'progress-planner' ); } - \update_option( 'progress_planner_force_show_onboarding', $action !== 'hide' ); \wp_send_json_success( [ 'message' => $message ] ); } + /** + * Filter to force hide onboarding in Playground when the option is set. + * + * @param bool $show_onboarding Whether to show the onboarding wizard. + * @return bool + */ + public function filter_show_onboarding( $show_onboarding ) { + if ( \get_option( 'progress_planner_playground_hide_onboarding', false ) ) { + return false; + } + return $show_onboarding; + } + /** * Hide the onboarding in the Playground environment. * @@ -135,7 +176,7 @@ public function show_header_notice() { return; } - $show_onboarding = \get_option( 'progress_planner_force_show_onboarding', false ); + $show_onboarding = $this->is_onboarding_shown(); $button_text = $show_onboarding ? \__( 'Hide onboarding', 'progress-planner' ) : \__( 'Show onboarding', 'progress-planner' ); $action = $show_onboarding ? 'hide' : 'show'; $nonce = \wp_create_nonce( "progress_planner_{$action}_onboarding" ); From f82660b1356944a72ca8af04003c623b9a809d23 Mon Sep 17 00:00:00 2001 From: Filip Ilic Date: Fri, 26 Dec 2025 16:03:04 +0100 Subject: [PATCH 3/6] we just need to trigger "show onboarding", no need to hide it anymore --- classes/utils/class-playground.php | 95 ++++-------------------------- 1 file changed, 12 insertions(+), 83 deletions(-) diff --git a/classes/utils/class-playground.php b/classes/utils/class-playground.php index 620918c3a..f22cdfae7 100644 --- a/classes/utils/class-playground.php +++ b/classes/utils/class-playground.php @@ -31,8 +31,6 @@ public function register_hooks() { if ( ! \progress_planner()->get_license_key() && ! \get_option( 'progress_planner_demo_data_generated', false ) ) { $this->generate_data(); \update_option( 'progress_planner_license_key', \str_replace( ' ', '-', $this->create_random_string( 20 ) ) ); - // Hide onboarding by default in the Playground demo. - \update_option( 'progress_planner_playground_hide_onboarding', true ); \update_option( 'progress_planner_todo', [ @@ -49,12 +47,8 @@ public function register_hooks() { \update_option( 'progress_planner_demo_data_generated', true ); } \add_action( 'progress_planner_admin_page_header_before', [ $this, 'show_header_notice' ] ); - \add_action( 'wp_ajax_progress_planner_hide_onboarding', [ $this, 'hide_onboarding' ] ); \add_action( 'wp_ajax_progress_planner_show_onboarding', [ $this, 'show_onboarding' ] ); - // Filter to control onboarding visibility in Playground. - \add_filter( 'progress_planner_show_onboarding', [ $this, 'filter_show_onboarding' ] ); - \progress_planner()->get_settings()->set( 'activation_date', ( new \DateTime() )->modify( '-2 months' )->format( 'Y-m-d' ) ); } @@ -84,85 +78,23 @@ public function enable_debug_tools() { } /** - * Check if onboarding would currently be shown. - * - * Mirrors the logic in Onboard_Wizard::maybe_register_popover_hooks(). - * - * @return bool - */ - private function is_onboarding_shown() { - $is_branded = 0 !== (int) \progress_planner()->get_ui__branding()->get_branding_id(); - $show_onboarding = ! \progress_planner()->is_privacy_policy_accepted() - || \get_option( 'prpl_onboard_progress', false ) - || $is_branded; - - return (bool) \apply_filters( 'progress_planner_show_onboarding', $show_onboarding ); - } - - /** - * Toggle the onboarding visibility in the Playground environment. - * - * @param string $action Either 'show' or 'hide'. + * Show the onboarding in the Playground environment. * * @return void */ - private function toggle_onboarding( $action ) { - $nonce_action = "progress_planner_{$action}_onboarding"; - \check_ajax_referer( $nonce_action, 'nonce' ); + public function show_onboarding() { + \check_ajax_referer( 'progress_planner_show_onboarding', 'nonce' ); if ( ! \current_user_can( 'manage_options' ) ) { \wp_die( \esc_html__( 'You do not have sufficient permissions to access this page.', 'progress-planner' ) ); } - // Always delete onboarding progress to reset the state. + // Delete onboarding progress to trigger fresh onboarding. \delete_option( 'prpl_onboard_progress' ); + // Delete the license key to trigger onboarding (privacy not accepted). + \delete_option( 'progress_planner_license_key' ); - if ( $action === 'hide' ) { - // Add a license key to mark privacy as accepted. - \update_option( 'progress_planner_license_key', \str_replace( ' ', '-', $this->create_random_string( 20 ) ) ); - // Use filter to force hide onboarding. - \update_option( 'progress_planner_playground_hide_onboarding', true ); - $message = \esc_html__( 'Onboarding hidden successfully', 'progress-planner' ); - } else { - // Delete the license key to trigger onboarding (privacy not accepted). - \delete_option( 'progress_planner_license_key' ); - // Remove the force hide filter. - \delete_option( 'progress_planner_playground_hide_onboarding' ); - $message = \esc_html__( 'Onboarding shown successfully', 'progress-planner' ); - } - - \wp_send_json_success( [ 'message' => $message ] ); - } - - /** - * Filter to force hide onboarding in Playground when the option is set. - * - * @param bool $show_onboarding Whether to show the onboarding wizard. - * @return bool - */ - public function filter_show_onboarding( $show_onboarding ) { - if ( \get_option( 'progress_planner_playground_hide_onboarding', false ) ) { - return false; - } - return $show_onboarding; - } - - /** - * Hide the onboarding in the Playground environment. - * - * @return void - */ - public function hide_onboarding() { - $this->toggle_onboarding( 'hide' ); - } - - /** - * Show the onboarding in the Playground environment. - * - * @return void - */ - public function show_onboarding() { - $this->toggle_onboarding( 'show' ); + \wp_send_json_success( [ 'message' => \esc_html__( 'Onboarding shown successfully', 'progress-planner' ) ] ); } /** @@ -176,10 +108,7 @@ public function show_header_notice() { return; } - $show_onboarding = $this->is_onboarding_shown(); - $button_text = $show_onboarding ? \__( 'Hide onboarding', 'progress-planner' ) : \__( 'Show onboarding', 'progress-planner' ); - $action = $show_onboarding ? 'hide' : 'show'; - $nonce = \wp_create_nonce( "progress_planner_{$action}_onboarding" ); + $nonce = \wp_create_nonce( 'progress_planner_show_onboarding' ); ?>
@@ -191,16 +120,16 @@ public function show_header_notice() {

-