diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-01 11:26:18 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-01 11:26:18 +0100 |
commit | 256dfd27b6129f9eba205bf4195246c0cac6045b (patch) | |
tree | 7a4ab974f15bd8253919c81d2c6cc54787422098 /settings | |
parent | 1652541150f4e8d4c8bb147c81238780cf888e45 (diff) | |
parent | 1dbe240b0e5b0a0b32d0e0eca596bf4e510f980e (diff) | |
download | nextcloud-server-256dfd27b6129f9eba205bf4195246c0cac6045b.tar.gz nextcloud-server-256dfd27b6129f9eba205bf4195246c0cac6045b.zip |
Merge pull request #17451 from owncloud/apps-disablebrokenappafterenable
Disable app that bricks the server after enabling
Diffstat (limited to 'settings')
-rw-r--r-- | settings/js/apps.js | 86 |
1 files changed, 60 insertions, 26 deletions
diff --git a/settings/js/apps.js b/settings/js/apps.js index a99df65e3c1..e6631762fd4 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -4,7 +4,7 @@ Handlebars.registerHelper('score', function() { if(this.score) { var score = Math.round( this.score / 10 ); var imageName = 'rating/s' + score + '.png'; - + return new Handlebars.SafeString('<img src="' + OC.imagePath('core', imageName) + '">'); } return new Handlebars.SafeString(''); @@ -212,7 +212,19 @@ OC.Settings.Apps = OC.Settings.Apps || { return app.types && app.types.indexOf(type) !== -1; }, + /** + * Checks the server health. + * + * If the promise fails, the server is broken. + * + * @return {Promise} promise + */ + _checkServerHealth: function() { + return $.get(OC.generateUrl('apps/files')); + }, + enableApp:function(appId, active, element, groups) { + var self = this; OC.Settings.Apps.hideErrorMessage(appId); groups = groups || []; var appItem = $('div#app-'+appId+''); @@ -242,6 +254,8 @@ OC.Settings.Apps = OC.Settings.Apps || { } },'json'); } else { + // TODO: display message to admin to not refresh the page! + // TODO: lock UI to prevent further operations $.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appId, groups: groups},function(result) { if(!result || result.status !== 'success') { if (result.data && result.data.message) { @@ -254,35 +268,55 @@ OC.Settings.Apps = OC.Settings.Apps || { element.val(t('settings','Enable')); appItem.addClass('appwarning'); } else { - if (result.data.update_required) { - OC.Settings.Apps.showReloadMessage(); + self._checkServerHealth().done(function() { + if (result.data.update_required) { + OC.Settings.Apps.showReloadMessage(); - setTimeout(function() { - location.reload(); - }, 5000); - } + setTimeout(function() { + location.reload(); + }, 5000); + } - OC.Settings.Apps.rebuildNavigation(); - appItem.data('active',true); - element.data('active',true); - appItem.addClass('active'); - element.val(t('settings','Disable')); - var app = OC.Settings.Apps.State.apps[appId]; - app.active = true; - - if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') || - OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) { - element.parent().find(".groups-enable").attr('checked', null); - element.parent().find(".groups-enable").hide(); - element.parent().find('#group_select').hide().val(null); - } else { - element.parent().find("#groups-enable").show(); - if (groups) { - appItem.data('groups', JSON.stringify(groups)); + OC.Settings.Apps.rebuildNavigation(); + appItem.data('active',true); + element.data('active',true); + appItem.addClass('active'); + element.val(t('settings','Disable')); + var app = OC.Settings.Apps.State.apps[appId]; + app.active = true; + + if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') || + OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) { + element.parent().find(".groups-enable").attr('checked', null); + element.parent().find(".groups-enable").hide(); + element.parent().find('#group_select').hide().val(null); } else { - appItem.data('groups', ''); + element.parent().find("#groups-enable").show(); + if (groups) { + appItem.data('groups', JSON.stringify(groups)); + } else { + appItem.data('groups', ''); + } } - } + }).fail(function() { + // server borked, emergency disable app + $.post(OC.webroot + '/index.php/disableapp', {appid: appId}, function() { + OC.Settings.Apps.showErrorMessage( + appId, + t('settings', 'Error: this app cannot be enabled because it makes the server unstable') + ); + appItem.data('errormsg', t('settings', 'Error while enabling app')); + element.val(t('settings','Enable')); + appItem.addClass('appwarning'); + }).fail(function() { + OC.Settings.Apps.showErrorMessage( + appId, + t('settings', 'Error: could not disable broken app') + ); + appItem.data('errormsg', t('settings', 'Error while disabling broken app')); + element.val(t('settings','Enable')); + }); + }); } },'json') .fail(function() { |