Files
2026-04-28 15:13:50 +02:00

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);