__( 'Spectra Onboarding', 'ultimate-addons-for-gutenberg' ),
'product' => array(
'id' => 'spectra',
'name' => __( 'Spectra', 'ultimate-addons-for-gutenberg' ),
),
'logo' => UAGB_URL . 'assets/images/logos/spectra.svg',
'screens' => array(
'welcome' => array(
'heading' => __( 'Welcome to Spectra', 'ultimate-addons-for-gutenberg' ),
'description' => __( 'Build a fast, beautiful WordPress site—effortlessly.', 'ultimate-addons-for-gutenberg' ),
'banner' => array(
'type' => 'video',
'url' => 'https://www.youtube-nocookie.com/embed/GLNzTxArR6Y?showinfo=0&autoplay=1&modestbranding=1&rel=0',
'title' => __( 'Getting Started with Spectra', 'ultimate-addons-for-gutenberg' ),
'thumbnail' => UAGB_URL . 'admin-core/assets/images/onboarding-video-bg.png',
),
'items' => array(
__( 'Trusted by 1.8M+ websites worldwide', 'ultimate-addons-for-gutenberg' ),
__( 'Import ready-made patterns & templates', 'ultimate-addons-for-gutenberg' ),
__( 'Easy customization—no coding or design skills', 'ultimate-addons-for-gutenberg' ),
__( 'Drag & Drop blocks to build your layout', 'ultimate-addons-for-gutenberg' ),
),
),
'user-info' => array(
'description' => __( 'Get helpful updates, new features, and tips to make your website better—while helping us improve Spectra.', 'ultimate-addons-for-gutenberg' ),
'sourceOptions' => array(
'wordpress' => __( 'WordPress Plugin Directory', 'ultimate-addons-for-gutenberg' ),
'google' => __( 'Google Search', 'ultimate-addons-for-gutenberg' ),
'social' => __( 'Social Media', 'ultimate-addons-for-gutenberg' ),
'youtube' => __( 'YouTube', 'ultimate-addons-for-gutenberg' ),
'friend' => __( 'A friend or colleague', 'ultimate-addons-for-gutenberg' ),
'other' => __( 'Other', 'ultimate-addons-for-gutenberg' ),
),
'benefitOptions' => array(
'design-flexibility' => __( 'Advanced design flexibility without bloated builders', 'ultimate-addons-for-gutenberg' ),
'ai-and-templates' => __( 'AI and templates help me design quickly', 'ultimate-addons-for-gutenberg' ),
'fast-loading' => __( 'I need a fast-loading page builder', 'ultimate-addons-for-gutenberg' ),
'updates-and-support' => __( 'Regular updates and support from Brainstorm Force', 'ultimate-addons-for-gutenberg' ),
'other' => __( 'Other (please specify)', 'ultimate-addons-for-gutenberg' ),
),
'privacyPolicy' => array(
'url' => 'https://store.brainstormforce.com/usage-tracking/?utm_source=spectra_dashboard&utm_medium=onboarding&utm_campaign=link',
'label' => __( 'Privacy Policy', 'ultimate-addons-for-gutenberg' ),
),
'optIn' => array(
'description' => __( 'Stay in the loop and help shape Spectra! Get feature updates, and help us build a better Spectra by sharing how you use the plugin.', 'ultimate-addons-for-gutenberg' ),
'learnMoreUrl' => 'https://store.brainstormforce.com/usage-tracking/?utm_source=spectra_dashboard&utm_medium=onboarding&utm_campaign=link',
),
),
'features' => array(
'description' => __( 'Enable the features you need to design faster and build better with Spectra.', 'ultimate-addons-for-gutenberg' ),
'featureList' => self::get_feature_list(),
'upgradeUrl' => 'https://wpspectra.com/pricing/?utm_source=spectra_dashboard&utm_medium=onboarding&utm_campaign=pro-features',
),
'add-ons' => array(
'addonList' => self::get_addon_list(),
),
'done' => array(
'items' => array(
__( 'Create a Page', 'ultimate-addons-for-gutenberg' ),
__( 'Visit Dashboard', 'ultimate-addons-for-gutenberg' ),
__( 'View Documentation', 'ultimate-addons-for-gutenberg' ),
),
'cta1' => array(
'url' => admin_url( 'post-new.php?post_type=page' ),
'label' => __( 'Create a Page', 'ultimate-addons-for-gutenberg' ),
),
'cta2' => array(
'url' => admin_url( 'admin.php?page=spectra' ),
'label' => __( 'Visit Dashboard', 'ultimate-addons-for-gutenberg' ),
),
'cta3' => array(
'url' => 'https://wpspectra.com/docs/?utm_source=spectra_dashboard&utm_medium=onboarding',
'label' => __( 'Docs & Help Center', 'ultimate-addons-for-gutenberg' ),
),
),
),
'exit' => array(
'url' => admin_url( 'admin.php?page=spectra' ),
),
'colors' => array(),
'option_name' => 'spectra_onboarding',
'pro_status' => self::get_pro_status(),
'pro_slug' => 'spectra-pro',
)
);
// Completion hooks.
add_action( 'one_onboarding_completion_spectra', array( $this, 'handle_onboarding_completion' ), 10, 2 );
add_action( 'one_onboarding_plugin_activated', array( $this, 'handle_plugin_activated' ) );
}
/**
* Get Spectra Pro plugin status.
*
* @since 2.19.23
* @return string
*/
private static function get_pro_status() {
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if ( is_plugin_active( 'spectra-pro/spectra-pro.php' ) ) {
return 'Activated';
}
$all_plugins = get_plugins();
if ( isset( $all_plugins['spectra-pro/spectra-pro.php'] ) ) {
return 'Installed';
}
return 'Not Installed';
}
/**
* Handle onboarding completion.
*
* @since 2.19.23
* @param array $completion_data Onboarding state, user info, product details.
* @param \WP_REST_Request $request REST request object.
* @return void
*/
public function handle_onboarding_completion( $completion_data, $request ) {
$screens = isset( $completion_data['screens'] ) ? $completion_data['screens'] : array();
$is_user_info_skipped = true;
foreach ( $screens as $screen ) {
if ( 'user-info' === $screen['id'] ) {
$is_user_info_skipped = isset( $screen['skipped'] ) ? $screen['skipped'] : true;
}
}
// Update analytics opt-in and send lead if user-info was not skipped.
if ( ! $is_user_info_skipped ) {
$user_info = isset( $completion_data['user_info'] ) ? $completion_data['user_info'] : array();
$optin = ! empty( $user_info['optIn'] );
// Update analytics opt-in.
update_site_option( 'spectra_usage_optin', $optin ? 'yes' : 'no' );
// Only send lead to CRM if user opted in.
if ( $optin ) {
self::generate_lead( $user_info );
}
}
// Track onboarding completion event.
if ( class_exists( 'UAGB_Analytics_Events' ) ) {
$skipped_steps = array();
foreach ( $screens as $screen ) {
if ( ! empty( $screen['skipped'] ) ) {
$skipped_steps[] = sanitize_text_field( $screen['id'] );
}
}
$properties = array();
if ( ! empty( $skipped_steps ) ) {
$properties['skipped_steps'] = implode( ',', $skipped_steps );
}
UAGB_Analytics_Events::track( 'onboarding_completed', '', $properties );
}
}
/**
* Handle plugin activation from onboarding add-ons step.
*
* @since 2.19.23
* @param string $slug Plugin slug.
* @return void
*/
public function handle_plugin_activated( $slug ) {
if ( empty( $slug ) ) {
return;
}
if ( class_exists( 'BSF_UTM_Analytics' ) && is_callable( array( 'BSF_UTM_Analytics', 'update_referer' ) ) ) {
BSF_UTM_Analytics::update_referer( 'spectra', $slug );
}
}
/**
* Check if onboarding has been completed.
*
* @since 2.19.23
* @return bool
*/
public static function is_onboarding_completed() {
$data = get_option( 'spectra_onboarding', array() );
return ! empty( $data );
}
/**
* Get feature list for the features step.
*
* @since 2.19.23
* @return array