Spaces:
No application file
No application file
| /** | |
| * Executes the first step in the update cycle | |
| * | |
| * @param container | |
| * @param step | |
| * @param state | |
| */ | |
| Mautic.processUpdate = function (container, step, state) { | |
| var baseUrl = mauticBasePath + '/'; | |
| switch (step) { | |
| // Set the update page layout | |
| case 1: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: mauticAjaxUrl + '?action=core:updateSetUpdateLayout', | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.success) { | |
| mQuery('div[id=' + container + ']').html(response.content); | |
| Mautic.processUpdate(container, step + 1, state); | |
| } else if (response.redirect) { | |
| window.location = response.redirect; | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Run pre-update checks | |
| case 2: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: mauticAjaxUrl + '?action=core:updateRunChecks', | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-running-checks-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.success) { | |
| mQuery('td[id=update-step-running-checks-status]').append(mQuery('<i></i>').addClass('pull-right ri-check-line text-success')); | |
| mQuery('#updateTable tbody').append('<tr><td>' + response.nextStep + '</td><td id="update-step-downloading-status"><span class="hidden-xs">' + response.nextStepStatus + '</span><i class="pull-right fa fa-spinner fa-spin"></i></td></tr>'); | |
| Mautic.processUpdate(container, step + 1, state); | |
| } else { | |
| console.log(response.errors); | |
| mQuery('td[id=update-step-running-checks-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend(`<div class="alert alert-danger"> | |
| <p>${response.message}</p> | |
| <ul> | |
| ${response.errors.map(error => `<li>${error}</li>`).join("")} | |
| </ul> | |
| </div>`); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Download the update package | |
| case 3: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: mauticAjaxUrl + '?action=core:updateDownloadPackage', | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-downloading-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.success) { | |
| mQuery('td[id=update-step-downloading-status]').append(mQuery('<i></i>').addClass('pull-right ri-check-line text-success')); | |
| mQuery('#updateTable tbody').append('<tr><td>' + response.nextStep + '</td><td id="update-step-extracting-status"><span class="hidden-xs">' + response.nextStepStatus + '</span><i class="pull-right fa fa-spinner fa-spin"></i></td></tr>'); | |
| Mautic.processUpdate(container, step + 1, state); | |
| } else { | |
| mQuery('td[id=update-step-downloading-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Extract the update package | |
| case 4: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: mauticAjaxUrl + '?action=core:updateExtractPackage', | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-extracting-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.success) { | |
| mQuery('td[id=update-step-extracting-status]').append(mQuery('<i></i>').addClass('pull-right ri-check-line text-success')); | |
| mQuery('#updateTable tbody').append('<tr><td>' + response.nextStep + '</td><td id="update-step-moving-status"><span class="hidden-xs">' + response.nextStepStatus + '</span><i class="pull-right fa fa-spinner fa-spin"></i></td></tr>'); | |
| Mautic.processUpdate(container, step + 1, state); | |
| } else { | |
| mQuery('td[id=update-step-extracting-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Move the updated bundles into production | |
| case 5: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: baseUrl + 'upgrade/upgrade.php?task=moveBundles&updateState=' + state, | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-moving-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.error) { | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| // If an error state, we cannot move on | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } else if (response.complete) { | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right fa fa-spinner fa-spin')); | |
| // If complete then we go into the next step | |
| Mautic.processUpdate(container, step + 1, response.updateState); | |
| } else { | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right fa fa-spinner fa-spin')); | |
| // In this section, the step hasn't completed yet so we repeat it | |
| Mautic.processUpdate(container, step, response.updateState); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Move the rest of core into production | |
| case 6: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: baseUrl + 'upgrade/upgrade.php?task=moveCore&updateState=' + state, | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-moving-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.error) { | |
| // If an error state, we cannot move on | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } else if (response.complete) { | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right fa fa-spinner fa-spin')); | |
| // If complete then we go into the next step | |
| Mautic.processUpdate(container, step + 1, response.updateState); | |
| } else { | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right fa fa-spinner fa-spin')); | |
| // In this section, the step hasn't completed yet so we repeat it | |
| Mautic.processUpdate(container, step, response.updateState); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Move the vendors into production | |
| case 7: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: baseUrl + 'upgrade/upgrade.php?task=moveVendors&updateState=' + state, | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-moving-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.error) { | |
| // If an error state, we cannot move on | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } else if (response.complete) { | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right ri-check-line text-success')); | |
| // If complete then we go into the next step | |
| mQuery('#updateTable tbody').append('<tr><td>' + response.nextStep + '</td><td id="update-step-cache-status"><span class="hidden-xs">' + response.nextStepStatus + '</span><i class="pull-right fa fa-spinner fa-spin"></i></td></tr>'); | |
| Mautic.processUpdate(container, step + 1, response.updateState); | |
| } else { | |
| // In this section, the step hasn't completed yet so we repeat it | |
| mQuery('td[id=update-step-moving-status]').append(mQuery('<i></i>').addClass('pull-right fa fa-spinner fa-spin')); | |
| Mautic.processUpdate(container, step, response.updateState); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| // Clear the application cache | |
| case 8: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: baseUrl + 'upgrade/upgrade.php?task=clearCache&updateState=' + state, | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-cache-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.error) { | |
| mQuery('td[id=update-step-cache-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| // If an error state, we cannot move on | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } else if (response.complete) { | |
| mQuery('td[id=update-step-cache-status]').append(mQuery('<i></i>').addClass('pull-right ri-check-line text-success')); | |
| // If complete then we go into the next step | |
| mQuery('#updateTable tbody').append('<tr><td>' + response.nextStep + '</td><td id="update-step-database-status"><span class="hidden-xs">' + response.nextStepStatus + '</span><i class="pull-right fa fa-spinner fa-spin"></i></td></tr>'); | |
| Mautic.processUpdate(container, step + 1, response.updateState); | |
| } else { | |
| mQuery('td[id=update-step-cache-status]').append(mQuery('<i></i>').addClass('pull-right fa fa-spinner fa-spin')); | |
| // In this section, the step hasn't completed yet so we repeat it | |
| Mautic.processUpdate(container, step, response.updateState); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| // Try again, as exceptions can occur due to excessive caching. | |
| Mautic.processUpdate(container, step, response.updateState); | |
| } | |
| }); | |
| break; | |
| // Migrate the database | |
| case 9: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: mauticAjaxUrl + '?action=core:updateDatabaseMigration&finalize=1', | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| mQuery('td[id=update-step-database-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| if (response.success) { | |
| mQuery('td[id=update-step-database-status]').append(mQuery('<i></i>').addClass('pull-right ri-check-line text-success')); | |
| // If complete then we go into the next step | |
| mQuery('#updateTable tbody').append('<tr><td>' + response.nextStep + '</td><td id="update-step-finalization-status"><span class="hidden-xs">' + response.nextStepStatus + '</span><i class="pull-right fa fa-spinner fa-spin"></i></td></tr>'); | |
| Mautic.processUpdate(container, step + 1, state); | |
| } else { | |
| mQuery('td[id=update-step-database-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| // If an error state, we cannot move on | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| // Redirect to the update/schema page in a last ditch attempt instead of just failing | |
| window.location = mauticBaseUrl + 's/update/schema?update=1'; | |
| } | |
| }); | |
| break; | |
| // Finalize update | |
| case 10: | |
| mQuery.ajax({ | |
| showLoadingBar: true, | |
| url: mauticAjaxUrl + '?action=core:updateFinalization', | |
| dataType: 'json', | |
| success: function (response) { | |
| if (response.redirect) { | |
| window.location = response.redirect; | |
| } else { | |
| if (response.success) { | |
| mQuery('div[id=' + container + ']').html('<div class="alert alert-mautic">' + response.message + '</div>'); | |
| if (response.postmessage) { | |
| mQuery('<div>'+response.postmessage+'</div>').insertAfter('div[id=' + container + '] .alert'); | |
| } | |
| } else { | |
| mQuery('td[id=update-step-finalization-status]').html('<span class="hidden-xs">' + response.stepStatus + '</span>'); | |
| mQuery('td[id=update-step-finalization-status]').append(mQuery('<i></i>').addClass('pull-right ri-alert-line text-danger')); | |
| mQuery('div[id=main-update-panel]').removeClass('panel-default').addClass('panel-danger'); | |
| mQuery('div#main-update-panel div.panel-body').prepend('<div class="alert alert-danger">' + response.message + '</div>'); | |
| } | |
| } | |
| }, | |
| error: function (request, textStatus, errorThrown) { | |
| Mautic.processAjaxError(request, textStatus, errorThrown); | |
| } | |
| }); | |
| break; | |
| } | |
| Mautic.stopPageLoadingBar(); | |
| }; | |