diff --git a/ghost/admin/components/file-upload.js b/ghost/admin/components/file-upload.js
new file mode 100644
index 0000000000..98d3e8c5a6
--- /dev/null
+++ b/ghost/admin/components/file-upload.js
@@ -0,0 +1,23 @@
+var FileUpload = Ember.Component.extend({
+ _file: null,
+ uploadButtonText: 'Text',
+ uploadButtonDisabled: true,
+ change: function (event) {
+ this.set('uploadButtonDisabled', false);
+ this.sendAction('onAdd');
+ this._file = event.target.files[0];
+ },
+ actions: {
+ upload: function () {
+ var self = this;
+ if (!this.uploadButtonDisabled && self._file) {
+ self.sendAction('onUpload', self._file);
+ }
+
+ // Prevent double post by disabling the button.
+ this.set('uploadButtonDisabled', true);
+ }
+ }
+});
+
+export default FileUpload;
diff --git a/ghost/admin/components/gh-form.js b/ghost/admin/components/gh-form.js
new file mode 100644
index 0000000000..5b6dde63ee
--- /dev/null
+++ b/ghost/admin/components/gh-form.js
@@ -0,0 +1,13 @@
+export default Ember.View.extend({
+ tagName: 'form',
+ attributeBindings: ['enctype'],
+ reset: function () {
+ this.$().get(0).reset();
+ },
+ didInsertElement: function () {
+ this.get('controller').on('reset', this, this.reset);
+ },
+ willClearRender: function () {
+ this.get('controller').off('reset', this, this.reset);
+ }
+});
diff --git a/ghost/admin/controllers/settings/debug.js b/ghost/admin/controllers/settings/debug.js
new file mode 100644
index 0000000000..875e44d1e4
--- /dev/null
+++ b/ghost/admin/controllers/settings/debug.js
@@ -0,0 +1,37 @@
+/*global alert, console */
+
+var Debug = Ember.Controller.extend(Ember.Evented, {
+ uploadButtonText: 'Import',
+ actions: {
+ importData: function (file) {
+ var self = this;
+ this.set('uploadButtonText', 'Importing');
+ this.get('model').importFrom(file)
+ .then(function (response) {
+ console.log(response);
+ alert('@TODO: success');
+ })
+ .catch(function (response) {
+ console.log(response);
+ alert('@TODO: error');
+ })
+ .finally(function () {
+ self.set('uploadButtonText', 'Import');
+ self.trigger('reset');
+ });
+ },
+ sendTestEmail: function () {
+ this.get('model').sendTestEmail()
+ .then(function (response) {
+ console.log(response);
+ alert('@TODO: success');
+ })
+ .catch(function (response) {
+ console.log(response);
+ alert('@TODO: error');
+ });
+ }
+ }
+});
+
+export default Debug;
diff --git a/ghost/admin/models/base.js b/ghost/admin/models/base.js
index 8973d80383..9a70b16b27 100644
--- a/ghost/admin/models/base.js
+++ b/ghost/admin/models/base.js
@@ -5,6 +5,7 @@ function ghostPaths() {
return {
subdir: subdir,
+ adminRoot: subdir + '/ghost',
apiRoot: subdir + '/ghost/api/v0.1'
};
}
@@ -29,5 +30,6 @@ var BaseModel = Ember.Object.extend({
BaseModel.apiRoot = ghostPaths().apiRoot;
BaseModel.subdir = ghostPaths().subdir;
+BaseModel.adminRoot = ghostPaths().adminRoot;
export default BaseModel;
\ No newline at end of file
diff --git a/ghost/admin/models/post.js b/ghost/admin/models/post.js
index 4c31a37dc6..6cbb444494 100644
--- a/ghost/admin/models/post.js
+++ b/ghost/admin/models/post.js
@@ -53,4 +53,4 @@ var PostModel = BaseModel.extend({
}
});
-export default PostModel;
+export default PostModel;
\ No newline at end of file
diff --git a/ghost/admin/models/settings.js b/ghost/admin/models/settings.js
index ee5e0f79d7..8303eae2a7 100644
--- a/ghost/admin/models/settings.js
+++ b/ghost/admin/models/settings.js
@@ -2,7 +2,7 @@ var validator = window.validator;
import BaseModel from 'ghost/models/base';
-export default BaseModel.extend({
+var SettingsModel = BaseModel.extend({
url: BaseModel.apiRoot + '/settings/?type=blog,theme,app',
title: null,
@@ -46,5 +46,31 @@ export default BaseModel.extend({
}
return validationErrors;
+ },
+ exportPath: BaseModel.adminRoot + '/export/',
+ importFrom: function (file) {
+ var formData = new FormData();
+ formData.append('importfile', file);
+ return ic.ajax.request(BaseModel.apiRoot + '/db/', {
+ headers: {
+ 'X-CSRF-Token': $('meta[name="csrf-param"]').attr('content')
+ },
+ type: 'POST',
+ data: formData,
+ dataType: 'json',
+ cache: false,
+ contentType: false,
+ processData: false
+ });
+ },
+ sendTestEmail: function () {
+ return ic.ajax.request(BaseModel.apiRoot + '/mail/test/', {
+ type: 'POST',
+ headers: {
+ 'X-CSRF-Token': $('meta[name="csrf-param"]').attr('content')
+ }
+ });
}
-});
\ No newline at end of file
+});
+
+export default SettingsModel;
diff --git a/ghost/admin/router.js b/ghost/admin/router.js
index 11acbbd860..11e8f4f94d 100755
--- a/ghost/admin/router.js
+++ b/ghost/admin/router.js
@@ -24,6 +24,7 @@ Router.map(function () {
this.route('debug');
this.route('apps');
});
+ this.route('debug');
});
export default Router;
diff --git a/ghost/admin/routes/debug.js b/ghost/admin/routes/debug.js
new file mode 100644
index 0000000000..3fcacfec8b
--- /dev/null
+++ b/ghost/admin/routes/debug.js
@@ -0,0 +1,7 @@
+var DebugRoute = Ember.Route.extend({
+ beforeModel: function () {
+ this.transitionTo('settings.debug');
+ }
+});
+
+export default DebugRoute;
diff --git a/ghost/admin/routes/settings/debug.js b/ghost/admin/routes/settings/debug.js
new file mode 100644
index 0000000000..e6f18b64b4
--- /dev/null
+++ b/ghost/admin/routes/settings/debug.js
@@ -0,0 +1,11 @@
+import SettingsModel from 'ghost/models/settings';
+
+var settingsModel = SettingsModel.create();
+
+var DebugRoute = Ember.Route.extend({
+ model: function () {
+ return settingsModel;
+ }
+});
+
+export default DebugRoute;
diff --git a/ghost/admin/templates/components/file-upload.hbs b/ghost/admin/templates/components/file-upload.hbs
new file mode 100644
index 0000000000..8388128d2c
--- /dev/null
+++ b/ghost/admin/templates/components/file-upload.hbs
@@ -0,0 +1,2 @@
+
+
diff --git a/ghost/admin/templates/settings/debug.hbs b/ghost/admin/templates/settings/debug.hbs
index bde0ba063e..2440b13ade 100644
--- a/ghost/admin/templates/settings/debug.hbs
+++ b/ghost/admin/templates/settings/debug.hbs
@@ -3,25 +3,23 @@