From 225e8c012b97511ea8752c941ced16664e592bd9 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 11 Feb 2014 17:55:56 -0500 Subject: [PATCH 1/5] SocketUser.getSettings --- src/socket.io/user.js | 6 ++++++ 1 file changed, 6 insertions(+) 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); From ad9209ec38b0ec30530d14e7f2ca3343a210177f Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 11 Feb 2014 17:56:24 -0500 Subject: [PATCH 2/5] modifying user.getSettings / user.saveSettings to allow passing in custom data --- src/user.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) 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 From 53ef9c1b9fb9a3d5fde3724835f9a0122fe582a7 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 11 Feb 2014 17:57:00 -0500 Subject: [PATCH 3/5] new hook - filter:user.settings allows plugins to generate custom user settings on account page --- src/routes/user.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) 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); }); }); + }); }); From ef9965832a448d81bd7e989ad8d3d49f88192242 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 11 Feb 2014 17:57:22 -0500 Subject: [PATCH 4/5] updating account settings templates + client side to allow for dynamic parsing of user settings --- public/src/forum/accountsettings.js | 40 +++++++++++++++++++++++----- public/templates/accountsettings.tpl | 15 ++++++++--- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/public/src/forum/accountsettings.js b/public/src/forum/accountsettings.js index ea906036af..d3cf4dfc0a 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,28 @@ define(['forum/accountheader'], function(header) { } app.alertSuccess('Settings saved!'); }); + return false; }); + + socket.emit('user.getSettings', function(err, settings) { + console.log(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 @@
- [[user:topics_per_page]]

- [[user:posts_per_page]]

+ [[user:topics_per_page]]

+ [[user:posts_per_page]]

+ + +

{settings.title}

+
+ {settings.content} +
+ From ecb1fa928c3b3c0f39d4d322a3f2d5b5f38ed36c Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 11 Feb 2014 17:58:27 -0500 Subject: [PATCH 5/5] console.log --- public/src/forum/accountsettings.js | 1 - 1 file changed, 1 deletion(-) diff --git a/public/src/forum/accountsettings.js b/public/src/forum/accountsettings.js index d3cf4dfc0a..cf9fece08d 100644 --- a/public/src/forum/accountsettings.js +++ b/public/src/forum/accountsettings.js @@ -32,7 +32,6 @@ define(['forum/accountheader'], function(header) { }); socket.emit('user.getSettings', function(err, settings) { - console.log(settings); for (var setting in settings) { if (settings.hasOwnProperty(setting)) { var input = $('.account input[data-property="' + setting + '"]');