Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-03-01 13:26:18 +0300
committerThomas Müller <thomas.mueller@tmit.eu>2016-03-01 13:26:18 +0300
commit256dfd27b6129f9eba205bf4195246c0cac6045b (patch)
tree7a4ab974f15bd8253919c81d2c6cc54787422098 /settings
parent1652541150f4e8d4c8bb147c81238780cf888e45 (diff)
parent1dbe240b0e5b0a0b32d0e0eca596bf4e510f980e (diff)
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.js86
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() {