212 lines
6.3 KiB
JavaScript
212 lines
6.3 KiB
JavaScript
const EDD_v3_Upgrades = {
|
|
inProgress: false,
|
|
|
|
init: function() {
|
|
// Listen for toggle on the checkbox.
|
|
$( '.edd-v3-migration-confirmation' ).on( 'change', function( e ) {
|
|
const wrapperForm = $( this ).closest( '.edd-v3-migration' );
|
|
const formSubmit = wrapperForm.find( 'button' );
|
|
|
|
if ( e.target.checked ) {
|
|
formSubmit.removeClass( 'disabled' ).prop( 'disabled', false );
|
|
} else {
|
|
formSubmit.addClass( 'disabled' ).prop( 'disabled', true );
|
|
}
|
|
} );
|
|
|
|
$( '.edd-v3-migration' ).on( 'submit', function( e ) {
|
|
e.preventDefault();
|
|
|
|
if ( EDD_v3_Upgrades.inProgress ) {
|
|
return;
|
|
}
|
|
|
|
EDD_v3_Upgrades.inProgress = true;
|
|
|
|
const migrationForm = $( this );
|
|
const upgradeKeyField = migrationForm.find( 'input[name="upgrade_key"]' );
|
|
let upgradeKey = false;
|
|
|
|
if ( upgradeKeyField.length && upgradeKeyField.val() ) {
|
|
upgradeKey = upgradeKeyField.val();
|
|
}
|
|
|
|
// Disable submit button.
|
|
migrationForm.find( 'button' )
|
|
.removeClass( 'button-primary' )
|
|
.addClass( 'button-secondary disabled updating-message' )
|
|
.prop( 'disabled', true );
|
|
|
|
// Disable checkbox.
|
|
migrationForm.find( 'input' ).prop( 'disabled', true );
|
|
|
|
// If this is the main migration, reveal the steps & mark the first non-complete item as in progress.
|
|
if ( 'edd-v3-migration' === migrationForm.attr( 'id' ) ) {
|
|
$( '#edd-migration-progress' ).removeClass( 'edd-hidden' );
|
|
const firstNonCompleteUpgrade = $( '#edd-migration-progress li:not(.edd-upgrade-complete)' );
|
|
if ( firstNonCompleteUpgrade.length && ! upgradeKey ) {
|
|
upgradeKey = firstNonCompleteUpgrade.data( 'upgrade' );
|
|
}
|
|
}
|
|
|
|
EDD_v3_Upgrades.processStep( upgradeKey, 1, migrationForm.find( 'input[name="_wpnonce"]' ).val() );
|
|
} )
|
|
},
|
|
|
|
processStep: function( upgrade_key, step, nonce ) {
|
|
let data = {
|
|
action: 'edd_process_v3_upgrade',
|
|
_ajax_nonce: nonce,
|
|
upgrade_key: upgrade_key,
|
|
step: step
|
|
}
|
|
|
|
EDD_v3_Upgrades.clearErrors();
|
|
|
|
if ( upgrade_key ) {
|
|
EDD_v3_Upgrades.markUpgradeInProgress( upgrade_key );
|
|
}
|
|
|
|
$.ajax( {
|
|
type: 'POST',
|
|
data: data,
|
|
url: ajaxurl,
|
|
success: function( response ) {
|
|
if ( ! response.success ) {
|
|
EDD_v3_Upgrades.showError( upgrade_key, response.data );
|
|
return;
|
|
}
|
|
|
|
if ( response.data.upgrade_completed ) {
|
|
EDD_v3_Upgrades.markUpgradeComplete( response.data.upgrade_processed );
|
|
|
|
// If we just completed legacy data removal then we're all done!
|
|
if ( 'v30_legacy_data_removed' === response.data.upgrade_processed ) {
|
|
EDD_v3_Upgrades.legacyDataRemovalComplete();
|
|
|
|
return;
|
|
}
|
|
} else if( response.data.percentage ) {
|
|
// Update percentage for the upgrade we just processed.
|
|
EDD_v3_Upgrades.updateUpgradePercentage( response.data.upgrade_processed, response.data.percentage );
|
|
}
|
|
|
|
if ( response.data.next_upgrade && 'v30_legacy_data_removed' === response.data.next_upgrade && 'v30_legacy_data_removed' !== response.data.upgrade_processed ) {
|
|
EDD_v3_Upgrades.inProgress = false;
|
|
|
|
// Legacy data removal is next, which we do not start automatically.
|
|
EDD_v3_Upgrades.showLegacyDataRemoval();
|
|
} else if ( response.data.next_upgrade ) {
|
|
// Start the next upgrade (or continuation of current) automatically.
|
|
EDD_v3_Upgrades.processStep( response.data.next_upgrade, response.data.next_step, response.data.nonce );
|
|
} else {
|
|
EDD_v3_Upgrades.inProgress = false;
|
|
EDD_v3_Upgrades.stopAllSpinners();
|
|
}
|
|
}
|
|
} ).fail( ( data ) => {
|
|
// @todo
|
|
} )
|
|
},
|
|
|
|
clearErrors: function() {
|
|
$( '.edd-v3-migration-error' ).addClass( 'edd-hidden' ).html( '' );
|
|
},
|
|
|
|
showError: function( upgradeKey, message ) {
|
|
let container = $( '#edd-v3-migration' );
|
|
if ( 'v30_legacy_data_removed' === upgradeKey ) {
|
|
container = $( '#edd-v3-remove-legacy-data' );
|
|
}
|
|
const errorWrapper = container.find( '.edd-v3-migration-error' );
|
|
|
|
errorWrapper.html( '<p>' + message + '</p>' ).removeClass( 'edd-hidden' );
|
|
|
|
// Stop processing and allow form resubmission.
|
|
EDD_v3_Upgrades.inProgress = false;
|
|
container.find( 'input' ).prop( 'disabled', false );
|
|
container.find( 'button' )
|
|
.prop( 'disabled', false )
|
|
.addClass( 'button-primary' )
|
|
.removeClass( 'button-secondary disabled updating-message' );
|
|
},
|
|
|
|
markUpgradeInProgress: function( upgradeKey ) {
|
|
const upgradeRow = $( '#edd-v3-migration-' + upgradeKey );
|
|
if ( ! upgradeRow.length ) {
|
|
return;
|
|
}
|
|
|
|
const statusIcon = upgradeRow.find( '.dashicons' );
|
|
if ( statusIcon.length ) {
|
|
statusIcon.removeClass( 'dashicons-minus' ).addClass( 'dashicons-update' );
|
|
}
|
|
|
|
upgradeRow.find( '.edd-migration-percentage' ).removeClass( 'edd-hidden' );
|
|
},
|
|
|
|
updateUpgradePercentage: function( upgradeKey, newPercentage ) {
|
|
const upgradeRow = $( '#edd-v3-migration-' + upgradeKey );
|
|
if ( ! upgradeRow.length ) {
|
|
return;
|
|
}
|
|
|
|
upgradeRow.find( '.edd-migration-percentage-value' ).text( newPercentage );
|
|
},
|
|
|
|
markUpgradeComplete: function( upgradeKey ) {
|
|
const upgradeRow = $( '#edd-v3-migration-' + upgradeKey );
|
|
if ( ! upgradeRow.length ) {
|
|
return;
|
|
}
|
|
|
|
upgradeRow.addClass( 'edd-upgrade-complete' );
|
|
|
|
const statusIcon = upgradeRow.find( '.dashicons' );
|
|
if ( statusIcon.length ) {
|
|
statusIcon.removeClass( 'dashicons-minus dashicons-update' ).addClass( 'dashicons-yes' );
|
|
}
|
|
|
|
const statusLabel = upgradeRow.find( '.edd-migration-status .screen-reader-text' );
|
|
if ( statusLabel.length ) {
|
|
statusLabel.text( edd_admin_upgrade_vars.migration_complete );
|
|
}
|
|
|
|
// Update percentage to 100%;
|
|
upgradeRow.find( '.edd-migration-percentage-value' ).text( 100 );
|
|
},
|
|
|
|
showLegacyDataRemoval: function() {
|
|
// Un-spin the main submit button.
|
|
$( '#edd-v3-migration-button' ).removeClass( 'updating-message' );
|
|
|
|
// Show the "migration complete" message.
|
|
$( '#edd-v3-migration-complete' ).removeClass( 'edd-hidden' );
|
|
|
|
const dataRemovalWrapper = $( '#edd-v3-remove-legacy-data' );
|
|
if ( ! dataRemovalWrapper.length ) {
|
|
return;
|
|
}
|
|
|
|
dataRemovalWrapper.removeClass( 'edd-hidden' );
|
|
},
|
|
|
|
legacyDataRemovalComplete: function() {
|
|
const wrapper = $( '#edd-v3-remove-legacy-data' );
|
|
if ( ! wrapper.length ) {
|
|
return;
|
|
}
|
|
|
|
wrapper.find( 'form' ).addClass( 'edd-hidden' );
|
|
wrapper.find( '#edd-v3-legacy-data-removal-complete' ).removeClass( 'edd-hidden' );
|
|
},
|
|
|
|
stopAllSpinners: function() {
|
|
|
|
}
|
|
}
|
|
|
|
jQuery( document ).ready( function( $ ) {
|
|
EDD_v3_Upgrades.init();
|
|
} );
|