diff --git a/public/src/forum/accountsettings.js b/public/src/forum/accountsettings.js
index ea906036af..cf9fece08d 100644
--- a/public/src/forum/accountsettings.js
+++ b/public/src/forum/accountsettings.js
@@ -5,13 +5,21 @@ define(['forum/accountheader'], function(header) {
header.init();
$('#submitBtn').on('click', function() {
+ var settings = {};
- var settings = {
- showemail: $('#showemailCheckBox').is(':checked') ? 1 : 0,
- usePagination: $('#usePaginationCheckBox').is(':checked') ? 1 : 0,
- topicsPerPage: $('#topicsPerPage').val(),
- postsPerPage: $('#postsPerPage').val()
- };
+ $('.account input, .account textarea').each(function(id, input) {
+ input = $(input);
+
+ switch (input.attr('type')) {
+ case 'text' :
+ case 'textarea' :
+ settings[input.attr('data-property')] = input.val();
+ break;
+ case 'checkbox' :
+ settings[input.attr('data-property')] = input.is(':checked') ? 1 : 0;
+ break;
+ }
+ });
socket.emit('user.saveSettings', settings, function(err) {
if (err) {
@@ -19,8 +27,27 @@ define(['forum/accountheader'], function(header) {
}
app.alertSuccess('Settings saved!');
});
+
return false;
});
+
+ socket.emit('user.getSettings', function(err, settings) {
+ for (var setting in settings) {
+ if (settings.hasOwnProperty(setting)) {
+ var input = $('.account input[data-property="' + setting + '"]');
+
+ switch (input.attr('type')) {
+ case 'text' :
+ case 'textarea' :
+ input.val(settings[setting]);
+ break;
+ case 'checkbox' :
+ input.prop('checked', !!settings[setting]);
+ break;
+ }
+ }
+ }
+ });
};
return AccountSettings;
diff --git a/public/templates/accountsettings.tpl b/public/templates/accountsettings.tpl
index 865d8ef9d6..54114e9415 100644
--- a/public/templates/accountsettings.tpl
+++ b/public/templates/accountsettings.tpl
@@ -5,7 +5,7 @@
@@ -13,13 +13,20 @@
+
+
+ {settings.title}
+
+ {settings.content}
+
+
diff --git a/src/routes/user.js b/src/routes/user.js
index 88bb361844..0c8e66609c 100644
--- a/src/routes/user.js
+++ b/src/routes/user.js
@@ -266,10 +266,10 @@ var fs = require('fs'),
});
});
- app.get('/api/user/:userslug/settings', function (req, res, next) {
+ app.get('/api/user/:userslug/settings', function(req, res, next) {
var callerUID = req.user ? req.user.uid : '0';
- user.getUidByUserslug(req.params.userslug, function (err, uid) {
+ user.getUidByUserslug(req.params.userslug, function(err, uid) {
if (err) {
return next(err);
}
@@ -286,26 +286,27 @@ var fs = require('fs'),
});
}
- user.getUserFields(uid, ['username', 'userslug'], function (err, userData) {
+ plugins.fireHook('filter:user.settings', [], function(err, settings) {
if (err) {
return next(err);
}
- if(!userData) {
- return res.json(404, {
- error: 'User not found!'
- });
- }
-
- user.getSettings(uid, function(err, settings) {
- if(err) {
+ user.getUserFields(uid, ['username', 'userslug'], function(err, userData) {
+ if (err) {
return next(err);
}
+ if(!userData) {
+ return res.json(404, {
+ error: 'User not found!'
+ });
+ }
+
userData.settings = settings;
res.json(userData);
});
});
+
});
});
diff --git a/src/socket.io/user.js b/src/socket.io/user.js
index c9a9bed657..92dfdfe0c5 100644
--- a/src/socket.io/user.js
+++ b/src/socket.io/user.js
@@ -133,6 +133,12 @@ SocketUser.unfollow = function(socket, data, callback) {
}
};
+SocketUser.getSettings = function(socket, data, callback) {
+ if (socket.uid) {
+ user.getSettings(socket.uid, callback);
+ }
+};
+
SocketUser.saveSettings = function(socket, data, callback) {
if (socket.uid && data) {
user.saveSettings(socket.uid, data, callback);
diff --git a/src/user.js b/src/user.js
index 26d0a19f98..41527b6ed9 100644
--- a/src/user.js
+++ b/src/user.js
@@ -204,29 +204,23 @@ var bcrypt = require('bcryptjs'),
}
if(!settings) {
- return sendDefaultSettings();
+ settings = {}
}
- settings.showemail = parseInt(settings.showemail, 10) !== 0;
- settings.usePagination = parseInt(settings.usePagination, 10) !== 0;
- settings.topicsPerPage = parseInt(settings.topicsPerPage, 10);
- settings.postsPerPage = parseInt(settings.postsPerPage, 10);
+ settings.showemail = settings.showemail ? parseInt(settings.showemail, 10) !== 0 : parseInt(meta.config.usePagination, 10) !== 0;
+ settings.usePagination = settings.usePagination ? parseInt(settings.usePagination, 10) !== 0 : parseInt(meta.config.usePagination, 10) !== 0;
+ settings.topicsPerPage = settings.topicsPerPage ? parseInt(settings.topicsPerPage, 10) : parseInt(meta.config.topicsPerPage, 10) || 20;
+ settings.postsPerPage = settings.postsPerPage ? parseInt(settings.postsPerPage, 10) : parseInt(meta.config.postsPerPage, 10) || 10;
callback(null, settings);
});
}
User.saveSettings = function(uid, data, callback) {
- db.setObject('user:' + uid + ':settings', {
- showemail: data.showemail || 0,
- usePagination: data.usePagination || 0,
- topicsPerPage: data.topicsPerPage || 20,
- postsPerPage: data.postsPerPage || 10
- }, callback);
+ db.setObject('user:' + uid + ':settings', data, callback);
}
User.updateProfile = function(uid, data, callback) {
-
var fields = ['username', 'email', 'fullname', 'website', 'location', 'birthday', 'signature'];
var returnData = {
success: false