From d102ff0704adf13688321a5cff2bc038201d3940 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 26 Jan 2015 21:35:14 -0500 Subject: [PATCH 1/9] fixed #2656 --- public/src/app.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index e24e2500dd..35037c8033 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -253,11 +253,8 @@ app.uid = null; app.replaceSelfLinks(); - setTimeout(function () { - if (window.scrollY === 0) { - window.scrollTo(0, 1); // rehide address bar on mobile after page load completes. - } - }, 100); + // Scroll back to top of page + window.scrollTo(0, 0); }; app.showLoginMessage = function () { From 72e14e6db69931e1d4db6914d033496b342a0576 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 27 Jan 2015 04:38:51 -0500 Subject: [PATCH 2/9] closes #2653 --- public/vendor/colorpicker/colorpicker.css | 1 - 1 file changed, 1 deletion(-) diff --git a/public/vendor/colorpicker/colorpicker.css b/public/vendor/colorpicker/colorpicker.css index 5ee96ba682..6f8ed782b9 100644 --- a/public/vendor/colorpicker/colorpicker.css +++ b/public/vendor/colorpicker/colorpicker.css @@ -139,7 +139,6 @@ left: 282px; } .colorpicker_submit { - display: none; position: absolute; width: 22px; height: 22px; From c33b369858a54841c6f1388c5e4265935e6c19d0 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 27 Jan 2015 10:36:30 -0500 Subject: [PATCH 3/9] closes #2658 --- src/topics/unread.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/topics/unread.js b/src/topics/unread.js index 4683395f6f..a12f1c4d77 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -154,11 +154,9 @@ module.exports = function(Topics) { return callback(); } tids = tids.filter(Boolean); - - var now = Date.now(); - var scores = tids.map(function(tid) { - return now; - }); + if (!tids.length) { + return callback(); + } async.parallel({ topicScores: function(next) { @@ -180,6 +178,11 @@ module.exports = function(Topics) { return callback(); } + var now = Date.now(); + var scores = tids.map(function(tid) { + return now; + }); + async.parallel({ markRead: function(next) { db.sortedSetAdd('uid:' + uid + ':tids_read', scores, tids, next); From 06238f689415e216cf131e9e295fae8c4e9566a2 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 27 Jan 2015 11:12:14 -0500 Subject: [PATCH 4/9] partial fix to #2655 --- src/upgrade.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/upgrade.js b/src/upgrade.js index 506639c463..d433c9c06f 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -688,11 +688,22 @@ Upgrade.upgrade = function(callback) { updatesMade = true; winston.info('[2015/01/19] Generating group slugs'); - Groups.list({}, function(err, groups) { + async.waterfall([ + async.apply(db.getSetMembers, 'groups'), + function(groups, next) { + async.filter(groups, function(groupName, next) { + db.getObjectField('group:' + groupName, 'hidden', function(err, hidden) { + next((err || parseInt(hidden, 10)) ? false : true); + }); + }, function(groups) { + next(null, groups); + }); + } + ], function(err, groups) { var tasks = []; - groups.forEach(function(groupObj) { - tasks.push(async.apply(db.setObjectField, 'group:' + groupObj.name, 'slug', Utils.slugify(groupObj.name))); - tasks.push(async.apply(db.setObjectField, 'groupslug:groupname', Utils.slugify(groupObj.name), groupObj.name)); + groups.forEach(function(groupName) { + tasks.push(async.apply(db.setObjectField, 'group:' + groupName, 'slug', Utils.slugify(groupName))); + tasks.push(async.apply(db.setObjectField, 'groupslug:groupname', Utils.slugify(groupName), groupName)); }); // Administrator group From 08e39d150e161cb04edd8ef9ff4fb69299b24e8c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 27 Jan 2015 11:19:36 -0500 Subject: [PATCH 5/9] fixed #2655 --- src/controllers/groups.js | 2 +- src/groups.js | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index d6307b8daf..f72d7ed1d4 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -32,7 +32,7 @@ groupsController.details = function(req, res, next) { }, next); }, posts: function(next) { - groups.getLatestMemberPosts(req.params.name, 10, uid, next); + groups.getLatestMemberPosts(req.params.slug, 10, uid, next); } }, function(err, results) { if (err) { diff --git a/src/groups.js b/src/groups.js index 0e3f1ed066..e228ffbcf0 100644 --- a/src/groups.js +++ b/src/groups.js @@ -758,11 +758,10 @@ var async = require('async'), }); }; - Groups.getLatestMemberPosts = function(groupName, max, uid, callback) { + Groups.getLatestMemberPosts = function(groupSlug, max, uid, callback) { async.waterfall([ - function(next) { - Groups.getMembers(groupName, next); - }, + async.apply(Groups.getGroupNameByGroupSlug, groupSlug), + Groups.getMembers, function(uids, next) { if (!Array.isArray(uids) || !uids.length) { return callback(null, []); From 891731ca5208d1694060d50e3b935084466268f6 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 27 Jan 2015 11:42:03 -0500 Subject: [PATCH 6/9] enabled saving of sendPostNotification setting --- src/user/settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/user/settings.js b/src/user/settings.js index 9f3e1166eb..3daa3db869 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -101,6 +101,7 @@ module.exports = function(User) { followTopicsOnCreate: data.followTopicsOnCreate, followTopicsOnReply: data.followTopicsOnReply, sendChatNotifications: data.sendChatNotifications, + sendPostNotifications: data.sendPostNotifications, restrictChat: data.restrictChat, topicSearchEnabled: data.topicSearchEnabled }, next); From d096a639d6d51c02b71c243dc8b1b29f94a73007 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 27 Jan 2015 13:14:07 -0500 Subject: [PATCH 7/9] fixed #2657 -- there's a slight chance this might break other ACP pages, but my limited testing tells me it is ok so far --- public/src/modules/settings.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/public/src/modules/settings.js b/public/src/modules/settings.js index b31975c1ab..66b76fc4fd 100644 --- a/public/src/modules/settings.js +++ b/public/src/modules/settings.js @@ -457,6 +457,17 @@ define('settings', function () { console.log('[settings] Unable to load settings for hash: ', hash); return callback(err); } + + // Parse all values. If they are json, return json + for(var key in values) { + if (values.hasOwnProperty(key)) { + try { + values[key] = JSON.parse(values[key]); + } catch (e) { + // Leave the value as is + } + } + } $(formEl).deserialize(values); @@ -474,6 +485,13 @@ define('settings', function () { values[inputEl.attr('id')] = 'off'; } }); + + // Normalizing value of multiple selects + formEl.find('select[multiple]').each(function(idx, selectEl) { + selectEl = $(selectEl); + values[selectEl.attr('id')] = JSON.stringify(selectEl.val()); + }); + socket.emit('admin.settings.set', { hash: hash, values: values From a3cadff1d3652893bf4232a01e739de6a10a2d4c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 27 Jan 2015 14:47:39 -0500 Subject: [PATCH 8/9] updated settings module (v2) to fix multiple selects and checkboxes using name instead of id, which isn't always guaranteed to be set. --- public/src/modules/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/modules/settings.js b/public/src/modules/settings.js index 66b76fc4fd..8c7d74a448 100644 --- a/public/src/modules/settings.js +++ b/public/src/modules/settings.js @@ -482,14 +482,14 @@ define('settings', function () { formEl.find('input[type="checkbox"]').each(function (idx, inputEl) { inputEl = $(inputEl); if (!inputEl.is(':checked')) { - values[inputEl.attr('id')] = 'off'; + values[inputEl.attr('name')] = 'off'; } }); // Normalizing value of multiple selects formEl.find('select[multiple]').each(function(idx, selectEl) { selectEl = $(selectEl); - values[selectEl.attr('id')] = JSON.stringify(selectEl.val()); + values[selectEl.attr('name')] = JSON.stringify(selectEl.val()); }); socket.emit('admin.settings.set', { From 27518716a0d59b941b9071edac9f431cb1a21890 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 27 Jan 2015 16:03:57 -0500 Subject: [PATCH 9/9] make getUsers public for plugins --- src/controllers/users.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/controllers/users.js b/src/controllers/users.js index 107c64a166..f7765ca469 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -48,32 +48,32 @@ usersController.getOnlineUsers = function(req, res, next) { }; usersController.getUsersSortedByPosts = function(req, res, next) { - getUsers('users:postcount', res, next); + usersController.getUsers('users:postcount', 50, res, next); }; usersController.getUsersSortedByReputation = function(req, res, next) { - getUsers('users:reputation', res, next); + usersController.getUsers('users:reputation', 50, res, next); }; usersController.getUsersSortedByJoinDate = function(req, res, next) { - getUsers('users:joindate', res, next); + usersController.getUsers('users:joindate', 50, res, next); }; -function getUsers(set, res, next) { - getUsersAndCount(set, 50, function(err, data) { +usersController.getUsers = function(set, count, res, next) { + getUsersAndCount(set, count, function(err, data) { if (err) { return next(err); } var userData = { search_display: 'hidden', - loadmore_display: data.count > 50 ? 'block' : 'hide', + loadmore_display: data.count > count ? 'block' : 'hide', users: data.users, show_anon: 'hide' }; res.render('users', userData); }); -} +}; function getUsersAndCount(set, count, callback) { async.parallel({