244 lines
6.8 KiB
JavaScript
244 lines
6.8 KiB
JavaScript
(function ($) {
|
|
"use strict";
|
|
|
|
|
|
/**
|
|
* Modula Importer
|
|
*
|
|
* @type {{init: init, runAjaxs: runAjaxs, ajaxTimeout: null, counts: number, upgraderResumeOffset: number, processAjax: processAjax, ajaxRequests: [], completed: number, updateImported: updateImported, ajaxStarted: number}}
|
|
*/
|
|
var dlmDBUpgrader = {
|
|
// used to set the offset of the upgrader
|
|
counts: 0,
|
|
// offset used in case the upgrader has been ended without completion
|
|
upgraderResumeOffset: 0,
|
|
completed: 0,
|
|
ajaxRequests: [],
|
|
ajaxStarted: 1,
|
|
ajaxTimeout: null,
|
|
ajax: ajaxurl,
|
|
entries: 0,
|
|
requestsNumber: 0,
|
|
|
|
init: function () {
|
|
|
|
|
|
|
|
$(document).on('click', 'button#dlm-upgrade-db,a.dlm-db-upgrade-link', function (e) {
|
|
e.preventDefault();
|
|
$(this).prop('disabled', true);
|
|
$('body').find('.dlm-upgrade-db-notice').addClass('started');
|
|
|
|
const opts = {
|
|
url: dlmDBUpgrader.ajax,
|
|
type: 'post',
|
|
async: true,
|
|
cache: false,
|
|
dataType: 'json',
|
|
data: {
|
|
action: 'dlm_db_log_entries',
|
|
nonce: dlm_upgrader.nonce,
|
|
},
|
|
success: function (response) {
|
|
|
|
if ('0' !== response && '0' !== response.entries) {
|
|
|
|
// Set our number of entries.
|
|
dlmDBUpgrader.entries = response.entries;
|
|
|
|
// If there is an offset, set it.
|
|
if (undefined !== typeof response.offset && 0 !== parseInt(response.offset) ) {
|
|
|
|
dlmDBUpgrader.upgraderResumeOffset = parseInt(response.offset);
|
|
|
|
var opts = {
|
|
url: dlmDBUpgrader.ajax,
|
|
type: 'post',
|
|
async: true,
|
|
cache: false,
|
|
dataType: 'json',
|
|
data: {
|
|
action: 'dlm_upgrade_db_clear_offset',
|
|
nonce: dlm_upgrader.nonce,
|
|
// We need to clear the previous upgrade offset
|
|
offset: parseInt(response.offset),
|
|
},
|
|
success: function () {
|
|
console.log('previous offset cleared');
|
|
}
|
|
};
|
|
|
|
$.ajax(opts);
|
|
|
|
}
|
|
|
|
} else {
|
|
dlmDBUpgrader.entries = 0;
|
|
}
|
|
|
|
dlmDBUpgrader.processAjax();
|
|
// Initiate the progress bar with a default value, which is > 0 if there was an offset.
|
|
// We multiply the offset by 1000000 because 10000 is the number for entries / AJAX and 100 si the % number.
|
|
ProgressBar.init(Math.ceil((dlmDBUpgrader.upgraderResumeOffset * 1000000) / dlmDBUpgrader.entries));
|
|
}
|
|
};
|
|
|
|
$.ajax(opts);
|
|
});
|
|
|
|
$(document).on('click', 'button#dlm-upgrade-download_category,a.dlm-download_category-upgrade-link', function (e) {
|
|
e.preventDefault();
|
|
$(this).prop('disabled', true);
|
|
const noticeWrapper = $('body').find('.dlm-upgrade-db-notice');
|
|
noticeWrapper.find('p.dlm-upgrade-notice').remove();
|
|
noticeWrapper.append('<p class="dlm-upgrade-notice">' + dlm_upgraderColumn.upgrade_download_category + '</p>');
|
|
|
|
const opts = {
|
|
url : ajaxurl,
|
|
type : 'post',
|
|
async : true,
|
|
cache : false,
|
|
dataType: 'json',
|
|
data : {
|
|
action: 'dlm_update_download_category',
|
|
nonce : dlm_upgraderColumn.nonce,
|
|
},
|
|
success : function (response) {
|
|
if ('undefined' !== response.data) {
|
|
noticeWrapper.find('p.dlm-upgrade-notice').remove();
|
|
noticeWrapper.append('<p>' + response.data.message + '</p>');
|
|
}
|
|
// Refresh window after 3.5 seconds
|
|
setTimeout(function () {
|
|
window.location.reload();
|
|
}, 3500);
|
|
}
|
|
};
|
|
|
|
$.ajax(opts);
|
|
});
|
|
|
|
},
|
|
|
|
processAjax: function () {
|
|
|
|
// Make sure that we have entries
|
|
if (dlmDBUpgrader.entries - (dlmDBUpgrader.upgraderResumeOffset * 10000) > 0) {
|
|
|
|
// If there are fewer entries than the set limit, 10000, we should at least make 1 AJAX request
|
|
// So set it up to 1.
|
|
dlmDBUpgrader.requestsNumber = (dlmDBUpgrader.entries >= 10000) ? parseInt(Math.ceil(dlmDBUpgrader.entries / 10000)) : 1;
|
|
|
|
// If offset is present then the number of AJAX requests should be the diff between all the requests and the offset
|
|
for (let i = 0; i <= dlmDBUpgrader.requestsNumber - dlmDBUpgrader.upgraderResumeOffset; i++) {
|
|
|
|
var opts = {
|
|
url: dlmDBUpgrader.ajax,
|
|
type: 'post',
|
|
async: true,
|
|
cache: false,
|
|
dataType: 'json',
|
|
data: {
|
|
action: 'dlm_upgrade_db',
|
|
nonce: dlm_upgrader.nonce,
|
|
// The offset should be the count + the offset got by the transient in the case of a upgrade resume.
|
|
offset: dlmDBUpgrader.counts + dlmDBUpgrader.upgraderResumeOffset,
|
|
},
|
|
success: function () {
|
|
|
|
dlmDBUpgrader.ajaxStarted = dlmDBUpgrader.ajaxStarted - 1;
|
|
dlmDBUpgrader.completed = dlmDBUpgrader.completed + 1;
|
|
ProgressBar.progressHandler(((dlmDBUpgrader.completed + dlmDBUpgrader.upgraderResumeOffset) * 100) / dlmDBUpgrader.requestsNumber);
|
|
}
|
|
};
|
|
|
|
dlmDBUpgrader.counts += 1;
|
|
|
|
dlmDBUpgrader.ajaxRequests.push(opts);
|
|
}
|
|
}
|
|
|
|
var alter_table_opts = {
|
|
url: dlmDBUpgrader.ajax,
|
|
type: 'post',
|
|
async: true,
|
|
cache: false,
|
|
dataType: 'json',
|
|
data: {
|
|
action: 'dlm_alter_download_log',
|
|
nonce: dlm_upgrader.nonce,
|
|
},
|
|
success: function () {
|
|
|
|
dlmDBUpgrader.ajaxStarted = dlmDBUpgrader.ajaxStarted - 1;
|
|
|
|
dlmDBUpgrader.completed = dlmDBUpgrader.completed + 1;
|
|
|
|
if (dlmDBUpgrader.entries > 0) {
|
|
ProgressBar.progressHandler(((dlmDBUpgrader.completed + dlmDBUpgrader.upgraderResumeOffset) * 100) / dlmDBUpgrader.requestsNumber);
|
|
} else {
|
|
ProgressBar.progressHandler((dlmDBUpgrader.completed + dlmDBUpgrader.upgraderResumeOffset) * 100);
|
|
}
|
|
jQuery('#dlm_progress-bar').parent().find('.dlm-progress-label').text('Upgrade completed!');
|
|
jQuery('#dlm_progress-bar').addClass('completed');
|
|
}
|
|
};
|
|
|
|
dlmDBUpgrader.ajaxRequests.push(alter_table_opts);
|
|
|
|
dlmDBUpgrader.runAjaxs();
|
|
|
|
},
|
|
|
|
runAjaxs: function () {
|
|
var currentAjax;
|
|
while (dlmDBUpgrader.ajaxStarted < 2 && dlmDBUpgrader.ajaxRequests.length > 0) {
|
|
dlmDBUpgrader.ajaxStarted = dlmDBUpgrader.ajaxStarted + 1;
|
|
currentAjax = dlmDBUpgrader.ajaxRequests.shift();
|
|
$.ajax(currentAjax);
|
|
|
|
}
|
|
|
|
if (dlmDBUpgrader.ajaxRequests.length > 0) {
|
|
|
|
dlmDBUpgrader.ajaxTimeout = setTimeout(function () {
|
|
console.log('Delayed 1s');
|
|
dlmDBUpgrader.runAjaxs();
|
|
}, 1000);
|
|
}
|
|
|
|
},
|
|
};
|
|
|
|
const ProgressBar = {
|
|
el: {},
|
|
label: {},
|
|
|
|
init: (defaultValue = 0) => {
|
|
|
|
ProgressBar.el = jQuery('#dlm_progress-bar');
|
|
ProgressBar.label = jQuery('#dlm_progress-bar').parent().find('.dlm-progress-label');
|
|
ProgressBar.label.text(Math.ceil(defaultValue) + '%');
|
|
|
|
ProgressBar.el.progressbar({
|
|
value: defaultValue,
|
|
change: () => {
|
|
ProgressBar.label.text(ProgressBar.el.progressbar('value') + '%');
|
|
},
|
|
complete: () => {
|
|
}
|
|
});
|
|
},
|
|
progressHandler: (newValue) => {
|
|
|
|
ProgressBar.el.progressbar('value', Math.ceil(newValue));
|
|
|
|
}
|
|
};
|
|
|
|
$(document).ready(function () {
|
|
// Init importer
|
|
dlmDBUpgrader.init();
|
|
});
|
|
|
|
})(jQuery); |