Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
0e9f573
Add "consent-tracking" step
shervElmi Oct 10, 2024
2eee772
Add "primary-button-with-icon" option
shervElmi Oct 11, 2024
97bdcb4
Add consent tracking dropdown
shervElmi Oct 14, 2024
9ef1d1d
Finish consent tracking step
shervElmi Oct 14, 2024
5d1fe32
Add routline
shervElmi Oct 14, 2024
3506b35
Remove old steps
shervElmi Oct 15, 2024
5fc1126
Remove "license-management"
shervElmi Oct 15, 2024
9f7246b
Finish rootline
shervElmi Oct 15, 2024
0b51070
Add "frm-cta-footer"
shervElmi Oct 16, 2024
11bedec
Add unsuccess
shervElmi Oct 16, 2024
1600589
Merge branch 'master' into improve-onboarding
shervElmi Oct 16, 2024
efa8d81
Fix typo checks error
shervElmi Oct 16, 2024
363f7d0
Remove old codes and clean up
shervElmi Oct 16, 2024
7150511
Add "ajax_consent_tracking"
shervElmi Oct 17, 2024
0fb2f1a
Add auto-generated js file
shervElmi Oct 17, 2024
80f621f
Add missed semicolon after border-color property
shervElmi Oct 17, 2024
5afd95b
Merge remote-tracking branch 'origin/master' into improve-onboarding
shervElmi Oct 18, 2024
f3eebb7
Add active campaign subscribe
Crabcyborg Oct 18, 2024
7f00253
Merge branch 'improve-onboarding' of https://github.com/Strategy11/fo…
Crabcyborg Oct 18, 2024
4a403cf
Tweak: Fix lint error and enhance a condition
shervElmi Oct 18, 2024
0b301cb
Tweak: fix PHPCS error
shervElmi Oct 18, 2024
4a956d3
Also pass the Active Campaign tag
Crabcyborg Oct 21, 2024
cc58bd2
Merge branch 'master' into improve-onboarding
shervElmi Oct 21, 2024
5493c92
Update "set_available_addons" method
shervElmi Oct 21, 2024
4be675e
Add "data-is-installed" to add-ons
shervElmi Oct 21, 2024
8a34c3c
Update "ajax_install_plugin" method
shervElmi Oct 21, 2024
5d0b28f
Update "installAddon" function
shervElmi Oct 21, 2024
119f3f0
Add auo-generated js file
shervElmi Oct 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion classes/controllers/FrmHooksController.php
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ public static function load_ajax_hooks() {
add_action( 'wp_ajax_frm_deauthorize', 'FrmAppController::deauthorize' );

// Onboarding Wizard Controller.
add_action( 'wp_ajax_frm_onboarding_setup_email_step', 'FrmOnboardingWizardController::ajax_setup_email_step' );
add_action( 'wp_ajax_frm_onboarding_consent_tracking', 'FrmOnboardingWizardController::ajax_consent_tracking' );
add_action( 'wp_ajax_frm_onboarding_setup_usage_data', 'FrmOnboardingWizardController::setup_usage_data' );

// Addons.
Expand Down
209 changes: 122 additions & 87 deletions classes/controllers/FrmOnboardingWizardController.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class FrmOnboardingWizardController {
*
* @var string
*/
const INITIAL_STEP = 'welcome';
const INITIAL_STEP = 'consent-tracking';

/**
* Option name to store usage data.
Expand Down Expand Up @@ -279,49 +279,72 @@ public static function render() {

// Note: Add step parts in order.
$step_parts = array(
'welcome' => 'steps/welcome-step.php',
'install-formidable-pro' => 'steps/install-formidable-pro-step.php',
'license-management' => 'steps/license-management-step.php',
'default-email-address' => 'steps/default-email-address-step.php',
'install-addons' => 'steps/install-addons-step.php',
'success' => 'steps/success-step.php',
'consent-tracking' => 'steps/consent-tracking-step.php',
'install-addons' => 'steps/install-addons-step.php',
'success' => 'steps/success-step.php',
'unsuccessful' => 'steps/unsuccessful-step.php',
);

include $view_path . 'index.php';
}

/**
* Handle AJAX request to setup the "Default Email Address" step.
* Handle AJAX request to setup the "Never miss an important update" step.
*
* @since 6.9
*
* @return void
*/
public static function ajax_setup_email_step() {
public static function ajax_consent_tracking() {
Comment thread
shervElmi marked this conversation as resolved.
Comment thread
Crabcyborg marked this conversation as resolved.
// Check permission and nonce.
FrmAppHelper::permission_check( self::REQUIRED_CAPABILITY );
check_ajax_referer( 'frm_ajax', 'nonce' );

// Get posted data.
$from_email = FrmAppHelper::get_post_param( 'from_email', '', 'sanitize_email' );
$default_email = FrmAppHelper::get_post_param( 'default_email', '', 'sanitize_email' );
$allows_tracking = FrmAppHelper::get_post_param( 'allows_tracking', '', 'rest_sanitize_boolean' );
$summary_emails = FrmAppHelper::get_post_param( 'summary_emails', '', 'rest_sanitize_boolean' );

// Update Settings.
$frm_settings = FrmAppHelper::get_settings();
$frm_settings->update_setting( 'from_email', $from_email, 'sanitize_text_field' );
$frm_settings->update_setting( 'default_email', $default_email, 'sanitize_text_field' );
$frm_settings->update_setting( 'tracking', $allows_tracking, 'rest_sanitize_boolean' );
$frm_settings->update_setting( 'summary_emails', $summary_emails, 'rest_sanitize_boolean' );
$frm_settings->update_setting( 'tracking', true, 'rest_sanitize_boolean' );

// Remove the 'FrmProSettingsController::store' action to avoid PHP errors during AJAX call.
remove_action( 'frm_store_settings', 'FrmProSettingsController::store' );
$frm_settings->store();

self::subscribe_to_active_campaign();

// Send response.
wp_send_json_success();
}

/**
* When the user consents to receiving news of updates, subscribe their email to ActiveCampaign.
*
* @since x.x
Comment thread
shervElmi marked this conversation as resolved.
*
* @return void
*/
private static function subscribe_to_active_campaign() {
$user = wp_get_current_user();
if ( empty( $user->user_email ) ) {
return;
}

wp_remote_post(
'https://sandbox.formidableforms.com/api/wp-admin/admin-ajax.php?action=frm_forms_preview&form=subscribe-onboarding',
array(
'body' => http_build_query(
array(
'form_key' => 'subscribe-onboarding',
'frm_action' => 'create',
'form_id' => 5,
'item_key' => '',
'item_meta[0]' => '',
'item_meta[15]' => $user->user_email,
'item_meta[17]' => 'Source - FF Lite Plugin Onboarding',
)
),
)
);
}
Comment thread
shervElmi marked this conversation as resolved.

/**
* Handle AJAX request to set up usage data for the Onboarding Wizard.
*
Expand All @@ -338,10 +361,7 @@ public static function setup_usage_data() {
$usage_data = self::get_usage_data();

$fields_to_update = array(
'default_email' => 'sanitize_email',
'is_subscribed' => 'rest_sanitize_boolean',
'allows_tracking' => 'rest_sanitize_boolean',
'summary_emails' => 'rest_sanitize_boolean',
'installed_addons' => 'sanitize_text_field',
'processed_steps' => 'sanitize_text_field',
'completed_steps' => 'rest_sanitize_boolean',
Expand Down Expand Up @@ -406,8 +426,7 @@ public static function enqueue_assets() {
*/
private static function get_js_variables() {
return array(
'INITIAL_STEP' => self::INITIAL_STEP,
'proIsIncluded' => FrmAppHelper::pro_is_included(),
'INITIAL_STEP' => self::INITIAL_STEP,
);
}

Expand Down Expand Up @@ -545,7 +564,9 @@ public static function get_available_addons() {
*/
private static function set_available_addons() {
$pro_is_installed = FrmAppHelper::pro_is_installed();
$plugins = get_plugins();

// Base add-ons always included.
self::$available_addons['spam-protection'] = array(
'title' => esc_html__( 'Spam Protection', 'formidable' ),
'is-checked' => true,
Expand All @@ -558,6 +579,8 @@ private static function set_available_addons() {
'is-disabled' => true,
'help-text' => esc_html__( 'Collect donations and payments with your forms. Offer physical products, digital goods, services, and more.', 'formidable' ),
);

// Add-ons included when Pro is not installed.
if ( ! $pro_is_installed ) {
self::$available_addons['visual-styler'] = array(
'title' => esc_html__( 'Visual Styler', 'formidable' ),
Expand All @@ -572,79 +595,91 @@ private static function set_available_addons() {
'help-text' => esc_html__( 'Save form submissions to your database for future reference and analysis.', 'formidable' ),
);
}

// SMTP add-on if wp_mail_smtp is not installed.
if ( ! function_exists( 'wp_mail_smtp' ) ) {
$wp_mail_smtp_plugin = 'wp-mail-smtp/wp_mail_smtp.php';
$is_installed_wp_mail_smtp = array_key_exists( $wp_mail_smtp_plugin, $plugins );

self::$available_addons['wp-mail-smtp'] = array(
'title' => esc_html__( 'SMTP', 'formidable' ),
'rel' => 'wp-mail-smtp',
'is-checked' => false,
'is-vendor' => true,
'help-text' => esc_html__( 'Improve email deliverability by routing WordPress emails through SMTP.', 'formidable' ),
'title' => esc_html__( 'SMTP', 'formidable' ),
'rel' => $is_installed_wp_mail_smtp ? $wp_mail_smtp_plugin : 'wp-mail-smtp',
'is-checked' => false,
'is-vendor' => true,
'is-installed' => $is_installed_wp_mail_smtp,
'help-text' => esc_html__( 'Improve email deliverability by routing WordPress emails through SMTP.', 'formidable' ),
);
}

// Add-ons available when Pro is installed.
if ( $pro_is_installed ) {
$views_addon = FrmAddonsController::get_addon( 'views' );
$mailchimp_addon = FrmAddonsController::get_addon( 'mailchimp' );
$registration_addon = FrmAddonsController::get_addon( 'registration' );
$api_addon = FrmAddonsController::get_addon( 'api' );
$acf_addon = FrmAddonsController::get_addon( 'acf' );
$signature_addon = FrmAddonsController::get_addon( 'signature' );

if ( ! is_plugin_active( 'formidable-views/formidable-views.php' ) && isset( $views_addon['url'] ) ) {
self::$available_addons['formidable-views'] = array(
'title' => esc_html__( 'Views', 'formidable' ),
'rel' => $views_addon['url'],
'is-checked' => false,
'help-text' => $views_addon['excerpt'],
);
}
if ( ! is_plugin_active( 'formidable-mailchimp/formidable-mailchimp.php' ) && isset( $mailchimp_addon['url'] ) ) {
self::$available_addons['formidable-mailchimp'] = array(
'title' => esc_html__( 'Mailchimp', 'formidable' ),
'rel' => $mailchimp_addon['url'],
'is-checked' => false,
'help-text' => $mailchimp_addon['excerpt'],
);
}
if ( ! is_plugin_active( 'formidable-registration/formidable-registration.php' ) && isset( $registration_addon['url'] ) ) {
self::$available_addons['formidable-registration'] = array(
'title' => esc_html__( 'User Registration', 'formidable' ),
'rel' => $registration_addon['url'],
'is-checked' => false,
'help-text' => $registration_addon['excerpt'],
);
}
if ( ! is_plugin_active( 'formidable-api/formidable-api.php' ) && isset( $api_addon['url'] ) ) {
self::$available_addons['formidable-api'] = array(
'title' => esc_html__( 'Form Rest API', 'formidable' ),
'rel' => $api_addon['url'],
'is-checked' => false,
'help-text' => $api_addon['excerpt'],
);
}
if ( class_exists( 'ACF' ) && ! is_plugin_active( 'formidable-acf/formidable-acf.php' ) && isset( $acf_addon['url'] ) ) {
self::$available_addons['formidable-acf'] = array(
'title' => esc_html__( 'ACF Forms', 'formidable' ),
'rel' => $acf_addon['url'],
'is-checked' => false,
'help-text' => $acf_addon['excerpt'],
$available_pro_addons = array(
'formidable-views' => array(
'addon_key' => 'views',
'title' => __( 'Views', 'formidable' ),
'plugin_file' => 'formidable-views/formidable-views.php',
),
'formidable-mailchimp' => array(
'addon_key' => 'mailchimp',
'title' => __( 'Mailchimp', 'formidable' ),
'plugin_file' => 'formidable-mailchimp/formidable-mailchimp.php',
),
'formidable-registration' => array(
'addon_key' => 'registration',
'title' => __( 'User Registration', 'formidable' ),
'plugin_file' => 'formidable-registration/formidable-registration.php',
),
'formidable-api' => array(
'addon_key' => 'api',
'title' => __( 'Form Rest API', 'formidable' ),
'plugin_file' => 'formidable-api/formidable-api.php',
),
'formidable-signature' => array(
'addon_key' => 'signature',
'title' => __( 'Signature Forms', 'formidable' ),
'plugin_file' => 'formidable-signature/signature.php',
),
);

// Include ACF Forms add-on if ACF is installed.
if ( class_exists( 'ACF' ) ) {
$available_pro_addons['formidable-acf'] = array(
'addon_key' => 'acf',
'title' => __( 'ACF Forms', 'formidable' ),
'plugin_file' => 'formidable-acf/formidable-acf.php',
);
}
if ( ! is_plugin_active( 'formidable-signature/signature.php' ) && isset( $signature_addon['url'] ) ) {
self::$available_addons['formidable-signature'] = array(
'title' => esc_html__( 'Signature Forms', 'formidable' ),
'rel' => $signature_addon['url'],
'is-checked' => false,
'help-text' => $signature_addon['excerpt'],
);

foreach ( $available_pro_addons as $key => $data ) {
$addon = FrmAddonsController::get_addon( $data['addon_key'] );
$plugin_file = $data['plugin_file'];

if ( ! is_plugin_active( $plugin_file ) && isset( $addon['url'] ) ) {
$is_installed = array_key_exists( $plugin_file, $plugins );

self::$available_addons[ $key ] = array(
'title' => $data['title'],
'rel' => $is_installed ? $plugin_file : $addon['url'],
'is-checked' => false,
'is-installed' => $is_installed,
'help-text' => $addon['excerpt'],
);
}
}
}//end if
if ( class_exists( 'GFForms' ) && ! is_plugin_active( 'formidable-gravity-forms-importer/formidable-gravity-forms-importer.php' ) ) {

// Gravity Forms Migrator add-on.
$gravity_forms_plugin = 'formidable-gravity-forms-importer/formidable-gravity-forms-importer.php';
if ( class_exists( 'GFForms' ) && ! is_plugin_active( $gravity_forms_plugin ) ) {
$is_installed_gravity_forms = array_key_exists( $gravity_forms_plugin, $plugins );

self::$available_addons['formidable-gravity-forms-importer'] = array(
'title' => esc_html__( 'Gravity Forms Migrator', 'formidable' ),
'rel' => 'formidable-gravity-forms-importer',
'is-checked' => false,
'is-vendor' => true,
'help-text' => esc_html__( 'Easily migrate your forms from Gravity Forms to Formidable.', 'formidable' ),
'title' => esc_html__( 'Gravity Forms Migrator', 'formidable' ),
'rel' => $is_installed_gravity_forms ? $gravity_forms_plugin : 'formidable-gravity-forms-importer',
'is-checked' => false,
'is-vendor' => true,
'is-installed' => $is_installed_gravity_forms,
'help-text' => esc_html__( 'Easily migrate your forms from Gravity Forms to Formidable.', 'formidable' ),
);
}
}
Expand Down
10 changes: 7 additions & 3 deletions classes/helpers/FrmOnboardingWizardHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ public static function add_addon_label_attributes( $addon_key, $addon ) {
if ( ! empty( $addon['is-vendor'] ) ) {
$attributes['data-is-vendor'] = 'true';
}
if ( ! empty( $addon['is-installed'] ) ) {
$attributes['data-is-installed'] = 'true';
}

FrmAppHelper::array_to_html_params( $attributes, true );
}
Expand Down Expand Up @@ -87,12 +90,13 @@ public static function add_addon_input_attributes( $addon_key, $addon ) {
public static function print_footer( $args = array() ) {
$defaults = array(
'footer-class' => '',
'display-back-button' => true,
'display-back-button' => false,
// Primary Button Args.
'primary-button-text' => esc_html__( 'Next Step', 'formidable' ),
'primary-button-class' => '',
'primary-button-href' => '#',
'primary-button-role' => 'button',
'primary-button-with-icon' => false,
Comment thread
shervElmi marked this conversation as resolved.
// Secondary Button Args.
'secondary-button-text' => esc_html__( 'Skip', 'formidable' ),
'secondary-button-class' => '',
Expand All @@ -106,7 +110,7 @@ public static function print_footer( $args = array() ) {
$primary_button_attributes = array(
'href' => $args['primary-button-href'],
);
$primary_button_attributes['class'] = trim( 'button button-primary frm-button-primary ' . $args['primary-button-class'] );
$primary_button_attributes['class'] = trim( 'button button-primary frm-button-primary frm-sharp frm_large ' . $args['primary-button-class'] );
if ( ! empty( $args['primary-button-id'] ) ) {
$primary_button_attributes['id'] = $args['primary-button-id'];
}
Expand All @@ -121,7 +125,7 @@ public static function print_footer( $args = array() ) {
$secondary_button_attributes = array(
'href' => $args['secondary-button-href'],
);
$secondary_button_attributes['class'] = trim( 'button button-secondary frm-button-secondary ' . $args['secondary-button-class'] );
$secondary_button_attributes['class'] = trim( 'button button-secondary frm-button-secondary frm-sharp frm_large ' . $args['secondary-button-class'] );
if ( $args['secondary-button-skip-step'] ) {
$secondary_button_attributes['class'] .= ' frm-onboarding-skip-step';
}
Expand Down
Loading