Extract the updater JS to its own file, add helper to find missing dependencies
This commit is contained in:
parent
320f7bfb1a
commit
c559db0de6
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Updates class
|
||||
*
|
||||
* Dependences:
|
||||
* - Waterfall plugin (waterfall.js)
|
||||
*/
|
||||
|
||||
+function ($) { "use strict";
|
||||
|
||||
var UpdateProcess = function () {
|
||||
|
||||
// Init
|
||||
this.init()
|
||||
}
|
||||
|
||||
UpdateProcess.prototype.init = function() {
|
||||
var self = this
|
||||
this.activeStep = null
|
||||
this.updateSteps = null
|
||||
}
|
||||
|
||||
UpdateProcess.prototype.execute = function(steps) {
|
||||
this.updateSteps = steps
|
||||
this.runUpdate()
|
||||
}
|
||||
|
||||
UpdateProcess.prototype.runUpdate = function(fromStep) {
|
||||
$.waterfall.apply(this, this.buildEventChain(this.updateSteps, fromStep))
|
||||
.fail(function(reason){
|
||||
var
|
||||
template = $('#executeFailed').html(),
|
||||
html = Mustache.to_html(template, { reason: reason })
|
||||
|
||||
$('#executeActivity').hide()
|
||||
$('#executeStatus').html(html)
|
||||
})
|
||||
}
|
||||
|
||||
UpdateProcess.prototype.retryUpdate = function() {
|
||||
$('#executeActivity').show()
|
||||
$('#executeStatus').html('')
|
||||
|
||||
this.runUpdate(this.activeStep)
|
||||
}
|
||||
|
||||
UpdateProcess.prototype.buildEventChain = function(steps, fromStep) {
|
||||
var self = this,
|
||||
eventChain = [],
|
||||
skipStep = fromStep ? true : false
|
||||
|
||||
$.each(steps, function(index, step){
|
||||
|
||||
if (step == fromStep)
|
||||
skipStep = false
|
||||
|
||||
if (skipStep)
|
||||
return true // Continue
|
||||
|
||||
eventChain.push(function(){
|
||||
var deferred = $.Deferred()
|
||||
|
||||
self.activeStep = step
|
||||
self.setLoadingBar(true, step.label)
|
||||
|
||||
$.request('onExecuteStep', {
|
||||
data: step,
|
||||
success: function(data){
|
||||
setTimeout(function() { deferred.resolve() }, 600)
|
||||
|
||||
if (step.code == 'completeUpdate' || step.code == 'completeInstall')
|
||||
this.success(data)
|
||||
else
|
||||
self.setLoadingBar(false)
|
||||
},
|
||||
error: function(data){
|
||||
self.setLoadingBar(false)
|
||||
deferred.reject(data.responseText)
|
||||
}
|
||||
})
|
||||
|
||||
return deferred
|
||||
})
|
||||
})
|
||||
|
||||
return eventChain
|
||||
}
|
||||
|
||||
UpdateProcess.prototype.setLoadingBar = function(state, message) {
|
||||
var loadingBar = $('#executeLoadingBar'),
|
||||
messageDiv = $('#executeMessage')
|
||||
|
||||
if (state)
|
||||
loadingBar.removeClass('bar-loaded')
|
||||
else
|
||||
loadingBar.addClass('bar-loaded')
|
||||
|
||||
if (message)
|
||||
messageDiv.text(message)
|
||||
}
|
||||
|
||||
if ($.oc === undefined)
|
||||
$.oc = {}
|
||||
|
||||
$.oc.updateProcess = new UpdateProcess;
|
||||
|
||||
// $(document).ready(function(){
|
||||
// new $oc.updateProcess
|
||||
// })
|
||||
|
||||
}(window.jQuery);
|
||||
|
|
@ -511,7 +511,32 @@ class PluginManager
|
|||
//
|
||||
// Dependencies
|
||||
//
|
||||
|
||||
|
||||
/**
|
||||
* Scans the system plugins to locate any dependencies
|
||||
* that are not currently installed.
|
||||
*/
|
||||
public function findMissingDependencies()
|
||||
{
|
||||
$missing = [];
|
||||
|
||||
foreach ($this->plugins as $id => $plugin) {
|
||||
if (!$required = $this->getDependencies($plugin)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($required as $require) {
|
||||
if ($this->hasPlugin($require)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$missing[] = $require;
|
||||
}
|
||||
}
|
||||
|
||||
return $missing;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cross checks all plugins and their dependancies, if not met plugins
|
||||
* are disabled and vice versa.
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ class Updates extends Controller
|
|||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->addJs('/modules/system/assets/js/updates/updates.js', 'core');
|
||||
$this->addCss('/modules/system/assets/css/updates.css', 'core');
|
||||
|
||||
BackendMenu::setContext('October.System', 'system', 'updates');
|
||||
|
|
|
|||
|
|
@ -49,85 +49,10 @@
|
|||
|
||||
<script>
|
||||
|
||||
var updateSteps = <?= json_encode($updateSteps) ?>,
|
||||
activeStep = null
|
||||
|
||||
$('#executePopup').on('popupComplete', function(){
|
||||
runUpdate()
|
||||
$.oc.updateProcess.execute(<?= json_encode($updateSteps) ?>)
|
||||
})
|
||||
|
||||
function runUpdate(fromStep) {
|
||||
$.waterfall.apply(this, buildEventChain(updateSteps, fromStep))
|
||||
.fail(function(reason){
|
||||
var
|
||||
template = $('#executeFailed').html(),
|
||||
html = Mustache.to_html(template, { reason: reason })
|
||||
|
||||
$('#executeActivity').hide()
|
||||
$('#executeStatus').html(html)
|
||||
})
|
||||
}
|
||||
|
||||
function retryUpdate() {
|
||||
$('#executeActivity').show()
|
||||
$('#executeStatus').html('')
|
||||
|
||||
runUpdate(activeStep)
|
||||
}
|
||||
|
||||
function buildEventChain(steps, fromStep) {
|
||||
var eventChain = [],
|
||||
skipStep = fromStep ? true : false
|
||||
|
||||
$.each(steps, function(index, step){
|
||||
|
||||
if (step == fromStep)
|
||||
skipStep = false
|
||||
|
||||
if (skipStep)
|
||||
return true // Continue
|
||||
|
||||
eventChain.push(function(){
|
||||
var deferred = $.Deferred()
|
||||
|
||||
activeStep = step
|
||||
setLoadingBar(true, step.label)
|
||||
|
||||
$.request('onExecuteStep', {
|
||||
data: step,
|
||||
success: function(data){
|
||||
setTimeout(function() { deferred.resolve() }, 600)
|
||||
|
||||
if (step.code == 'completeUpdate' || step.code == 'completeInstall')
|
||||
this.success(data)
|
||||
else
|
||||
setLoadingBar(false)
|
||||
},
|
||||
error: function(data){
|
||||
setLoadingBar(false)
|
||||
deferred.reject(data.responseText)
|
||||
}
|
||||
})
|
||||
|
||||
return deferred
|
||||
})
|
||||
})
|
||||
|
||||
return eventChain
|
||||
}
|
||||
|
||||
function setLoadingBar(state, message) {
|
||||
var loadingBar = $('#executeLoadingBar'),
|
||||
messageDiv = $('#executeMessage')
|
||||
|
||||
if (state)
|
||||
loadingBar.removeClass('bar-loaded')
|
||||
else
|
||||
loadingBar.addClass('bar-loaded')
|
||||
|
||||
if (message)
|
||||
messageDiv.text(message)
|
||||
}
|
||||
</script>
|
||||
|
||||
<?php else: ?>
|
||||
|
|
|
|||
Loading…
Reference in New Issue