From ac1de633c37aa977be74451e6d5cae35f49dd34c Mon Sep 17 00:00:00 2001 From: Hardeep Asrani Date: Fri, 27 Mar 2026 13:54:20 +0530 Subject: [PATCH 1/2] feat: improvements to onboarding flow --- classes/Visualizer/Module/Wizard.php | 46 ++- css/style-wizard.css | 265 ++++++++++++--- images/newsletter-img.png | Bin 55389 -> 0 bytes images/otter-logo.png | Bin 0 -> 15314 bytes images/spc-logo.svg | 50 +++ js/setup-wizard.js | 303 ++++++++++------- templates/setup-wizard.php | 492 ++++++++++++++++++--------- tests/e2e/specs/onboarding.spec.ts | 62 ++-- 8 files changed, 834 insertions(+), 384 deletions(-) delete mode 100644 images/newsletter-img.png create mode 100644 images/otter-logo.png create mode 100644 images/spc-logo.svg diff --git a/classes/Visualizer/Module/Wizard.php b/classes/Visualizer/Module/Wizard.php index d2f6290bf..9c639170e 100644 --- a/classes/Visualizer/Module/Wizard.php +++ b/classes/Visualizer/Module/Wizard.php @@ -73,6 +73,7 @@ public function registerAdminMenu() { } } + /** * Method to register the setup wizard page. * @@ -168,7 +169,7 @@ public function dismissWizard( $redirect_to_dashboard = true ) { */ public function visualizer_wizard_step_process() { check_ajax_referer( VISUALIZER_ABSPATH, 'security' ); - $step = ! empty( $_POST['step'] ) ? filter_input( INPUT_POST, 'step', FILTER_SANITIZE_STRING ) : 1; + $step = ! empty( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : 1; switch ( $step ) { case 'step_2': $this->setup_wizard_import_chart(); @@ -193,7 +194,7 @@ public function visualizer_wizard_step_process() { */ private function setup_wizard_import_chart() { // phpcs:ignore WordPress.Security.NonceVerification.Missing - $chart_type = ! empty( $_POST['chart_type'] ) ? filter_input( INPUT_POST, 'chart_type', FILTER_SANITIZE_STRING ) : ''; + $chart_type = ! empty( $_POST['chart_type'] ) ? sanitize_text_field( wp_unslash( $_POST['chart_type'] ) ) : ''; $chart_status = Visualizer_Module_Admin::checkChartStatus( $chart_type ); if ( ! $chart_status ) { wp_send_json( @@ -386,7 +387,8 @@ private function setup_wizard_import_chart() { ); $this->update_wizard_data( $wizard_data, false ); $response = array( - 'success' => 1, + 'success' => 1, + 'chart_id' => $chart_id, ); } wp_send_json( $response ); @@ -416,7 +418,7 @@ private function update_wizard_data( $data = array(), $merge_option = true ) { private function setup_wizard_create_draft_page( $return_page_id = false ) { $add_basic_shortcode = ! empty( $_POST['add_basic_shortcode'] ) ? sanitize_text_field( wp_unslash( $_POST['add_basic_shortcode'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing $add_basic_shortcode = 'true' === $add_basic_shortcode ? true : false; - $basic_shortcode = ! empty( $_POST['basic_shortcode'] ) ? filter_input( INPUT_POST, 'basic_shortcode', FILTER_SANITIZE_STRING ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing + $basic_shortcode = ! empty( $_POST['basic_shortcode'] ) ? sanitize_text_field( wp_unslash( $_POST['basic_shortcode'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( ! $add_basic_shortcode ) { wp_send_json( @@ -476,7 +478,7 @@ private function setup_wizard_create_draft_page( $return_page_id = false ) { */ private function setup_wizard_install_plugin() { // phpcs:ignore WordPress.Security.NonceVerification.Missing - $slug = ! empty( $_POST['slug'] ) ? filter_input( INPUT_POST, 'slug', FILTER_SANITIZE_STRING ) : ''; + $slug = ! empty( $_POST['slug'] ) ? sanitize_text_field( wp_unslash( $_POST['slug'] ) ) : ''; if ( empty( $slug ) ) { wp_send_json( array( @@ -496,8 +498,10 @@ private function setup_wizard_install_plugin() { } if ( ! empty( $slug ) ) { + $wizard_data = get_option( self::OPTION_NAME, array() ); require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; + require_once ABSPATH . 'wp-admin/includes/plugin.php'; $api = plugins_api( 'plugin_information', @@ -559,11 +563,33 @@ private function setup_wizard_install_plugin() { wp_send_json( $status ); } - activate_plugin( 'optimole-wp/optimole-wp.php' ); - delete_transient( 'optml_fresh_install' ); - // Update wizard data. - $wizard_data['enable_perfomance'] = true; - $this->update_wizard_data( $wizard_data ); + $installed_plugins = get_plugins( '/' . sanitize_key( wp_unslash( $slug ) ) ); + if ( ! empty( $installed_plugins ) ) { + $plugin_files = array_keys( $installed_plugins ); + $plugin_file = sanitize_key( wp_unslash( $slug ) ) . '/' . $plugin_files[0]; + activate_plugin( $plugin_file ); + } + $wizard_data_updated = false; + if ( 'optimole-wp' === $slug ) { + delete_transient( 'optml_fresh_install' ); + // Update wizard data. + $wizard_data['enable_perfomance'] = true; + $wizard_data_updated = true; + } + if ( 'otter-blocks' === $slug ) { + // Update wizard data. + $wizard_data['enable_otter_blocks'] = true; + $wizard_data_updated = true; + update_option( 'themeisle_blocks_settings_onboarding', false ); + } + if ( 'wp-cloudflare-page-cache' === $slug ) { + // Update wizard data. + $wizard_data['enable_page_cache'] = true; + $wizard_data_updated = true; + } + if ( $wizard_data_updated ) { + $this->update_wizard_data( $wizard_data ); + } wp_send_json( array( diff --git a/css/style-wizard.css b/css/style-wizard.css index 0cbd2660c..c157f7624 100644 --- a/css/style-wizard.css +++ b/css/style-wizard.css @@ -244,6 +244,13 @@ input.vz-switch-toggle[type=checkbox]:checked:before{ position: relative; border-bottom: 1px solid #D9D9D9; } +.vz-form-wrap .form-block.no-sep{ + border-bottom: 0; + padding-bottom: 12px; +} +.vz-form-wrap .form-block.vz-final-block{ + padding: 12px 0; +} .vz-form-wrap .form-block:last-child{ border-bottom: 0; } @@ -948,6 +955,21 @@ display: none; padding-left: 20px; padding-right: 20px; } +.vz-accordion-title--static{ + padding: 22px 30px 22px 80px; +} +.vz-accordion-title--static .vz-checkbox{ + position: absolute; + left: 30px; + top: 50%; + margin-top: -10px; + width: 20px; + height: 20px; + z-index: 12; +} +.vz-accordion-content--static{ + display: block; +} .vz-features-list ul li{ padding: 25px 0; @@ -968,6 +990,136 @@ display: none; .vz-features-list ul li .txt{ width: 100%; } +.vz-final-options{ + display: flex; + flex-direction: column; + gap: 10px; +} +.vz-option-card{ + display: flex; + align-items: center; + gap: 16px; + padding: 16px 18px; + border: 1px solid #E5E7EB; + border-radius: 8px; + background: #fff; + position: relative; +} +.vz-option-check{ + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.vz-option-check input[type=checkbox]{ + width: 18px; + height: 18px; +} +.vz-option-icon{ + width: 40px; + height: 40px; + border-radius: 8px; + background: #F3F4F6; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.vz-option-icon img{ + display: block; + max-width: 24px; + max-height: 24px; +} +.vz-option-body{ + flex: 1; +} +.vz-option-title{ + font-size: 16px; + font-weight: 600; + color: #0f172a; + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 4px; +} +.vz-option-title .pro-label.free-label{ + font-size: 11px; + line-height: 14px; + padding: 2px 8px 3px; +} +.vz-option-card--newsletter .vz-option-icon{ + background: #E6F3F3; + color: #39C3D2; +} +.vz-option-card--newsletter .vz-option-icon .dashicons{ + font-size: 22px; + width: 22px; + height: 22px; +} +.vz-option-card--newsletter .vz-option-body{ + display: flex; + flex-direction: column; + gap: 6px; +} +.vz-option-card--newsletter .vz-option-input{ + max-width: 320px; + display: flex; + align-items: center; + gap: 8px; +} +.vz-option-card--newsletter .vz-change-email{ + background: transparent; + border: 0; + color: #39C3D2; + text-decoration: underline; + cursor: pointer; + padding: 0 0 0 6px; + font-size: 13px; +} +.vz-option-card--newsletter .vz-email-text{ + color: #39C3D2; + font-weight: 600; + padding-left: 6px; +} +.vz-install-status{ + position: absolute; + right: 14px; + top: 14px; + width: 18px; + height: 18px; + border-radius: 50%; + border: 2px solid #cbd5e1; + display: none; + align-items: center; + justify-content: center; + font-size: 12px; + line-height: 1; + color: #ffffff; +} +.vz-install-status.is-installing{ + display: flex; + border-color: #39C3D2; + border-top-color: transparent; + animation: spin 1s linear infinite; +} +.vz-install-status.is-done{ + display: flex; + background: #00AA63; + border-color: #00AA63; +} +.vz-install-status.is-error{ + display: flex; + background: #d63638; + border-color: #d63638; +} +.vz-install-status.is-done:before{ + content: "✓"; +} +.vz-install-status.is-error:before{ + content: "!"; +} .pro-label{ background: #007CBA; border-radius: 6px; @@ -988,34 +1140,23 @@ display: none; } /* visualizer accordion style End */ .vz-chart-list{ -/* max-width: 780px;*/ - padding: 0 18px; + max-width: 1100px; + padding: 0; margin-bottom: 40px; + margin-left: auto; + margin-right: auto; } .vz-chart-list > ul{ - display: flex; - flex-wrap: wrap; - justify-content: space-between; + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 16px; + align-items: stretch; } .vz-chart-list .slick-arrow{ - position: absolute; - width: 30px; - top: 50%; - height: 30px; - margin-top: -15px; - font-size: 0; - color: #757575; - display: grid; - place-items: center; - border: 0; - background: transparent; - cursor: pointer; + display: none; } .vz-chart-list .slick-arrow:before{ - display: block; - font-family: "dashicons"; - font-size: 24px; - line-height: 1; + display: none; } .vz-chart-list .slick-arrow.slick-prev{ left: -42px; @@ -1030,19 +1171,19 @@ display: none; content: "\f345"; } .vz-chart-list > ul > li{ - width: 48%; - max-width: 362px; - padding-bottom: 60px; + width: 100%; + max-width: 100%; + padding-bottom: 0; } .vz-chart-list .slick-slide{ - margin-right: 34px; + margin-right: 0; } .vz-chart-option{ - width: 317px; + width: 100%; position: relative; display: flex; flex-wrap: wrap; - padding: 12px 12px 20px; + padding: 12px 12px 16px; } .vz-chart-option .img{ order: 1; @@ -1050,8 +1191,9 @@ display: none; z-index: 1; display: block; width: 100%; - max-width: 338px; - height: 198px; + max-width: 100%; + aspect-ratio: 23 / 18; + height: auto; background-color: #ffffff; margin-bottom: 20px; background-image: url(../images/chart_types_v395.png); @@ -1060,23 +1202,54 @@ display: none; transition: all .3s ease-in-out; /* filter: grayscale(100%); -webkit-filter: grayscale(100%); */ - background-size: 900px 1150px; + --wizard-sprite-scale: 0.45; + background-size: calc(900px * var(--wizard-sprite-scale)) calc(1150px * var(--wizard-sprite-scale)); filter: grayscale(100%); } .vz-chart-option .img.type-box-pie{ - background-position: -5px -17px; + background-position: calc(-5px * var(--wizard-sprite-scale)) calc(-17px * var(--wizard-sprite-scale)); } .vz-chart-option .img.type-box-bar{ - background-position: -305px -235px; + background-position: calc(-305px * var(--wizard-sprite-scale)) calc(-235px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-area{ + background-position: calc(-8px * var(--wizard-sprite-scale)) calc(-225px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-scatter{ + background-position: calc(-300px * var(--wizard-sprite-scale)) calc(0px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-gauge{ + background-position: calc(-7px * var(--wizard-sprite-scale)) calc(-450px * var(--wizard-sprite-scale)); } .vz-chart-option .img.type-box-line{ - background-position: -606px -14px; + background-position: calc(-606px * var(--wizard-sprite-scale)) calc(-14px * var(--wizard-sprite-scale)); } .vz-chart-option .img.type-box-tabular{ - background-position: -306px -693px; + background-position: calc(-306px * var(--wizard-sprite-scale)) calc(-693px * var(--wizard-sprite-scale)); } .vz-chart-option .img.type-box-geo{ - background-position: -603px -459px; + background-position: calc(-603px * var(--wizard-sprite-scale)) calc(-459px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-candlestick{ + background-position: calc(-304px * var(--wizard-sprite-scale)) calc(-450px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-bubble{ + background-position: calc(-604px * var(--wizard-sprite-scale)) calc(-906px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-column{ + background-position: calc(-600px * var(--wizard-sprite-scale)) calc(-225px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-timeline{ + background-position: calc(-8px * var(--wizard-sprite-scale)) calc(-670px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-combo{ + background-position: calc(-606px * var(--wizard-sprite-scale)) calc(-670px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-polarArea{ + background-position: calc(-2px * var(--wizard-sprite-scale)) calc(-912px * var(--wizard-sprite-scale)); +} +.vz-chart-option .img.type-box-radar{ + background-position: calc(-301px * var(--wizard-sprite-scale)) calc(-899px * var(--wizard-sprite-scale)); } .vz-chart-option:hover .img{ background-image: url(../images/chart_types_v395.png); @@ -1112,24 +1285,34 @@ display: none; display: flex; flex-wrap: wrap; align-items: center; + font-size: 13px; + line-height: 16px; } .vz-pro-label-wrap { order: 3; width: calc(100% - 20px); padding-left: 12px; - position: relative; z-index: 1; display: flex; flex-wrap: wrap; align-items: center; + padding-right: 42px; } .vz-pro-label-wrap h3 { opacity: .7; color: #000000; + font-size: 13px; + line-height: 16px; } .vz-pro-label-wrap span.pro-label{ - margin-left: 30px; + position: absolute; + top: 8px; + right: 8px; + margin-left: 0; font-weight: 600; + font-size: 11px; + line-height: 14px; + padding: 2px 8px 3px; } .vz-chart-option input[type=radio].vz-radio-btn:checked ~ .bg{ background: #BDE6EB; @@ -1215,6 +1398,9 @@ display: none; background: #39C3D2; transition: all .3s ease-in-out; } +.vz-import-status{ + margin-top: 12px; +} .vz-chart-list .slick-arrow[disabled="disabled"], .vz-chart-list .slick-arrow[aria-disabled="true"] { color: #eeeeee } @@ -1253,7 +1439,8 @@ display: none; .vz-document-list > ul > li{width: 100%;} .vz-help-improve-box .left{width: 100%;} .vz-help-improve-box .right{width: 100%;} - .vz-chart-list > ul > li{width: 100%; max-width: 100%; padding-bottom: 30px;} + .vz-chart-list > ul{grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px;} + .vz-chart-list > ul > li{width: 100%; max-width: 100%; padding-bottom: 0;} .vz-shortcode-preview-content{padding-right: 20px;} .vz-newsletter-wrap .vz-newsletter, .vz-newsletter-wrap .vz-newsletter-img{width: 100%; padding-bottom: 20px;} -} \ No newline at end of file +} diff --git a/images/newsletter-img.png b/images/newsletter-img.png deleted file mode 100644 index 04315feafca5adda2ad8d28ce9851c0f9f8288aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55389 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 HO@jU(Cn^8u literal 0 HcmV?d00001 diff --git a/images/spc-logo.svg b/images/spc-logo.svg new file mode 100644 index 000000000..742554310 --- /dev/null +++ b/images/spc-logo.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/setup-wizard.js b/js/setup-wizard.js index fbca0d2dd..d512d12a4 100644 --- a/js/setup-wizard.js +++ b/js/setup-wizard.js @@ -29,6 +29,8 @@ jQuery(function ($) { postData.step ??= 'step_subscribe'; // Subscribe the user using the email if provided. Redirect to the draft page. + var $currentStep = $('#step-3'); + $.post(visualizerSetupWizardData.ajax.url, postData, function (res) { // Toggle the redirect popup. @@ -42,75 +44,142 @@ jQuery(function ($) { } else { $('.redirect-popup').hide(); } - currentStep.find('.spinner').removeClass('is-active'); + $currentStep.find('.spinner').removeClass('is-active'); }).fail(function () { $('.redirect-popup').hide(); - currentStep.find('.spinner').removeClass('is-active'); + $currentStep.find('.spinner').removeClass('is-active'); }); } - var provideContent = function(id, stepDirection, stepPosition, selStep, callback) { - // Import chart data. - if ( 1 == id ) { - var chartType = $(".vz-radio-btn:checked").val(); - var percentBarWidth = 0; - var loaderDelay; - $.ajax( { - beforeSend: function() { - loaderDelay = setInterval(function () { - $('.vz-progress-bar').css({ - width: percentBarWidth++ + '%' - }); - }, 1000); - }, - type: 'POST', - url: visualizerSetupWizardData.ajax.url, - dataType: 'json', - data: { - action: 'visualizer_wizard_step_process', - security: visualizerSetupWizardData.ajax.security, - chart_type: chartType, - step: 'step_2', - }, - success: function (data) { - clearInterval( loaderDelay ); - loaderDelay = setInterval(function () { - $('.vz-progress-bar').css({ - width: percentBarWidth++ + '%' - }); - if ( percentBarWidth >= 100 ) { - if ( 1 === data.success ) { - var importMessage = jQuery('[data-import_message]'); - importMessage - .html( importMessage.data('import_message') ) - .addClass('import_message'); + var runImport = function () { + var chartType = $(".vz-radio-btn:checked").val(); + var percentBarWidth = 0; + var loaderDelay; + var $step = $('#step-1'); + var $status = $step.find('.vz-import-status'); + var $progress = $status.find('.vz-progress-bar'); + var $message = $status.find('[data-import_message]'); + var $error = $status.find('.vz-error-notice'); + var $spinner = $step.find('.spinner'); + var $button = $step.find('[data-step_number="1"]'); + + $status.show(); + $progress.css({ width: '0' }); + if ($message.length) { + $message + .text($message.data('import_initial')) + .removeClass('import_message'); + } + $error.addClass('hidden').empty(); + $spinner.addClass('is-active'); + $button.addClass('disabled'); + + loaderDelay = setInterval(function () { + percentBarWidth = Math.min(percentBarWidth + 4, 90); + $progress.css({ width: percentBarWidth + '%' }); + }, 120); - $('#step-2').find('button.disabled').removeClass('disabled'); - } else if( 2 === data.status && '' !== data.message ) { - $('#step-2') - .find('.vz-error-notice') - .html( '

' + data.message + '

' ) - .removeClass('hidden'); - } else { - $('#smartwizard').smartWizard('reset'); - } - $('.vz-progress-bar').css({ - width: 100 + '%' - }); - $('.vz-progress').css({ - visibility: 'hidden' - }); - clearInterval( loaderDelay ); + $.ajax({ + type: 'POST', + url: visualizerSetupWizardData.ajax.url, + dataType: 'json', + data: { + action: 'visualizer_wizard_step_process', + security: visualizerSetupWizardData.ajax.security, + chart_type: chartType, + step: 'step_2', + }, + success: function (data) { + clearInterval(loaderDelay); + $progress.css({ width: '100%' }); + + if (1 === data.success) { + if (data.chart_id) { + var $shortcode = $('#basic_shortcode'); + if ($shortcode.length) { + $shortcode.val( + $shortcode.val().replace('{{chart_id}}', data.chart_id) + ); } - }, 36 ); - }, - error: function() { - $('#step-2').find('.vz-progress-bar').animate({ width: '0' }); + } + if ($message.length) { + $message + .text($message.data('import_message')) + .addClass('import_message'); + } + + setTimeout(function () { + $spinner.removeClass('is-active'); + $('#smartwizard').smartWizard('next'); + }, 200); + } else if (2 === data.status && '' !== data.message) { + $error.html('

' + data.message + '

').removeClass('hidden'); + $spinner.removeClass('is-active'); + $button.removeClass('disabled'); + } else { + $spinner.removeClass('is-active'); + $button.removeClass('disabled'); + $('#smartwizard').smartWizard('reset'); } - } ); + }, + error: function () { + clearInterval(loaderDelay); + $progress.css({ width: '0' }); + $spinner.removeClass('is-active'); + $button.removeClass('disabled'); + } + }); + }; + + var collectInstallSlugs = function () { + var slugs = []; + var $optimole = $('#enable_performance'); + if ($optimole.length && $optimole.is(':checked') && !$optimole.is(':disabled')) { + slugs.push('optimole-wp'); } - callback(); - } + if ($('#enable_otter_blocks').is(':checked') && !$('#enable_otter_blocks').is(':disabled')) { + slugs.push('otter-blocks'); + } + if ($('#enable_page_cache').is(':checked') && !$('#enable_page_cache').is(':disabled')) { + slugs.push('wp-cloudflare-page-cache'); + } + return slugs; + }; + + var setInstallStatus = function (slug, statusClass) { + var $status = $('[data-install-status="' + slug + '"]'); + $status.removeClass('is-installing is-done is-error').addClass(statusClass); + }; + + var installPluginsSequentially = function (slugs, onDone) { + if (!slugs.length) { + onDone(true); + return; + } + var slug = slugs.shift(); + setInstallStatus(slug, 'is-installing'); + $.post( + visualizerSetupWizardData.ajax.url, + { + action: 'visualizer_wizard_step_process', + security: visualizerSetupWizardData.ajax.security, + slug: slug, + step: 'step_4', + }, + function (response) { + if (1 === response.status) { + setInstallStatus(slug, 'is-done'); + installPluginsSequentially(slugs, onDone); + } else { + setInstallStatus(slug, 'is-error'); + onDone(false, response.message); + } + } + ).fail(function () { + setInstallStatus(slug, 'is-error'); + onDone(false, ''); + }); + }; $("#smartwizard").smartWizard({ transition: { animation: "fade", // Animation effect on navigation, none|fade|slideHorizontal|slideVertical|slideSwing|css(Animation CSS class also need to specify) @@ -133,8 +202,7 @@ jQuery(function ($) { btnCss: "", btnNextCss: "btn-primary next-btn", btnPrevCss: "btn-light", - }, - getContent: provideContent + } }); // click to open accordion. @@ -168,47 +236,19 @@ jQuery(function ($) { switch (stepNumber) { case 1: if ($(".vz-radio-btn").is(":checked")) { - $('#smartwizard').smartWizard('next'); + runImport(); } break; - case 3: + case 2: if ( isLivePreview ) { $('#smartwizard').smartWizard('next'); } else { var urlParams = new URLSearchParams(window.location.search); urlParams.set('preview_chart', Date.now()); - window.location.hash = "#step-3"; + window.location.hash = "#step-2"; window.location.search = urlParams; } break; - case 4: - $('#step-4').find('.spinner').addClass('is-active'); - $('#step-4').find('.vz-error-notice').addClass('hidden'); - - $.post( - visualizerSetupWizardData.ajax.url, - { - action: 'visualizer_wizard_step_process', - security: visualizerSetupWizardData.ajax.security, - slug: 'optimole-wp', - step: 'step_4', - }, - function (response) { - if (1 === response.status) { - $('#smartwizard').smartWizard('next'); - } else if ( 'undefined' !== typeof response.message ) { - $('#step-4') - .find('.vz-error-notice') - .html("

" + response.message + "

"); - $('#step-4').find('.vz-error-notice').removeClass('hidden'); - } - $('#step-4').find('.spinner').removeClass('is-active'); - } - ).fail(function () { - $('#step-4').find('.spinner').removeClass('is-active'); - }); - e.preventDefault(); - break; default: e.preventDefault(); break; @@ -246,16 +286,6 @@ jQuery(function ($) { }); // Enable performance feature. - $("#step-4").on("change", "input:checkbox", function () { - if ($(this).is(":checked")) { - $(".skip-improvement").hide(); - $(".vz-wizard-install-plugin").show(); - } else { - $(".skip-improvement").show(); - $(".vz-wizard-install-plugin").hide(); - } - }); - // Step: 4 Skip and subscribe process. $(document).on( 'click', '.vz-subscribe', function (e) { var withSubscribe = $(this).data("vz_subscribe"); @@ -267,8 +297,9 @@ jQuery(function ($) { var emailElement = $("#vz_subscribe_email"); // Remove error message. emailElement.next(".vz-field-error").remove(); + var newsletterEnabled = $("#enable_newsletter").is(":checked"); - if (withSubscribe) { + if (withSubscribe && newsletterEnabled) { var subscribeEmail = emailElement.val(); var EmailTest = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; var errorMessage = ""; @@ -285,14 +316,49 @@ jQuery(function ($) { postData.email = subscribeEmail; postData.with_subscribe = withSubscribe; + } else { + postData.with_subscribe = false; } - var currentStep = $( '.vz-wizard-wrap .tab-pane:last-child' ); - currentStep.find(".spinner").addClass("is-active"); + var $step = $('#step-3'); + $step.find(".spinner").addClass("is-active"); + var $error = $step.find('.vz-error-notice').first(); + $error.addClass('hidden').empty(); - goToDraftPage( postData ); + var slugs = collectInstallSlugs(); + installPluginsSequentially(slugs.slice(), function (ok, message) { + if (!ok) { + if (message) { + $error.html('

' + message + '

').removeClass('hidden'); + } + $step.find(".spinner").removeClass("is-active"); + return; + } + goToDraftPage(postData); + }); e.preventDefault(); }); + $(document).on('click', '.vz-change-email', function () { + var $card = $(this).closest('.vz-option-card--newsletter'); + var $inputWrap = $card.find('.vz-option-input'); + $inputWrap.show(); + $card.find('#vz_subscribe_email').focus(); + }); + + var finalizeNewsletterEmail = function ($card) { + var $input = $card.find('#vz_subscribe_email'); + var $text = $card.find('.vz-email-text'); + var email = $input.val(); + if (email) { + $text.text(email); + } + $card.find('.vz-option-input').hide(); + }; + + $(document).on('click', '.vz-save-email', function () { + finalizeNewsletterEmail($(this).closest('.vz-option-card--newsletter')); + }); + // Click to copy. var clipboard = new ClipboardJS(".vz-copy-code-btn"); clipboard.on("success", function (e) { @@ -319,29 +385,6 @@ jQuery(function ($) { } }); - $('.vz-chart-list > ul').slick({ - dots: false, - infinite: false, - speed: 400, - slidesToShow: 1, - centerMode: false, - variableWidth: true - }) - .on( 'afterChange', function(event, slick, currentSlide) { - // Disable next buttion. - if( currentSlide === 4 ) { - $('.slick-next').attr('disabled', true).css('pointer-events', 'none'); - } else { - $('.slick-next').removeAttr('disabled').css('pointer-events', 'all'); - } - // Disable prev buttion. - if( currentSlide === 0 ) { - $('.slick-prev').attr('disabled', true).css('pointer-events', 'none'); - } else { - $('.slick-prev').removeAttr('disabled').css('pointer-events', 'all'); - } - } ); - $(window).bind('pageshow', function() { if ( jQuery('.vz-chart-option input').is(':checked') ) { $('#step-1').find('button.disabled').removeClass('disabled'); diff --git a/templates/setup-wizard.php b/templates/setup-wizard.php index 38f1619b7..066980b0a 100644 --- a/templates/setup-wizard.php +++ b/templates/setup-wizard.php @@ -16,7 +16,9 @@ $chart_id = ! empty( $this->wizard_data['chart_id'] ) ? (int) $this->wizard_data['chart_id'] : ''; $wp_optimole_active = is_plugin_active( 'optimole-wp/optimole-wp.php' ); -$last_step_number = 5; +$wp_otter_active = is_plugin_active( 'otter-blocks/otter-blocks.php' ); +$wp_spc_active = is_plugin_active( 'wp-cloudflare-page-cache/wp-cloudflare-super-page-cache.php' ); +$last_step_number = 3; // Check if we are in the Live Preview which is used to showcase only the plugin features without any other distractions. Ideal for marketing purposes (like Live Preview on WordPress.org or on the plugin's website) $is_live_preview = ! empty( $_GET['env'] ) ? ( 'preview' === sanitize_key( $_GET['env'] ) ) : false; @@ -51,31 +53,12 @@ 2 - - - - - - - - +
@@ -147,18 +130,193 @@ class="btn btn-secondary" target="_blank">
  • -
    -

    -
      -
    • -
    • -
    • -
    • - ) -
    • -
    • -
    - +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
    +
    +
  • +
  • +
    + +
    +
    + +
    +
  • @@ -166,48 +324,20 @@ class="btn btn-secondary" target="_blank">
    -
    -
    - - - -
    -
    -
    -
    -

    -

    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -

    -

    -
    -
    -
    -
    -
    + + -

    -
    -
    -
    +
    @@ -218,42 +348,38 @@ class="btn btn-secondary" target="_blank">
    -
    -
    -
    -
    -
    - > -
    - +
    +
    +
    +
    + > +
    +
    +
    +

    -
    -
    - - -

    -

    - -

    -
    - -
    - -
    - - +
    +
    +
    + + +

    +

    + +

    +
    +
    + +
    + +
    @@ -268,88 +394,118 @@ class="btn btn-secondary" target="_blank">
    - -
    + +
    -

    -

    +

    +

    -
    +
    -
    -
    -
    -
    - +
    +
    + +
    + +
    +
    +
    + +
    - +

    + +

    +
    + +
    +
    + +
    +
    -
    -
    -
      -
    • -
      - -
      -
      -
      -

      -
      -
    • -
    +
    +
    + +
    +

    + +

    +
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -

    -

    -
    -
    -
    -
    -
    -
    -
    -

    -
    - +
    + +
    +
    +
    +
    + + +
    +

    + +

    +
    +
    -
    - +
    - - +
    diff --git a/tests/e2e/specs/onboarding.spec.ts b/tests/e2e/specs/onboarding.spec.ts index 245708159..a08814d6d 100644 --- a/tests/e2e/specs/onboarding.spec.ts +++ b/tests/e2e/specs/onboarding.spec.ts @@ -31,56 +31,44 @@ test.describe( 'Onboarding', () => { test( 'Check the setup wizard', async ( { page, admin} ) => { await admin.visitAdminPage( 'admin.php?page=visualizer-setup-wizard#step-1' ); + await page.addStyleTag({ content: '#wpfooter{display:none !important;}' }); // Step 1 await expect(page.getByLabel('Pie/Donut chart', { exact: true })).toBeVisible(); await page.getByLabel('Bar chart', { exact: true }).check(); await expect(page.getByLabel('Line chart', { exact: true })).toBeVisible(); await expect(page.getByLabel('Bar chart', { exact: true })).toBeVisible(); - await page.getByLabel('Next', { exact: true }).click(); - await page.getByLabel('Next', { exact: true }).click(); - await page.getByLabel('Next', { exact: true }).click(); - await page.getByLabel('Next', { exact: true }).click(); - await expect(page.getByText('Discover the power of PRO! 11')).toBeVisible(); - await expect(page.getByRole('button', { name: 'Save And Continue ' })).toBeVisible(); + await expect(page.getByRole('button', { name: /Save And Continue/i })).toBeVisible(); await expect(page.getByRole('link', { name: ' Go to dashboard' })).toBeVisible(); - await page.getByRole('button', { name: 'Save And Continue ' }).click(); + await page.getByRole('button', { name: /Save And Continue/i }).click(); // Step 2 - await expect(page.getByLabel('You\'re almost done! We use').locator('h2')).toContainText('You\'re almost done!'); - await expect(page.getByRole('heading', { name: 'Importing demo data' })).toBeVisible(); - await expect(page.getByText('Done! Demo data has been successfully imported.')).toBeVisible(); - await expect(page.getByLabel('You\'re almost done! We use')).toContainText('Import data from other charts, WordPress, databases, or manual data entries using Visualizer'); - await page.getByRole('button', { name: 'Continue ' }).click(); + await expect(page.getByRole('heading', { name: 'Insert a chart into the draft page' })).toBeVisible(); + await expect(page.getByRole('button', { name: /Save And Continue/i })).toBeVisible(); + await page.getByRole('button', { name: /Save And Continue/i }).click(); // Step 3 - await expect(page.getByRole('heading', { name: 'Insert a chart into the draft page' })).toBeVisible(); - await expect(page.getByRole('button', { name: 'Create a draft page We will' })).toBeVisible(); - await page.getByRole('button', { name: 'Create a draft page We will' }).click(); - await expect(page.getByRole('heading', { name: 'Chart preview' })).toBeVisible({ timeout: 15000 }); - await page.getByRole('button', { name: 'Create a draft page We will' }).click(); - await page.getByRole('button', { name: 'Save And Continue ' }).click(); + await expect(page.getByRole('heading', { name: 'You\'re all set!' })).toBeVisible(); + await expect(page.getByText('Boost your website speed')).toBeVisible(); + await expect(page.getByText('Build better pages')).toBeVisible(); + await expect(page.getByText('Cache your pages')).toBeVisible(); + await expect(page.getByText('Stay in the loop')).toBeVisible(); - // Step 4 - await expect(page.getByRole('heading', { name: 'Extra Features' })).toBeVisible(); - await expect(page.getByRole('button', { name: 'Enable perfomance features' })).toBeVisible(); - await page.getByRole('button', { name: 'Enable perfomance features' }).click(); - await expect(page.getByLabel('Extra Features We\'re').getByRole('listitem')).toContainText('Improve your website speed and images by 80% with Optimole'); - await expect(page.getByRole('button', { name: 'Improve now' })).toBeVisible(); - await page.getByRole('checkbox').uncheck(); - await expect(page.getByLabel('Extra Features We\'re')).toContainText('Skip Improvement'); - await page.getByRole('button', { name: 'Skip Improvement' }).click(); + const optimoleCheckbox = page.locator('#enable_performance'); + if (await optimoleCheckbox.isEnabled()) { + await optimoleCheckbox.uncheck(); + } + const otterCheckbox = page.locator('#enable_otter_blocks'); + if (await otterCheckbox.isEnabled()) { + await otterCheckbox.uncheck(); + } + const spcCheckbox = page.locator('#enable_page_cache'); + if (await spcCheckbox.isEnabled()) { + await spcCheckbox.uncheck(); + } + await page.locator('#enable_newsletter').uncheck(); - // Step 5 - await expect(page.getByRole('heading', { name: 'Updates, tutorials, special offers, and more' })).toBeVisible(); - await expect(page.getByLabel('Updates, tutorials, special')).toContainText('Get exclusive access to the Visualizer newsletter.'); - await expect(page.getByLabel('Updates, tutorials, special').locator('img')).toBeVisible(); - await expect(page.getByPlaceholder('test1@xx.com')).toBeVisible(); - await page.getByPlaceholder('test1@xx.com').click(); - await page.getByPlaceholder('test1@xx.com').fill('test@email.com'); - await expect(page.getByLabel('Updates, tutorials, special')).toContainText('Send Me Access'); - await expect(page.getByLabel('Updates, tutorials, special')).toContainText('Skip, Don’t give me access'); - await page.getByRole('button', { name: 'Skip, Don’t give me access' }).click(); + await expect(page.getByRole('button', { name: 'Finish Setup' })).toBeVisible(); } ); } ); From 9148401f9cc23d63fde0d65e4cdd4627f1d00364 Mon Sep 17 00:00:00 2001 From: Hardeep Asrani Date: Fri, 27 Mar 2026 20:05:17 +0530 Subject: [PATCH 2/2] fix: onboarding not redrecting --- classes/Visualizer/Module/Setup.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/classes/Visualizer/Module/Setup.php b/classes/Visualizer/Module/Setup.php index 8a56055eb..f0cc81f47 100644 --- a/classes/Visualizer/Module/Setup.php +++ b/classes/Visualizer/Module/Setup.php @@ -252,10 +252,21 @@ public function adminInit() { // fire any upgrades necessary. Visualizer_Module_Upgrade::upgrade(); - if ( get_option( 'visualizer-activated' ) ) { + $activated_flag = get_option( 'visualizer-activated' ); + $fresh_install = get_option( 'visualizer_fresh_install', false ); + $is_pro = Visualizer_Module::is_pro(); + if ( $activated_flag ) { + if ( function_exists( 'wp_doing_ajax' ) && wp_doing_ajax() ) { + // Defer redirect until a normal admin request. + return; + } + if ( wp_doing_cron() ) { + // Defer redirect during cron requests. + return; + } delete_option( 'visualizer-activated' ); if ( ! headers_sent() ) { - if ( ! Visualizer_Module::is_pro() && ! empty( get_option( 'visualizer_fresh_install', false ) ) ) { + if ( ! $is_pro && ! empty( $fresh_install ) ) { $redirect_url = array( 'page' => 'visualizer-setup-wizard', 'tab' => '#step-1',