geno/wp-content/plugins/cartflows/admin/assets/js/setup-wizard.js
2024-02-01 11:54:18 +00:00

508 lines
12 KiB
JavaScript

/**
* AJAX Request Queue
*
* - add()
* - remove()
* - run()
* - stop()
*
* @since x.x.x
*/
const CartFlowsAjaxQueue = ( function () {
let requests = [];
return {
/**
* Add AJAX request
*
* @param {string} opt selected opt.
* @since x.x.x
*/
add( opt ) {
requests.push( opt );
},
/**
* Remove AJAX request
*
* @param {string} opt selected opt.
* @since x.x.x
*/
remove( opt ) {
if ( jQuery.inArray( opt, requests ) > -1 ) {
requests.splice( jQuery.inArray( opt, requests ), 1 );
}
},
/**
* Run / Process AJAX request
*
* @since x.x.x
*/
run() {
const self = this;
let oriSuc;
if ( requests.length ) {
oriSuc = requests[ 0 ].complete;
requests[ 0 ].complete = function () {
if ( typeof oriSuc === 'function' ) {
oriSuc();
}
requests.shift();
self.run.apply( self, [] );
};
jQuery.ajax( requests[ 0 ] );
} else {
self.tid = setTimeout( function () {
self.run.apply( self, [] );
}, 1000 );
}
},
/**
* Stop AJAX request
*
* @since x.x.x
*/
stop() {
requests = [];
clearTimeout( this.tid );
},
};
} )();
( function ( $ ) {
const CartFlowsWizard = {
remaining_install_plugins: 0,
remaining_active_plugins: 0,
init() {
this._bind();
},
/**
* Bind
*/
_bind() {
//Page builder installation & save option
$( document )
.on(
'click',
'.wcf-install-plugins',
CartFlowsWizard._install_page_builder_plugin
)
.on(
'click',
'.wcf-usage-tracking',
CartFlowsWizard._usage_tracking
)
.on(
'change',
'.page-builder-list',
CartFlowsWizard._onChangePagebuilder
)
.on(
'click',
'.wcf-install-wc',
CartFlowsWizard._install_required_plugins
)
.on( 'wp-plugin-installing', CartFlowsWizard._pluginInstalling )
.on( 'wp-plugin-install-error', CartFlowsWizard._installError )
.on(
'wp-plugin-install-success',
CartFlowsWizard._installSuccess
)
.on(
'click',
'.sendinblue-form-submit',
CartFlowsWizard._onSendinblueSubmit
);
},
/**
* Install Now
*
* @param {Object} event event data.
*/
_install_page_builder_plugin( event ) {
event.preventDefault();
const $button = $( this ),
// Selected page builder
plugin_slug =
$( '.page-builder-list option:selected' ).data( 'slug' ) ||
'',
is_installed =
$( '.page-builder-list option:selected' ).data(
'install'
) || 'no',
is_activeted =
$( '.page-builder-list option:selected' ).data(
'active'
) || 'no',
plugin_init =
$( '.page-builder-list option:selected' ).data( 'init' ) ||
'',
redirect_link =
$( '.wcf-redirect-link' ).data( 'redirect-link' ) || '';
if (
$button.hasClass( 'updating-message' ) ||
$button.hasClass( 'button-disabled' )
) {
return;
}
$button.addClass( 'updating-message' );
//Save page builder option in global settings.
$.ajax( {
url: ajaxurl,
method: 'POST',
data: {
action: 'page_builder_save_option',
page_builder: plugin_slug,
},
} )
.success( function () {
console.log( 'Option Saved Successfully.' );
} )
.fail( function () {
console.log( 'error' );
} );
if ( 'yes' === is_installed && 'no' === is_activeted ) {
CartFlowsWizard._activatePlugin(
plugin_init,
plugin_slug,
true
);
} else if ( 'no' === is_installed ) {
CartFlowsWizard._installPlugin( plugin_slug );
} else {
window.location = redirect_link;
}
},
_install_required_plugins( event ) {
event.preventDefault();
const $button = $( this );
if (
$button.hasClass( 'updating-message' ) ||
$button.hasClass( 'button-disabled' )
) {
return;
}
$button.addClass( 'updating-message' );
const redirect_link =
$( '.wcf-redirect-link' ).data( 'redirect-link' ) || '';
console.log( cartflows_setup_vars.plugin_status );
const page_builder_plugins = cartflows_setup_vars.plugins;
$.each( page_builder_plugins, function ( plugin, status ) {
if ( 'not-installed' === status ) {
CartFlowsWizard.remaining_install_plugins++;
}
if ( 'inactive' === status ) {
CartFlowsWizard.remaining_active_plugins++;
}
} );
// Have any plugin for install?
if ( CartFlowsWizard.remaining_install_plugins ) {
CartFlowsWizard._install_all_plugins();
} else if ( CartFlowsWizard.remaining_active_plugins ) {
CartFlowsWizard._activate_all_plugins();
} else if (
! CartFlowsWizard.remaining_active_plugins &&
! CartFlowsWizard.remaining_install_plugins
) {
window.location = redirect_link;
}
},
_usage_tracking() {
let allow_usage_tracking = document.getElementById(
'cartflows-usage-tracking-option'
);
if ( allow_usage_tracking && allow_usage_tracking.checked ) {
allow_usage_tracking = true;
} else {
allow_usage_tracking = false;
}
$.ajax( {
url: ajaxurl,
method: 'POST',
data: {
action: 'usage_tracking_option',
allow_usage_tracking,
security:
cartflows_setup_vars.wcf_usage_tracking_option_nonce,
},
} )
.done( function ( response ) {
if ( response.success ) {
console.log( 'Option Updated.' );
}
} )
.fail( function () {
console.log( 'error' );
} )
.always( function () {
console.log( 'complete' );
} );
},
_onSendinblueSubmit( event ) {
event.preventDefault();
event.stopPropagation();
const form = $( this ).closest( 'form' ),
name_field = form.find( '#cartflows_onboarding_name' ).val()
? form.find( '#cartflows_onboarding_name' ).val()
: '',
email_field = form.find( '#cartflows_onboarding_email' ),
reg =
/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,14})$/;
if ( reg.test( email_field.val() ) === false ) {
email_field.addClass( 'wcf-error' );
return false;
}
email_field.removeClass( 'wcf-error' );
const submit_button = $( this );
submit_button.attr( 'disabled', 'disabled' );
const nonce = form.find( '#wcf_user_onboarding_nonce' ).val();
$.ajax( {
type: 'POST',
url: ajaxurl,
method: 'POST',
data: {
action: 'wcf_user_onboarding',
user_email: email_field.val(),
user_fname: name_field,
security: nonce,
},
// async: false,
success( response ) {
console.log( 'in success' );
if ( response.data.success ) {
console.log( response.data.message );
const redirect_link =
$( '.wcf-redirect-link' ).data( 'redirect-link' ) ||
'';
window.location = redirect_link;
} else {
const error_field = form.find( '.onboarding-error' );
console.log( response.data.message );
error_field.text( response.data.message );
submit_button.removeAttr( 'disabled' );
return false;
}
},
error( response ) {
console.log( 'in error' );
console.log( response );
},
} );
/* Do not execute anything here */
},
_onChangePagebuilder() {
let plugin_slug =
$( '.page-builder-list option:selected' ).data( 'slug' ) || '';
const new_url = 'https://wordpress.org/plugins/' + plugin_slug;
$( '.cartflows-setup-extra-notice' ).show();
if ( 'other' === plugin_slug || 'divi' === plugin_slug ) {
$( '.cartflows-setup-extra-notice' ).hide();
return;
}
plugin_slug = plugin_slug.replace( /-/gi, ' ' );
$( '#wcf-page-builder' ).attr( 'href', new_url );
$( '#wcf-page-builder' ).html( plugin_slug );
},
_installPlugin( plugin_slug ) {
if (
wp.updates.shouldRequestFilesystemCredentials &&
! wp.updates.ajaxLocked
) {
wp.updates.requestFilesystemCredentials( event );
$document.on( 'credential-modal-cancel', function () {
const $message = $( '.install-now.updating-message' );
$message
.removeClass( 'updating-message' )
.text( wp.updates.l10n.installNow );
wp.a11y.speak( wp.updates.l10n.updateCancel, 'polite' );
} );
}
wp.updates.queue.push( {
action: 'install-plugin', // Required action.
data: {
slug: plugin_slug,
},
} );
// Required to set queue.
wp.updates.queueChecker();
},
_activatePlugin( plugin_init, plugin_slug, redirect = false ) {
const redirect_link =
$( '.wcf-redirect-link' ).data( 'redirect-link' ) || '';
$.ajax( {
url: ajaxurl,
method: 'POST',
data: {
action: 'wcf_activate_plugin',
plugin_slug,
plugin_init,
security: cartflows_setup_vars.wcf_activate_plugin_nonce,
},
} )
.done( function ( response ) {
if ( response.success && redirect ) {
console.log( plugin_slug + ' activated' );
window.location = redirect_link;
}
} )
.fail( function () {
console.log( 'activation error' );
} );
},
/**
* Installing Plugin
*
* @param {Object} event event data.
*/
_pluginInstalling( event ) {
event.preventDefault();
console.log( 'Installing..' );
},
/**
* Install Error
*
* @param {Object} event event data.
*/
_installError( event ) {
event.preventDefault();
console.log( 'Install Error!' );
const redirect_link =
$( '.wcf-redirect-link' ).data( 'redirect-link' ) || '';
console.log( redirect_link );
if ( '' !== redirect_link ) {
window.location = redirect_link;
console.log( 'redirecting..' );
}
},
/**
* Install Success
*
* @param {Object} event event data.
* @param {Array} args args data.
*/
_installSuccess( event, args ) {
event.preventDefault();
const plugin_init = args.slug + '/' + args.slug + '.php';
const plugin_slug = args.slug;
// WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that.
setTimeout( function () {
CartFlowsWizard._activatePlugin( plugin_init, plugin_slug );
if ( CartFlowsWizard.remaining_install_plugins > 0 ) {
CartFlowsWizard.remaining_install_plugins--;
}
if ( ! CartFlowsWizard.remaining_install_plugins ) {
CartFlowsWizard._activate_all_plugins();
}
}, 1500 );
},
_install_all_plugins() {
const page_builder_plugins = cartflows_setup_vars.plugins;
$.each( page_builder_plugins, function ( plugin, status ) {
if ( 'not-installed' === status ) {
CartFlowsWizard._installPlugin( plugin );
}
} );
},
_activate_all_plugins() {
const redirect_link =
$( '.wcf-redirect-link' ).data( 'redirect-link' ) || '';
if (
! CartFlowsWizard.remaining_active_plugins &&
! CartFlowsWizard.remaining_install_plugins
) {
window.location = redirect_link;
}
const page_builder_plugins = cartflows_setup_vars.plugins;
// Activate All Plugins.
CartFlowsAjaxQueue.stop();
CartFlowsAjaxQueue.run();
$.each( page_builder_plugins, function ( plugin, status ) {
const plugin_init = plugin + '/' + plugin + '.php';
const plugin_slug = plugin;
if ( 'inactive' === status ) {
CartFlowsAjaxQueue.add( {
url: ajaxurl,
type: 'POST',
data: {
action: 'wcf_activate_plugin',
plugin_slug,
plugin_init,
security:
cartflows_setup_vars.wcf_activate_plugin_nonce,
},
success() {
CartFlowsWizard.remaining_active_plugins--;
if (
! CartFlowsWizard.remaining_active_plugins &&
! CartFlowsWizard.remaining_install_plugins
) {
window.location = redirect_link;
}
},
} );
}
} );
},
};
$( function () {
CartFlowsWizard.init();
} );
} )( jQuery );