2016-06-30 13:55:44 -04:00
|
|
|
import { ajax } from 'discourse/lib/ajax';
|
2015-03-10 15:01:15 -04:00
|
|
|
import showModal from 'discourse/lib/show-modal';
|
2015-11-20 20:27:06 -05:00
|
|
|
import BackupStatus from 'admin/models/backup-status';
|
|
|
|
import Backup from 'admin/models/backup';
|
2016-07-04 14:15:51 -04:00
|
|
|
import PreloadStore from 'preload-store';
|
2015-03-10 15:01:15 -04:00
|
|
|
|
2015-03-12 12:12:23 -04:00
|
|
|
const LOG_CHANNEL = "/admin/backups/logs";
|
2014-02-12 23:35:46 -05:00
|
|
|
|
2015-03-12 12:12:23 -04:00
|
|
|
export default Discourse.Route.extend({
|
2014-02-12 23:35:46 -05:00
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
activate() {
|
2018-01-31 06:05:06 -05:00
|
|
|
this.messageBus.subscribe(LOG_CHANNEL, (log) => {
|
|
|
|
if (log.message === "[STARTED]") {
|
|
|
|
this.controllerFor("adminBackups").set("model.isOperationRunning", true);
|
|
|
|
this.controllerFor("adminBackupsLogs").get('logs').clear();
|
|
|
|
} else if (log.message === "[FAILED]") {
|
|
|
|
this.controllerFor("adminBackups").set("model.isOperationRunning", false);
|
|
|
|
bootbox.alert(I18n.t("admin.backups.operations.failed", { operation: log.operation }));
|
|
|
|
} else if (log.message === "[SUCCESS]") {
|
|
|
|
Discourse.User.currentProp("hideReadOnlyAlert", false);
|
|
|
|
this.controllerFor("adminBackups").set("model.isOperationRunning", false);
|
|
|
|
if (log.operation === "restore") {
|
|
|
|
// redirect to homepage when the restore is done (session might be lost)
|
|
|
|
window.location.pathname = Discourse.getURL("/");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.controllerFor("adminBackupsLogs").get('logs').pushObject(Em.Object.create(log));
|
2014-02-12 23:35:46 -05:00
|
|
|
}
|
2018-01-31 06:05:06 -05:00
|
|
|
});
|
2014-02-12 23:35:46 -05:00
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
model() {
|
2014-02-12 23:35:46 -05:00
|
|
|
return PreloadStore.getAndRemove("operations_status", function() {
|
2016-06-30 13:55:44 -04:00
|
|
|
return ajax("/admin/backups/status.json");
|
2015-08-07 11:34:58 -04:00
|
|
|
}).then(status => {
|
2015-11-20 20:27:06 -05:00
|
|
|
return BackupStatus.create({
|
2014-02-12 23:35:46 -05:00
|
|
|
isOperationRunning: status.is_operation_running,
|
2014-08-28 17:02:26 -04:00
|
|
|
canRollback: status.can_rollback,
|
|
|
|
allowRestore: status.allow_restore
|
2014-02-12 23:35:46 -05:00
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
deactivate() {
|
2015-03-12 12:12:23 -04:00
|
|
|
this.messageBus.unsubscribe(LOG_CHANNEL);
|
2014-02-12 23:35:46 -05:00
|
|
|
},
|
|
|
|
|
|
|
|
actions: {
|
2015-03-10 15:01:15 -04:00
|
|
|
startBackup() {
|
2016-11-15 17:09:55 -05:00
|
|
|
showModal('admin-start-backup', { admin: true });
|
2014-08-20 12:48:56 -04:00
|
|
|
this.controllerFor('modal').set('modalClass', 'start-backup-modal');
|
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
backupStarted() {
|
2015-08-14 06:40:18 -04:00
|
|
|
this.controllerFor("adminBackups").set("isOperationRunning", true);
|
2014-08-20 12:48:56 -04:00
|
|
|
this.transitionTo("admin.backups.logs");
|
|
|
|
this.send("closeModal");
|
2014-02-12 23:35:46 -05:00
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
destroyBackup(backup) {
|
|
|
|
const self = this;
|
2014-02-12 23:35:46 -05:00
|
|
|
bootbox.confirm(
|
|
|
|
I18n.t("admin.backups.operations.destroy.confirm"),
|
|
|
|
I18n.t("no_value"),
|
|
|
|
I18n.t("yes_value"),
|
|
|
|
function(confirmed) {
|
|
|
|
if (confirmed) {
|
|
|
|
backup.destroy().then(function() {
|
2017-12-21 15:21:28 -05:00
|
|
|
self.controllerFor("adminBackupsIndex").get('model').removeObject(backup);
|
2014-02-12 23:35:46 -05:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
startRestore(backup) {
|
|
|
|
const self = this;
|
2014-02-12 23:35:46 -05:00
|
|
|
bootbox.confirm(
|
|
|
|
I18n.t("admin.backups.operations.restore.confirm"),
|
|
|
|
I18n.t("no_value"),
|
|
|
|
I18n.t("yes_value"),
|
|
|
|
function(confirmed) {
|
|
|
|
if (confirmed) {
|
2014-02-13 10:56:23 -05:00
|
|
|
Discourse.User.currentProp("hideReadOnlyAlert", true);
|
2014-02-12 23:35:46 -05:00
|
|
|
backup.restore().then(function() {
|
2017-03-14 02:00:18 -04:00
|
|
|
self.controllerFor("adminBackupsLogs").get("logs").clear();
|
2015-08-14 06:40:18 -04:00
|
|
|
self.controllerFor("adminBackups").set("model.isOperationRunning", true);
|
2014-02-12 23:35:46 -05:00
|
|
|
self.transitionTo("admin.backups.logs");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
cancelOperation() {
|
|
|
|
const self = this;
|
2014-02-12 23:35:46 -05:00
|
|
|
bootbox.confirm(
|
|
|
|
I18n.t("admin.backups.operations.cancel.confirm"),
|
|
|
|
I18n.t("no_value"),
|
|
|
|
I18n.t("yes_value"),
|
|
|
|
function(confirmed) {
|
|
|
|
if (confirmed) {
|
2015-11-20 20:27:06 -05:00
|
|
|
Backup.cancel().then(function() {
|
2015-08-06 12:14:59 -04:00
|
|
|
self.controllerFor("adminBackups").set("model.isOperationRunning", false);
|
2014-02-12 23:35:46 -05:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
rollback() {
|
2014-02-12 23:35:46 -05:00
|
|
|
bootbox.confirm(
|
|
|
|
I18n.t("admin.backups.operations.rollback.confirm"),
|
|
|
|
I18n.t("no_value"),
|
|
|
|
I18n.t("yes_value"),
|
|
|
|
function(confirmed) {
|
2015-11-20 20:27:06 -05:00
|
|
|
if (confirmed) { Backup.rollback(); }
|
2014-02-12 23:35:46 -05:00
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
2014-02-21 19:41:01 -05:00
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
uploadSuccess(filename) {
|
2018-01-31 06:05:06 -05:00
|
|
|
bootbox.alert(I18n.t("admin.backups.upload.success", { filename: filename }));
|
2014-02-21 19:41:01 -05:00
|
|
|
},
|
|
|
|
|
2015-03-10 15:01:15 -04:00
|
|
|
uploadError(filename, message) {
|
2014-02-21 19:41:01 -05:00
|
|
|
bootbox.alert(I18n.t("admin.backups.upload.error", { filename: filename, message: message }));
|
2014-03-18 21:21:10 -04:00
|
|
|
}
|
2014-02-12 23:35:46 -05:00
|
|
|
}
|
|
|
|
});
|