Files
server/opt/psa/admin/htdocs/modules/panel-migrator/scripts/progress-status.js
2026-01-07 20:52:11 +01:00

181 lines
7.3 KiB
JavaScript

// Copyright 1999-2024. WebPros International GmbH. All rights reserved.
Jsw.onReady(function() {
const appState = PanelMigrator.initAppState();
// Update whole progress status control
function updateProgressStatus(statusInfo) {
updateProgressStatusElementsVisibility();
updateProgressStatusCountElements(statusInfo);
updateProgressStatusState(statusInfo);
}
// Update visibility of "add subscriptions" link and failed/success/warning count elements.
// Visibility of these elements is specified by 2 global variables. It depends which are set according to the
// current page.
function updateProgressStatusElementsVisibility()
{
$$('.progress-status-count-box').each(function(element) {
if (SHOW_STATUS_ICONS) {
element.show();
} else {
element.hide();
}
});
$$('.progress-status-add-subscriptions-link').each(function(element) {
if (SHOW_ADD_SUBSCRIPTIONS_LINK) {
element.show();
} else {
element.hide();
}
});
}
// Update number of failed/success/warning subscriptions, and visibility of corresponding elements:
// they are not displayed if there are no subscriptions with corresponding status
function updateProgressStatusCountElements(statusInfo)
{
$$('.progress-status-count-item-success').each(function(element) {
if (statusInfo.queueFinishedSuccessSubscriptions > 0) {
element.show();
} else {
element.hide();
}
});
$$('.progress-status-count-item-failed').each(function(element) {
if (statusInfo.queueFinishedFailedSubscriptions > 0) {
element.show();
} else {
element.hide();
}
});
$$('.progress-status-count-item-warning').each(function(element) {
if (statusInfo.queueFinishedWarningSubscriptions > 0) {
element.show();
} else {
element.hide();
}
});
$$('.progress-status-count-value-success').each(function(element) {
element.update(statusInfo.queueFinishedSuccessSubscriptions);
});
$$('.progress-status-count-value-failed').each(function(element) {
element.update(statusInfo.queueFinishedFailedSubscriptions);
});
$$('.progress-status-count-value-warning').each(function(element) {
element.update(statusInfo.queueFinishedWarningSubscriptions);
});
}
// Update state and messages of progress status control: display one of four states:
// 1) migration was not started yet
// 2) migration is in progress right now: display progress bar
// 3) migration finished for several (but not all) subscriptions
// 4) migration finished for all subscriptions of the server
function updateProgressStatusState(statusInfo)
{
var totalLeftSubscriptions = statusInfo.totalSourceSubscriptions - statusInfo.totalMigratedSubscriptions;
if (statusInfo.overallStatus == 'finished-errors') {
$('progress-status-not-started').hide();
$('progress-status-in-progress').hide();
$('progress-status-queue-finished').hide();
$('progress-status-all-migrated').hide();
$('progress-status-overall-failure').show();
$('progress-status-text-overall-failure').update(statusInfo.overallErrorMessage);
} else if (
statusInfo.queueSubscriptions == 0 && statusInfo.totalMigratedSubscriptions == 0
) {
$('progress-status-not-started').show();
$('progress-status-in-progress').hide();
$('progress-status-queue-finished').hide();
$('progress-status-all-migrated').hide();
$('progress-status-overall-failure').hide();
} else if (
statusInfo.queueSubscriptions > 0 &&
statusInfo.queueFinishedSubscriptions < statusInfo.queueSubscriptions
) {
$('progress-status-text-subscriptions-in-queue').update(
formatMessage(
MESSAGE_SUBSCRIPTIONS_IN_QUEUE,
statusInfo.queueFinishedSubscriptions, statusInfo.queueSubscriptions
)
);
var progressPercentage = Math.round(
100 * statusInfo.queueFinishedSubscriptions / statusInfo.queueSubscriptions
);
$('progress-status-progress-bar').setStyle(
{'width': progressPercentage + "%"}
);
$('progress-status-not-started').hide();
$('progress-status-in-progress').show();
$('progress-status-queue-finished').hide();
$('progress-status-all-migrated').hide();
$('progress-status-overall-failure').hide();
} else if (statusInfo.totalMigratedSubscriptions < statusInfo.totalSourceSubscriptions) {
$('progress-status-text-subscriptions-migrated').update(
formatMessage(
MESSAGE_SUBSCRIPTIONS_MIGRATED, statusInfo.totalMigratedSubscriptions
)
);
$('progress-status-text-subscriptions-not-migrated').update(
formatMessage(
MESSAGE_SUBSCRIPTIONS_NOT_MIGRATED, totalLeftSubscriptions
)
);
$('progress-status-not-started').hide();
$('progress-status-in-progress').hide();
$('progress-status-queue-finished').show();
$('progress-status-all-migrated').hide();
$('progress-status-overall-failure').hide();
} else if (statusInfo.totalMigratedSubscriptions == statusInfo.totalSourceSubscriptions) {
$('progress-status-text-all-subscriptions-migrated').update(
formatMessage(
MESSAGE_ALL_SUBSCRIPTIONS_MIGRATED, statusInfo.totalMigratedSubscriptions
)
);
$('progress-status-not-started').hide();
$('progress-status-in-progress').hide();
$('progress-status-queue-finished').hide();
$('progress-status-all-migrated').show();
$('progress-status-overall-failure').hide();
} else {
$('progress-status-not-started').hide();
$('progress-status-in-progress').hide();
$('progress-status-queue-finished').hide();
$('progress-status-all-migrated').hide();
$('progress-status-overall-failure').hide();
}
}
function updateProgressStatusAjax()
{
if (!appState.mounted) return;
new Ajax.Request(URL_GET_SESSION_STATUS, {
onSuccess: function(response) {
if (!appState.mounted) return;
var json = response.responseText.evalJSON();
updateProgressStatus(json);
},
onComplete: function() {
setTimeout(updateProgressStatusAjax, PROGRESS_STATUS_UPDATE_INTERVAL);
}
});
}
// Perform initial update from data passed in HTML
updateProgressStatus(SESSION_STATUS);
// Schedule run periodic updates with AJAX
updateProgressStatusAjax();
$('progress-status-cancel').observe('click', function() {
showCancelAllPopup();
});
});