diff --git a/public/language/en_GB/pages.json b/public/language/en_GB/pages.json index 74e24a2e79..d9825d5800 100644 --- a/public/language/en_GB/pages.json +++ b/public/language/en_GB/pages.json @@ -5,7 +5,8 @@ "recent": "Recent Topics", "users": "Registered Users", "notifications": "Notifications", - "tags": "Topics tagged under \"%1\"", + "tags": "Tags", + "tag": "Topics tagged under \"%1\"", "user.edit": "Editing \"%1\"", "user.following": "People %1 Follows", "user.followers": "People who Follow %1", diff --git a/public/src/client/account/favourites.js b/public/src/client/account/favourites.js index f73e1d4f20..1e6e77e20b 100644 --- a/public/src/client/account/favourites.js +++ b/public/src/client/account/favourites.js @@ -19,6 +19,7 @@ define('forum/account/favourites', ['forum/account/header', 'forum/infinitescrol } infinitescroll.loadMore('posts.loadMoreFavourites', { + uid: ajaxify.variables.get('theirid'), after: $('.user-favourite-posts').attr('data-nextstart') }, function(data, done) { if (data.posts && data.posts.length) { diff --git a/src/batch.js b/src/batch.js index 096c1d7147..70ccd8df01 100644 --- a/src/batch.js +++ b/src/batch.js @@ -28,7 +28,7 @@ var async = require('async'), var batch = options.batch || DEFAULT_BATCH_SIZE; var start = 0; - var end = batch; + var stop = batch; var done = false; async.whilst( @@ -36,11 +36,11 @@ var async = require('async'), return !done; }, function(next) { - db.getSortedSetRange(setKey, start, end, function(err, ids) { + db.getSortedSetRange(setKey, start, stop, function(err, ids) { if (err) { return next(err); } - if (!ids.length || options.doneIf(start, end, ids)) { + if (!ids.length || options.doneIf(start, stop, ids)) { done = true; return next(); } @@ -49,7 +49,7 @@ var async = require('async'), return next(err); } start += utils.isNumber(options.alwaysStartAt) ? options.alwaysStartAt : batch + 1; - end = start + batch; + stop = start + batch; next(); }); }); diff --git a/src/categories.js b/src/categories.js index 3061ef8425..c57013f47f 100644 --- a/src/categories.js +++ b/src/categories.js @@ -38,14 +38,7 @@ var async = require('async'), async.parallel({ topics: function(next) { - Categories.getCategoryTopics({ - cid: data.cid, - set: data.set, - reverse: data.reverse, - start: data.start, - stop: data.end, - uid: data.uid - }, next); + Categories.getCategoryTopics(data, next); }, pageCount: function(next) { Categories.getPageCount(data.cid, data.uid, next); @@ -65,7 +58,7 @@ var async = require('async'), plugins.fireHook('filter:category.get', {category: category, uid: data.uid}, function(err, data) { callback(err, data ? data.category : null); - }); + }); }); }); }; @@ -120,7 +113,7 @@ var async = require('async'), }, function(cids, next) { Categories.getCategories(cids, uid, next); - } + } ], callback); }; diff --git a/src/controllers/accounts.js b/src/controllers/accounts.js index 51cc3daf82..3f5d23653a 100644 --- a/src/controllers/accounts.js +++ b/src/controllers/accounts.js @@ -120,8 +120,7 @@ accountsController.getUserByUID = function(req, res, next) { }; accountsController.getAccount = function(req, res, next) { - var lowercaseSlug = req.params.userslug.toLowerCase(), - callerUID = req.user ? parseInt(req.user.uid, 10) : 0; + var lowercaseSlug = req.params.userslug.toLowerCase(); if (req.params.userslug !== lowercaseSlug) { if (res.locals.isAPI) { @@ -131,7 +130,7 @@ accountsController.getAccount = function(req, res, next) { } } - getUserDataByUserSlug(req.params.userslug, callerUID, function (err, userData) { + getUserDataByUserSlug(req.params.userslug, req.uid, function (err, userData) { if (err) { return next(err); } @@ -140,19 +139,19 @@ accountsController.getAccount = function(req, res, next) { return helpers.notFound(req, res); } - if (callerUID !== parseInt(userData.uid, 10)) { + if (req.uid !== parseInt(userData.uid, 10)) { user.incrementUserFieldBy(userData.uid, 'profileviews', 1); } async.parallel({ isFollowing: function(next) { - user.isFollowing(callerUID, userData.theirid, next); + user.isFollowing(req.uid, userData.theirid, next); }, posts: function(next) { - posts.getPostsFromSet('uid:' + userData.theirid + ':posts', callerUID, 0, 9, next); + posts.getPostsFromSet('uid:' + userData.theirid + ':posts', req.uid, 0, 9, next); }, signature: function(next) { - postTools.parseSignature(userData, callerUID, next); + postTools.parseSignature(userData, req.uid, next); } }, function(err, results) { if(err) { @@ -170,7 +169,7 @@ accountsController.getAccount = function(req, res, next) { userData.profileviews = 1; } - plugins.fireHook('filter:user.account', {userData: userData, uid: callerUID}, function(err, data) { + plugins.fireHook('filter:user.account', {userData: userData, uid: req.uid}, function(err, data) { if (err) { return next(err); } @@ -189,12 +188,11 @@ accountsController.getFollowers = function(req, res, next) { }; function getFollow(tpl, name, req, res, next) { - var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; var userData; async.waterfall([ function(next) { - getUserDataByUserSlug(req.params.userslug, callerUID, next); + getUserDataByUserSlug(req.params.userslug, req.uid, next); }, function(data, next) { userData = data; @@ -205,7 +203,7 @@ function getFollow(tpl, name, req, res, next) { user[method](userData.uid, 0, 49, next); } ], function(err, users) { - if(err) { + if (err) { return next(err); } @@ -233,9 +231,7 @@ accountsController.getTopics = function(req, res, next) { }; accountsController.getGroups = function(req, res, next) { - var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; - - accountsController.getBaseUser(req.params.userslug, callerUID, function(err, userData) { + accountsController.getBaseUser(req.params.userslug, req.uid, function(err, userData) { if (err) { return next(err); } @@ -257,9 +253,7 @@ accountsController.getGroups = function(req, res, next) { }; function getFromUserSet(tpl, set, method, type, req, res, next) { - var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; - - accountsController.getBaseUser(req.params.userslug, callerUID, function(err, userData) { + accountsController.getBaseUser(req.params.userslug, req.uid, function(err, userData) { if (err) { return next(err); } @@ -268,7 +262,7 @@ function getFromUserSet(tpl, set, method, type, req, res, next) { return helpers.notFound(req, res); } - method('uid:' + userData.uid + ':' + set, callerUID, 0, 19, function(err, data) { + method('uid:' + userData.uid + ':' + set, req.uid, 0, 19, function(err, data) { if (err) { return next(err); } @@ -317,11 +311,10 @@ accountsController.getBaseUser = function(userslug, callerUID, callback) { }; accountsController.accountEdit = function(req, res, next) { - var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; var userData; async.waterfall([ function(next) { - getUserDataByUserSlug(req.params.userslug, callerUID, next); + getUserDataByUserSlug(req.params.userslug, req.uid, next); }, function(data, next) { userData = data; @@ -339,9 +332,7 @@ accountsController.accountEdit = function(req, res, next) { }; accountsController.accountSettings = function(req, res, next) { - var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; - - accountsController.getBaseUser(req.params.userslug, callerUID, function(err, userData) { + accountsController.getBaseUser(req.params.userslug, req.uid, function(err, userData) { if (err) { return next(err); } @@ -380,7 +371,7 @@ accountsController.uploadPicture = function (req, res, next) { var userPhoto = req.files.files[0]; var uploadSize = parseInt(meta.config.maximumProfileImageSize, 10) || 256; var extension = path.extname(userPhoto.name); - var updateUid = req.user ? req.user.uid : 0; + var updateUid = req.uid; var imageDimension = parseInt(meta.config.profileImageDimension, 10) || 128; var convertToPNG = parseInt(meta.config['profile:convertProfileImageToPNG'], 10) === 1; @@ -412,7 +403,7 @@ accountsController.uploadPicture = function (req, res, next) { return next(); } - user.isAdministrator(req.user.uid, function(err, isAdmin) { + user.isAdministrator(req.uid, function(err, isAdmin) { if (err) { return next(err); } @@ -471,7 +462,7 @@ accountsController.uploadPicture = function (req, res, next) { }; accountsController.getNotifications = function(req, res, next) { - user.notifications.getAll(req.user.uid, 40, function(err, notifications) { + user.notifications.getAll(req.uid, 40, function(err, notifications) { if (err) { return next(err); } diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 24332866f9..db88ae96ea 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -144,11 +144,10 @@ adminController.categories.get = function(req, res, next) { }; adminController.categories.getAll = function(req, res, next) { - var uid = req.user ? parseInt(req.user.uid, 10) : 0, - active = [], + var active = [], disabled = []; - categories.getAllCategories(uid, function (err, categoryData) { + categories.getAllCategories(req.uid, function (err, categoryData) { if (err) { return next(err); } @@ -179,20 +178,20 @@ adminController.flags.get = function(req, res, next) { if (err) { return next(err); } - res.render('admin/manage/flags', {posts: posts, next: end + 1, byUsername: byUsername}); + res.render('admin/manage/flags', {posts: posts, next: stop + 1, byUsername: byUsername}); } - var uid = req.user ? parseInt(req.user.uid, 10) : 0; + var sortBy = req.query.sortBy || 'count'; var byUsername = req.query.byUsername || ''; var start = 0; - var end = 19; + var stop = 19; if (byUsername) { - posts.getUserFlags(byUsername, sortBy, uid, start, end, done); + posts.getUserFlags(byUsername, sortBy, req.uid, start, stop, done); } else { var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged'; - posts.getFlags(set, uid, start, end, done); - } + posts.getFlags(set, req.uid, start, stop, done); + } }; adminController.database.get = function(req, res, next) { @@ -261,7 +260,7 @@ adminController.navigation.get = function(req, res, next) { if (err) { return next(err); } - + res.render('admin/general/navigation', data); }); }; @@ -374,7 +373,7 @@ adminController.extend.rewards = function(req, res, next) { if (err) { return next(err); } - + res.render('admin/extend/rewards', data); }); }; diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index 283302b48e..7f884b79ce 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -31,8 +31,7 @@ usersController.banned = function(req, res, next) { }; function getUsers(set, req, res, next) { - var uid = req.user ? parseInt(req.user.uid, 10) : 0; - user.getUsersFromSet(set, uid, 0, 49, function(err, users) { + user.getUsersFromSet(set, req.uid, 0, 49, function(err, users) { if (err) { return next(err); } @@ -45,7 +44,7 @@ function getUsers(set, req, res, next) { search_display: 'hidden', loadmore_display: 'block', users: users, - yourid: req.user.uid, + yourid: req.uid, requireEmailConfirmation: parseInt(meta.config.requireEmailConfirmation, 10) === 1 }); }); diff --git a/src/controllers/api.js b/src/controllers/api.js index 8be2211ca1..e565963816 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -98,7 +98,6 @@ apiController.getConfig = function(req, res, next) { apiController.renderWidgets = function(req, res, next) { var async = require('async'), - uid = req.user ? req.user.uid : 0, areas = { template: req.query.template, locations: req.query.locations, @@ -110,7 +109,7 @@ apiController.renderWidgets = function(req, res, next) { return res.status(200).json({}); } - widgets.render(uid, { + widgets.render(req.uid, { template: areas.template, url: areas.url, locations: areas.locations diff --git a/src/controllers/categories.js b/src/controllers/categories.js index 55c0122705..5d67fd828f 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -17,9 +17,8 @@ var categoriesController = {}, utils = require('../../public/src/utils'); categoriesController.recent = function(req, res, next) { - var uid = req.user ? req.user.uid : 0; - var end = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; - topics.getTopicsFromSet('topics:recent', uid, 0, end, function(err, data) { + var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; + topics.getTopicsFromSet('topics:recent', req.uid, 0, stop, function(err, data) { if (err) { return next(err); } @@ -34,7 +33,6 @@ categoriesController.recent = function(req, res, next) { var anonCache = {}, lastUpdateTime = 0; categoriesController.popular = function(req, res, next) { - var uid = req.user ? req.user.uid : 0; var terms = { daily: 'day', weekly: 'week', @@ -43,13 +41,13 @@ categoriesController.popular = function(req, res, next) { }; var term = terms[req.params.term] || 'day'; - if (uid === 0) { + if (!req.uid) { if (anonCache[term] && (Date.now() - lastUpdateTime) < 60 * 60 * 1000) { return res.render('popular', anonCache[term]); } } - topics.getPopular(term, uid, meta.config.topicsPerList, function(err, topics) { + topics.getPopular(term, req.uid, meta.config.topicsPerList, function(err, topics) { if (err) { return next(err); } @@ -61,7 +59,7 @@ categoriesController.popular = function(req, res, next) { breadcrumbs: helpers.buildBreadcrumbs([{text: '[[global:header.popular]]'}]) }; - if (uid === 0) { + if (!req.uid) { anonCache[term] = data; lastUpdateTime = Date.now(); } @@ -71,9 +69,8 @@ categoriesController.popular = function(req, res, next) { }; categoriesController.unread = function(req, res, next) { - var uid = req.user ? req.user.uid : 0; - var end = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; - topics.getUnreadTopics(uid, 0, end, function (err, data) { + var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; + topics.getUnreadTopics(req.uid, 0, stop, function (err, data) { if (err) { return next(err); } @@ -84,10 +81,8 @@ categoriesController.unread = function(req, res, next) { }; categoriesController.unreadTotal = function(req, res, next) { - var uid = req.user ? req.user.uid : 0; - - topics.getTotalUnread(uid, function (err, data) { - if(err) { + topics.getTotalUnread(req.uid, function (err, data) { + if (err) { return next(err); } @@ -122,11 +117,10 @@ categoriesController.list = function(req, res, next) { next(null); }, categories: function (next) { - var uid = req.user ? req.user.uid : 0; var categoryData; async.waterfall([ function(next) { - categories.getCategoriesByPrivilege(uid, 'find', next); + categories.getCategoriesByPrivilege(req.uid, 'find', next); }, function(_categoryData, next) { categoryData = _categoryData; @@ -143,7 +137,7 @@ categoriesController.list = function(req, res, next) { return category && !category.parent; }); - categories.getRecentTopicReplies(allCategories, uid, next); + categories.getRecentTopicReplies(allCategories, req.uid, next); } ], function(err) { next(err, categoryData); @@ -166,7 +160,6 @@ categoriesController.list = function(req, res, next) { categoriesController.get = function(req, res, next) { var cid = req.params.category_id, page = req.query.page || 1, - uid = req.user ? req.user.uid : 0, userPrivileges; if (req.params.topic_index && !utils.isNumber(req.params.topic_index)) { @@ -183,10 +176,10 @@ categoriesController.get = function(req, res, next) { categories.getCategoryFields(cid, ['slug', 'disabled', 'topic_count'], next); }, privileges: function(next) { - privileges.categories.get(cid, uid, next); + privileges.categories.get(cid, req.uid, next); }, userSettings: function(next) { - user.getSettings(uid, next); + user.getSettings(req.uid, next); } }, next); }, @@ -232,15 +225,15 @@ categoriesController.get = function(req, res, next) { } var start = (page - 1) * settings.topicsPerPage + topicIndex, - end = start + settings.topicsPerPage - 1; + stop = start + settings.topicsPerPage - 1; next(null, { cid: cid, set: set, reverse: reverse, start: start, - end: end, - uid: uid + stop: stop, + uid: req.uid }); }, function(payload, next) { @@ -276,7 +269,7 @@ categoriesController.get = function(req, res, next) { }); }, function(categoryData, next) { - categories.getRecentTopicReplies(categoryData.children, uid, function(err) { + categories.getRecentTopicReplies(categoryData.children, req.uid, function(err) { next(err, categoryData); }); }, @@ -303,7 +296,7 @@ categoriesController.get = function(req, res, next) { } ]; - if(categoryData.backgroundImage) { + if (categoryData.backgroundImage) { res.locals.metaTags.push({ name: 'og:image', content: categoryData.backgroundImage diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 7371c924e7..e3bdd500a6 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -12,7 +12,7 @@ groupsController.list = function(req, res, next) { groups.list({ truncateUserList: true, expand: true, - uid: req.user ? parseInt(req.user.uid, 10) : 0 + uid: req.uid }, function(err, groups) { if (err) { return next(err); @@ -25,12 +25,12 @@ groupsController.list = function(req, res, next) { }; groupsController.details = function(req, res, next) { - var uid = req.user ? parseInt(req.user.uid, 10) : 0; - async.waterfall([ async.apply(groups.exists, res.locals.groupName), function(exists, next) { - if (!exists) { return next(undefined, null); } + if (!exists) { + return next(undefined, null); + } // Ensure the group isn't hidden either groups.isHidden(res.locals.groupName, next); @@ -43,8 +43,8 @@ groupsController.details = function(req, res, next) { } else { // If not, only members are granted access async.parallel([ - async.apply(groups.isMember, uid, res.locals.groupName), - async.apply(groups.isInvited, uid, res.locals.groupName) + async.apply(groups.isMember, req.uid, res.locals.groupName), + async.apply(groups.isInvited, req.uid, res.locals.groupName) ], function(err, checks) { next(err, checks[0] || checks[1]); }); @@ -63,11 +63,11 @@ groupsController.details = function(req, res, next) { group: function(next) { groups.get(res.locals.groupName, { expand: true, - uid: uid + uid: req.uid }, next); }, posts: function(next) { - groups.getLatestMemberPosts(res.locals.groupName, 10, uid, next); + groups.getLatestMemberPosts(res.locals.groupName, 10, req.uid, next); } }, function(err, results) { if (err) { @@ -84,13 +84,12 @@ groupsController.details = function(req, res, next) { }; groupsController.members = function(req, res, next) { - var uid = req.user ? parseInt(req.user.uid, 10) : 0; async.waterfall([ function(next) { groups.getGroupNameByGroupSlug(req.params.slug, next); }, function(groupName, next) { - user.getUsersFromSet('group:' + groupName + ':members', uid, 0, 49, next); + user.getUsersFromSet('group:' + groupName + ':members', req.uid, 0, 49, next); }, ], function(err, users) { if (err) { diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index 0b100aad49..8d4ccb8895 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -26,13 +26,11 @@ helpers.notFound = function(req, res, error) { }; helpers.notAllowed = function(req, res, error) { - var uid = req.user ? req.user.uid : 0; - - if (uid) { + if (req.uid) { if (res.locals.isAPI) { - res.status(403).json({path: req.path.replace(/^\/api/, ''), loggedIn: !!uid, error: error}); + res.status(403).json({path: req.path.replace(/^\/api/, ''), loggedIn: !!req.uid, error: error}); } else { - res.status(403).render('403', {path: req.path, loggedIn: !!uid, error: error}); + res.status(403).render('403', {path: req.path, loggedIn: !!req.uid, error: error}); } } else { if (res.locals.isAPI) { diff --git a/src/controllers/posts.js b/src/controllers/posts.js index e5a32e9791..a2bbfab226 100644 --- a/src/controllers/posts.js +++ b/src/controllers/posts.js @@ -1,17 +1,16 @@ "use strict"; var async = require('async'), - + posts = require('../posts'), privileges = require('../privileges'), helpers = require('./helpers'), postsController = {}; postsController.getPost = function(req, res, next) { - var uid = req.user ? parseInt(req.user.uid) : 0; async.parallel({ canRead: function(next) { - privileges.posts.can('read', req.params.pid, uid, next); + privileges.posts.can('read', req.params.pid, req.uid, next); }, postData: function(next) { posts.getPostData(req.params.pid, next); diff --git a/src/controllers/search.js b/src/controllers/search.js index 7c1d20262b..55134c7ec6 100644 --- a/src/controllers/search.js +++ b/src/controllers/search.js @@ -15,10 +15,9 @@ searchController.search = function(req, res, next) { return helpers.notFound(req, res); } - var uid = req.user ? req.user.uid : 0; var breadcrumbs = helpers.buildBreadcrumbs([{text: '[[global:search]]'}]); - categories.getCategoriesByPrivilege(uid, 'read', function(err, categories) { + categories.getCategoriesByPrivilege(req.uid, 'read', function(err, categories) { if (err) { return next(err); } @@ -42,7 +41,7 @@ searchController.search = function(req, res, next) { sortBy: req.query.sortBy, sortDirection: req.query.sortDirection, page: page, - uid: uid + uid: req.uid }; search.search(data, function(err, results) { diff --git a/src/controllers/tags.js b/src/controllers/tags.js index 3d450e06a7..aba1acae60 100644 --- a/src/controllers/tags.js +++ b/src/controllers/tags.js @@ -10,10 +10,9 @@ var tagsController = {}, tagsController.getTag = function(req, res, next) { var tag = validator.escape(req.params.tag); - var uid = req.user ? req.user.uid : 0; - var end = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; + var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; - topics.getTagTids(tag, 0, end, function(err, tids) { + topics.getTagTids(tag, 0, stop, function(err, tids) { if (err) { return next(err); } @@ -23,7 +22,7 @@ tagsController.getTag = function(req, res, next) { return res.render('tag', {topics: [], tag: tag}); } - topics.getTopics(tids, uid, function(err, topics) { + topics.getTopics(tids, req.uid, function(err, topics) { if (err) { return next(err); } @@ -45,7 +44,7 @@ tagsController.getTag = function(req, res, next) { var data = { topics: topics, tag: tag, - nextStart: end + 1, + nextStart: stop + 1, breadcrumbs: helpers.buildBreadcrumbs([{text: '[[tags:tags]]', url: '/tags'}, {text: tag}]) }; res.render('tag', data); diff --git a/src/controllers/topics.js b/src/controllers/topics.js index 8429e19396..7436e86c8e 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -20,7 +20,6 @@ topicsController.get = function(req, res, next) { var tid = req.params.topic_id, page = 1, sort = req.query.sort, - uid = req.user ? req.user.uid : 0, userPrivileges; if (req.params.post_index && !utils.isNumber(req.params.post_index)) { @@ -31,10 +30,10 @@ topicsController.get = function(req, res, next) { function (next) { async.parallel({ privileges: function(next) { - privileges.topics.get(tid, uid, next); + privileges.topics.get(tid, req.uid, next); }, settings: function(next) { - user.getSettings(uid, next); + user.getSettings(req.uid, next); }, topic: function(next) { topics.getTopicFields(tid, ['slug', 'postcount', 'deleted'], next); @@ -106,9 +105,9 @@ topicsController.get = function(req, res, next) { } var start = (page - 1) * settings.postsPerPage + postIndex, - end = start + settings.postsPerPage - 1; + stop = start + settings.postsPerPage - 1; - topics.getTopicWithPosts(tid, set, uid, start, end, reverse, function (err, topicData) { + topics.getTopicWithPosts(tid, set, req.uid, start, stop, reverse, function (err, topicData) { if (err && err.message === '[[error:no-topic]]' && !topicData) { return helpers.notFound(req, res); } @@ -255,7 +254,7 @@ topicsController.get = function(req, res, next) { data['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1; data['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1; data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; - data['rssFeedUrl'] = nconf.get('relative_path') + '/topic/' + data.tid + '.rss'; + data.rssFeedUrl = nconf.get('relative_path') + '/topic/' + data.tid + '.rss'; data.pagination = pagination.create(data.currentPage, data.pageCount); data.pagination.rel.forEach(function(rel) { res.locals.linkTags.push(rel); @@ -274,42 +273,36 @@ topicsController.get = function(req, res, next) { topicsController.teaser = function(req, res, next) { var tid = req.params.topic_id; - var uid = req.user ? parseInt(req.user.uid, 10) : 0; if (!utils.isNumber(tid)) { return next(new Error('[[error:invalid-tid]]')); } - privileges.topics.can('read', tid, uid, function(err, canRead) { - if (err) { - return next(err); - } - - if (!canRead) { - return res.status(403).json('[[error:no-privileges]]'); - } - - topics.getLatestUndeletedPid(tid, function(err, pid) { - if (err) { - return next(err); + async.waterfall([ + function(next) { + privileges.topics.can('read', tid, req.uid, next); + }, + function(canRead, next) { + if (!canRead) { + return res.status(403).json('[[error:no-privileges]]'); } - + topics.getLatestUndeletedPid(tid, next); + }, + function(pid, next) { if (!pid) { return res.status(404).json('not-found'); } + posts.getPostSummaryByPids([pid], req.uid, {stripTags: false}, next); + } + ], function(err, posts) { + if (err) { + return next(err); + } - posts.getPostSummaryByPids([pid], uid, {stripTags: false}, function(err, posts) { - if (err) { - return next(err); - } - - if (!Array.isArray(posts) || !posts.length) { - return res.status(404).json('not-found'); - } - - res.json(posts[0]); - }); - }); + if (!Array.isArray(posts) || !posts.length) { + return res.status(404).json('not-found'); + } + res.json(posts[0]); }); }; diff --git a/src/controllers/users.js b/src/controllers/users.js index a4cb36259b..6a3e02b252 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -11,18 +11,17 @@ var async = require('async'), usersController.getOnlineUsers = function(req, res, next) { var websockets = require('../socket.io'); - var uid = req.user ? req.user.uid : 0; async.parallel({ users: function(next) { - user.getUsersFromSet('users:online', uid, 0, 49, next); + user.getUsersFromSet('users:online', req.uid, 0, 49, next); }, count: function(next) { var now = Date.now(); db.sortedSetCount('users:online', now - 300000, now, next); }, isAdministrator: function(next) { - user.isAdministrator(uid, next); + user.isAdministrator(req.uid, next); } }, function(err, results) { if (err) { @@ -62,9 +61,7 @@ usersController.getUsersSortedByJoinDate = function(req, res, next) { }; usersController.getUsers = function(set, count, req, res, next) { - var uid = req.user ? req.user.uid : 0; - - getUsersAndCount(set, uid, count, function(err, data) { + getUsersAndCount(set, req.uid, count, function(err, data) { if (err) { return next(err); } @@ -102,10 +99,9 @@ function getUsersAndCount(set, uid, count, callback) { } usersController.getUsersForSearch = function(req, res, next) { - var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 20, - uid = req.user ? req.user.uid : 0; + var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 20; - getUsersAndCount('users:joindate', uid, resultsPerPage, function(err, data) { + getUsersAndCount('users:joindate', req.uid, resultsPerPage, function(err, data) { if (err) { return next(err); } diff --git a/src/groups.js b/src/groups.js index c2257c9935..90053643d3 100644 --- a/src/groups.js +++ b/src/groups.js @@ -93,8 +93,8 @@ var async = require('async'), }); }; - Groups.getGroups = function(start, end, callback) { - db.getSortedSetRevRange('groups:createtime', start, end, callback); + Groups.getGroups = function(start, stop, callback) { + db.getSortedSetRevRange('groups:createtime', start, stop, callback); }; Groups.get = function(groupName, options, callback) { @@ -315,8 +315,8 @@ var async = require('async'), }); }; - Groups.getMembers = function(groupName, start, end, callback) { - db.getSortedSetRevRange('group:' + groupName + ':members', start, end, callback); + Groups.getMembers = function(groupName, start, stop, callback) { + db.getSortedSetRevRange('group:' + groupName + ':members', start, stop, callback); }; Groups.getMembersOfGroups = function(groupNames, callback) { diff --git a/src/messaging.js b/src/messaging.js index 4a367fbd38..33ec97f9b4 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -225,10 +225,10 @@ var db = require('./database'), db.sortedSetAdd('uid:' + uid + ':chats', Date.now(), toUid, callback); }; - Messaging.getRecentChats = function(uid, start, end, callback) { + Messaging.getRecentChats = function(uid, start, stop, callback) { var websockets = require('./socket.io'); - db.getSortedSetRevRange('uid:' + uid + ':chats', start, end, function(err, uids) { + db.getSortedSetRevRange('uid:' + uid + ':chats', start, stop, function(err, uids) { if (err) { return callback(err); } @@ -250,7 +250,7 @@ var db = require('./database'), }); if (!results.users.length) { - return callback(null, {users: [], nextStart: end + 1}); + return callback(null, {users: [], nextStart: stop + 1}); } results.users.forEach(function(user, index) { @@ -260,7 +260,7 @@ var db = require('./database'), } }); - callback(null, {users: results.users, nextStart: end + 1}); + callback(null, {users: results.users, nextStart: stop + 1}); }); }); }; diff --git a/src/meta/title.js b/src/meta/title.js index d67c448343..7522dbe3a7 100644 --- a/src/meta/title.js +++ b/src/meta/title.js @@ -40,7 +40,7 @@ module.exports = function(Meta) { }; Meta.title.parseFragment = function (urlFragment, language, locals, callback) { - var translated = ['', 'recent', 'unread', 'users', 'notifications']; + var translated = ['', 'recent', 'unread', 'users', 'notifications', 'popular', 'tags']; if (translated.indexOf(urlFragment) !== -1) { if (!urlFragment.length) { urlFragment = 'home'; @@ -60,7 +60,7 @@ module.exports = function(Meta) { } else if (tests.isTag.test(urlFragment)) { var tag = urlFragment.match(/tags\/([\s\S]+)/)[1]; - translator.translate('[[pages:tags, ' + tag + ']]', language, function(translated) { + translator.translate('[[pages:tag, ' + tag + ']]', language, function(translated) { callback(null, translated); }); } else if (tests.isUserPage.test(urlFragment)) { diff --git a/src/middleware/admin.js b/src/middleware/admin.js index 1d6c0dae6a..5b3f4c186d 100644 --- a/src/middleware/admin.js +++ b/src/middleware/admin.js @@ -53,19 +53,17 @@ middleware.buildHeader = function(req, res, next) { }; middleware.renderHeader = function(req, res, next) { - var uid = req.user ? req.user.uid : 0; - var custom_header = { 'plugins': [], 'authentication': [] }; - user.getUserFields(uid, ['username', 'userslug', 'email', 'picture', 'email:confirmed'], function(err, userData) { + user.getUserFields(req.uid, ['username', 'userslug', 'email', 'picture', 'email:confirmed'], function(err, userData) { if (err) { return next(err); } - userData.uid = uid; + userData.uid = req.uid; userData['email:confirmed'] = parseInt(userData['email:confirmed'], 10) === 1; async.parallel({ diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index cc3ae7cb5c..f542159c50 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -124,9 +124,7 @@ middleware.checkGlobalPrivacySettings = function(req, res, next) { middleware.checkAccountPermissions = function(req, res, next) { // This middleware ensures that only the requested user and admins can pass - var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; - - if (callerUID === 0) { + if (!req.uid) { return controllers.helpers.notAllowed(req, res); } @@ -139,11 +137,11 @@ middleware.checkAccountPermissions = function(req, res, next) { return controllers.helpers.notFound(req, res); } - if (parseInt(uid, 10) === callerUID) { + if (parseInt(uid, 10) === req.uid) { return next(); } - user.isAdministrator(callerUID, function(err, isAdmin) { + user.isAdministrator(req.uid, function(err, isAdmin) { if (err || isAdmin) { return next(err); } @@ -201,8 +199,6 @@ middleware.buildHeader = function(req, res, next) { }; middleware.renderHeader = function(req, res, callback) { - var uid = req.user ? parseInt(req.user.uid, 10) : 0; - navigation.get(function(err, menuItems) { if (err) { return callback(err); @@ -284,8 +280,8 @@ middleware.renderHeader = function(req, res, callback) { next(null, templateValues.useCustomJS ? meta.config.customJS : ''); }, title: function(next) { - if (uid) { - user.getSettings(uid, function(err, settings) { + if (req.uid) { + user.getSettings(req.uid, function(err, settings) { if (err) { return next(err); } @@ -296,11 +292,11 @@ middleware.renderHeader = function(req, res, callback) { } }, isAdmin: function(next) { - user.isAdministrator(uid, next); + user.isAdministrator(req.uid, next); }, user: function(next) { - if (uid) { - user.getUserFields(uid, ['username', 'userslug', 'email', 'picture', 'status', 'email:confirmed', 'banned'], next); + if (req.uid) { + user.getUserFields(req.uid, ['username', 'userslug', 'email', 'picture', 'status', 'email:confirmed', 'banned'], next); } else { next(null, { username: '[[global:guest]]', @@ -527,7 +523,7 @@ middleware.exposeUid = function(req, res, next) { res.locals.uid = uid; next(); - }) + }); } else { next(); } diff --git a/src/posts.js b/src/posts.js index 53931d75f7..e81863e44d 100644 --- a/src/posts.js +++ b/src/posts.js @@ -26,11 +26,11 @@ var async = require('async'), db.isSortedSetMember('posts:pid', pid, callback); }; - Posts.getPidsFromSet = function(set, start, end, reverse, callback) { - if (isNaN(start) || isNaN(end)) { + Posts.getPidsFromSet = function(set, start, stop, reverse, callback) { + if (isNaN(start) || isNaN(stop)) { return callback(null, []); } - db[reverse ? 'getSortedSetRevRange' : 'getSortedSetRange'](set, start, end, callback); + db[reverse ? 'getSortedSetRevRange' : 'getSortedSetRange'](set, start, stop, callback); }; Posts.getPostsByPids = function(pids, uid, callback) { @@ -73,10 +73,10 @@ var async = require('async'), }); }; - Posts.getPostsFromSet = function(set, uid, start, end, callback) { + Posts.getPostsFromSet = function(set, uid, start, stop, callback) { async.waterfall([ function(next) { - db.getSortedSetRevRange(set, start, end, next); + db.getSortedSetRevRange(set, start, stop, next); }, function(pids, next) { privileges.posts.filter('read', pids, uid, next); @@ -85,7 +85,7 @@ var async = require('async'), Posts.getPostSummaryByPids(pids, uid, {stripTags: false}, next); }, function(posts, next) { - next(null, {posts: posts, nextStart: end + 1}); + next(null, {posts: posts, nextStart: stop + 1}); } ], callback); }; diff --git a/src/posts/flags.js b/src/posts/flags.js index 388b707d3d..cbfa1f832c 100644 --- a/src/posts/flags.js +++ b/src/posts/flags.js @@ -38,17 +38,17 @@ module.exports = function(Posts) { }, function(next) { if (parseInt(post.uid, 10)) { - db.sortedSetAdd('uid:' + post.uid + ':flag:pids', now, post.pid, next); + db.sortedSetAdd('uid:' + post.uid + ':flag:pids', now, post.pid, next); } else { next(); - } + } }, function(next) { if (parseInt(post.uid, 10)) { db.setAdd('uid:' + post.uid + ':flagged_by', uid, next); } else { next(); - } + } } ], function(err, results) { callback(err); @@ -69,8 +69,8 @@ module.exports = function(Posts) { } db.sortedSetsRemove([ - 'posts:flagged', - 'posts:flags:count', + 'posts:flagged', + 'posts:flags:count', 'uid:' + uid + ':flag:pids' ], pid, next); }); @@ -80,7 +80,7 @@ module.exports = function(Posts) { }, function(next) { db.delete('pid:' + pid + ':flag:uids', next); - } + } ], function(err, results) { callback(err); }); @@ -90,8 +90,8 @@ module.exports = function(Posts) { db.delete('posts:flagged', callback); }; - Posts.getFlags = function(set, uid, start, end, callback) { - db.getSortedSetRevRange(set, start, end, function(err, pids) { + Posts.getFlags = function(set, uid, start, stop, callback) { + db.getSortedSetRevRange(set, start, stop, function(err, pids) { if (err) { return callback(err); } @@ -100,7 +100,7 @@ module.exports = function(Posts) { }); }; - Posts.getUserFlags = function(byUsername, sortBy, callerUID, start, end, callback) { + Posts.getUserFlags = function(byUsername, sortBy, callerUID, start, stop, callback) { async.waterfall([ function(next) { user.getUidByUsername(byUsername, next); @@ -108,7 +108,7 @@ module.exports = function(Posts) { function(uid, next) { if (!uid) { return next(null, []); - } + } db.getSortedSetRevRange('uid:' + uid + ':flag:pids', 0, -1, next); }, function(pids, next) { @@ -120,7 +120,7 @@ module.exports = function(Posts) { return b.flags - a.flags; }); } - next(null, posts.slice(start, end)); + next(null, posts.slice(start, stop)); } ], callback); }; diff --git a/src/posts/recent.js b/src/posts/recent.js index d41ef5342e..f7d588acff 100644 --- a/src/posts/recent.js +++ b/src/posts/recent.js @@ -33,10 +33,10 @@ module.exports = function(Posts) { ], callback); }; - Posts.getRecentPosterUids = function(start, end, callback) { + Posts.getRecentPosterUids = function(start, stop, callback) { async.waterfall([ function(next) { - db.getSortedSetRevRange('posts:pid', start, end, next); + db.getSortedSetRevRange('posts:pid', start, stop, next); }, function(pids, next) { Posts.getPostsFields(pids, ['uid'], next); diff --git a/src/posts/topics.js b/src/posts/topics.js index 75577d2925..4e9f1f7213 100644 --- a/src/posts/topics.js +++ b/src/posts/topics.js @@ -6,8 +6,8 @@ var async = require('async'), module.exports = function(Posts) { - Posts.getPostsByTid = function(tid, set, start, end, uid, reverse, callback) { - Posts.getPidsFromSet(set, start, end, reverse, function(err, pids) { + Posts.getPostsByTid = function(tid, set, start, stop, uid, reverse, callback) { + Posts.getPidsFromSet(set, start, stop, reverse, function(err, pids) { if (err) { return callback(err); } diff --git a/src/routes/api.js b/src/routes/api.js index 88c3686850..d3a366dc5d 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -35,10 +35,8 @@ function getModerators(req, res, next) { function getRecentPosts(req, res, next) { - var uid = (req.user) ? req.user.uid : 0; - - posts.getRecentPosts(uid, 0, 19, req.params.term, function (err, data) { - if(err) { + posts.getRecentPosts(req.uid, 0, 19, req.params.term, function (err, data) { + if (err) { return next(err); } diff --git a/src/routes/authentication.js b/src/routes/authentication.js index 6a5bc87723..eaf09f3e8b 100644 --- a/src/routes/authentication.js +++ b/src/routes/authentication.js @@ -23,6 +23,11 @@ app.use(passport.initialize()); app.use(passport.session()); + app.use(function(req, res, next) { + req.uid = req.user ? parseInt(req.user.uid) : 0; + next(); + }); + Auth.app = app; Auth.middleware = middleware; }; diff --git a/src/routes/feeds.js b/src/routes/feeds.js index 86d9cbb82d..8e1da9ac7e 100644 --- a/src/routes/feeds.js +++ b/src/routes/feeds.js @@ -25,9 +25,7 @@ function hasCategoryPrivileges(req, res, next) { } function hasPrivileges(method, id, req, res, next) { - var uid = req.user ? req.user.uid || 0 : 0; - - method('read', id, uid, function(err, canRead) { + method('read', id, req.uid, function(err, canRead) { if (err) { return next(err); } @@ -42,14 +40,13 @@ function hasPrivileges(method, id, req, res, next) { function generateForTopic(req, res, next) { var tid = req.params.topic_id; - var uid = req.user ? req.user.uid : 0; - privileges.topics.get(tid, uid, function(err, userPrivileges) { + privileges.topics.get(tid, req.uid, function(err, userPrivileges) { if (err) { return next(err); } - topics.getTopicWithPosts(tid, 'tid:' + tid + ':posts', uid, 0, 25, false, function (err, topicData) { + topics.getTopicWithPosts(tid, 'tid:' + tid + ':posts', req.uid, 0, 25, false, function (err, topicData) { if (err) { return next(err); } @@ -122,14 +119,14 @@ function generateForUserTopics(req, res, next) { function generateForCategory(req, res, next) { var cid = req.params.category_id; - var uid = req.user ? req.user.uid : 0; + categories.getCategoryById({ cid: cid, set: 'cid:' + cid + ':tids', reverse: true, start: 0, - end: 25, - uid: uid + stop: 25, + uid: req.uid }, function (err, categoryData) { if (err) { return next(err); @@ -159,7 +156,6 @@ function generateForRecent(req, res, next) { } function generateForPopular(req, res, next) { - var uid = req.user ? req.user.uid : 0; var terms = { daily: 'day', weekly: 'week', @@ -168,7 +164,7 @@ function generateForPopular(req, res, next) { }; var term = terms[req.params.term] || 'day'; - topics.getPopular(term, uid, 19, function(err, topics) { + topics.getPopular(term, req.uid, 19, function(err, topics) { if (err) { return next(err); } @@ -196,8 +192,7 @@ function disabledRSS(req, res, next) { } function generateForTopics(options, set, req, res, next) { - var uid = req.user ? req.user.uid : 0; - topics.getTopicsFromSet(set, uid, 0, 19, function (err, data) { + topics.getTopicsFromSet(set, req.uid, 0, 19, function (err, data) { if (err) { return next(err); } @@ -239,8 +234,7 @@ function generateTopicsFeed(feedOptions, feedTopics, callback) { } function generateForRecentPosts(req, res, next) { - var uid = req.user ? req.user.uid : 0; - posts.getRecentPosts(uid, 0, 19, 'month', function(err, posts) { + posts.getRecentPosts(req.uid, 0, 19, 'month', function(err, posts) { if (err) { return next(err); } @@ -257,7 +251,6 @@ function generateForRecentPosts(req, res, next) { } function generateForCategoryRecentPosts(req, res, next) { - var uid = req.user ? req.user.uid : 0; var cid = req.params.category_id; async.parallel({ @@ -265,7 +258,7 @@ function generateForCategoryRecentPosts(req, res, next) { categories.getCategoryData(cid, next); }, posts: function(next) { - categories.getRecentReplies(cid, uid, 20, next); + categories.getRecentReplies(cid, req.uid, 20, next); } }, function(err, results) { if (err) { diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 6b61d523f3..ecf63997e5 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -304,12 +304,12 @@ SocketAdmin.getMoreEvents = function(socket, next, callback) { if (start < 0) { return callback(null, {data: [], next: next}); } - var end = start + 10; - events.getEvents(start, end, function(err, events) { + var stop = start + 10; + events.getEvents(start, stop, function(err, events) { if (err) { return callback(err); } - callback(null, {events: events, next: end + 1}); + callback(null, {events: events, next: stop + 1}); }); }; @@ -336,15 +336,15 @@ SocketAdmin.getMoreFlags = function(socket, data, callback) { var sortBy = data.sortBy || 'count'; var byUsername = data.byUsername || ''; var start = parseInt(data.after, 10); - var end = start + 19; + var stop = start + 19; if (byUsername) { - posts.getUserFlags(byUsername, sortBy, socket.uid, start, end, function(err, posts) { - callback(err, {posts: posts, next: end + 1}); + posts.getUserFlags(byUsername, sortBy, socket.uid, start, stop, function(err, posts) { + callback(err, {posts: posts, next: stop + 1}); }); } else { var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged'; - posts.getFlags(set, socket.uid, start, end, function(err, posts) { - callback(err, {posts: posts, next: end + 1}); + posts.getFlags(set, socket.uid, start, stop, function(err, posts) { + callback(err, {posts: posts, next: stop + 1}); }); } }; diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index d98cb0c21f..8ed8881f68 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -58,7 +58,7 @@ SocketCategories.loadMore = function(socket, data, callback) { } var start = parseInt(data.after, 10), - end = start + results.settings.topicsPerPage - 1; + stop = start + results.settings.topicsPerPage - 1; if (results.targetUid) { set = 'cid:' + data.cid + ':uid:' + results.targetUid + ':tids'; @@ -69,7 +69,7 @@ SocketCategories.loadMore = function(socket, data, callback) { set: set, reverse: reverse, start: start, - stop: end, + stop: stop, uid: socket.uid, targetUid: results.targetUid }, function(err, data) { diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 2825b28656..8745efc72a 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -249,9 +249,9 @@ SocketModules.chats.getRecentChats = function(socket, data, callback) { return callback(new Error('[[error:invalid-data]]')); } var start = parseInt(data.after, 10), - end = start + 9; + stop = start + 9; - Messaging.getRecentChats(socket.uid, start, end, callback); + Messaging.getRecentChats(socket.uid, start, stop, callback); }; diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 2fdf4425b5..21825fec07 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -511,27 +511,23 @@ SocketPosts.flag = function(socket, pid, callback) { }; SocketPosts.loadMoreFavourites = function(socket, data, callback) { - if(!data || !data.after) { - return callback(new Error('[[error:invalid-data]]')); - } - - var start = parseInt(data.after, 10), - end = start + 9; - - posts.getPostsFromSet('uid:' + socket.uid + ':favourites', socket.uid, start, end, callback); + loadMorePosts('uid:' + data.uid + ':favourites', socket.uid, data, callback); }; SocketPosts.loadMoreUserPosts = function(socket, data, callback) { - if(!data || !data.uid || !utils.isNumber(data.after)) { + loadMorePosts('uid:' + data.uid + ':posts', socket.uid, data, callback); +}; + +function loadMorePosts(set, uid, data, callback) { + if (!data || !utils.isNumber(data.uid) || !utils.isNumber(data.after)) { return callback(new Error('[[error:invalid-data]]')); } var start = Math.max(0, parseInt(data.after, 10)), - end = start + 9; - - posts.getPostsFromSet('uid:' + data.uid + ':posts', socket.uid, start, end, callback); -}; + stop = start + 9; + posts.getPostsFromSet(set, uid, start, stop, callback); +} SocketPosts.getRecentPosts = function(socket, data, callback) { if(!data || !data.count) { diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index c270082953..61ea05269f 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -470,11 +470,11 @@ SocketTopics.loadMore = function(socket, data, callback) { } } - var end = start + results.settings.postsPerPage - 1; + var stop = start + results.settings.postsPerPage - 1; async.parallel({ posts: function(next) { - topics.getTopicPosts(data.tid, set, start, end, socket.uid, reverse, next); + topics.getTopicPosts(data.tid, set, start, stop, socket.uid, reverse, next); }, privileges: function(next) { next(null, results.privileges); @@ -490,33 +490,33 @@ SocketTopics.loadMore = function(socket, data, callback) { }; SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) { - if(!data || !data.after) { + if (!data || !data.after) { return callback(new Error('[[error:invalid-data]]')); } var start = parseInt(data.after, 10), - end = start + 9; + stop = start + 9; - topics.getUnreadTopics(socket.uid, start, end, callback); + topics.getUnreadTopics(socket.uid, start, stop, callback); }; SocketTopics.loadMoreFromSet = function(socket, data, callback) { - if(!data || !data.after || !data.set) { + if (!data || !data.after || !data.set) { return callback(new Error('[[error:invalid-data]]')); } var start = parseInt(data.after, 10), - end = start + 9; + stop = start + 9; - topics.getTopicsFromSet(data.set, socket.uid, start, end, callback); + topics.getTopicsFromSet(data.set, socket.uid, start, stop, callback); }; SocketTopics.loadTopics = function(socket, data, callback) { - if(!data || !data.set || !utils.isNumber(data.start) || !utils.isNumber(data.end)) { + if (!data || !data.set || !utils.isNumber(data.start) || !utils.isNumber(data.stop)) { return callback(new Error('[[error:invalid-data]]')); } - topics.getTopicsFromSet(data.set, socket.uid, data.start, data.end, callback); + topics.getTopicsFromSet(data.set, socket.uid, data.start, data.stop, callback); }; SocketTopics.getPageCount = function(socket, tid, callback) { @@ -544,14 +544,14 @@ SocketTopics.loadMoreTags = function(socket, data, callback) { } var start = parseInt(data.after, 10), - end = start + 99; + stop = start + 99; - topics.getTags(start, end, function(err, tags) { + topics.getTags(start, stop, function(err, tags) { if (err) { return callback(err); } - callback(null, {tags: tags, nextStart: end + 1}); + callback(null, {tags: tags, nextStart: stop + 1}); }); }; diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 807666ff18..5b4db66495 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -397,7 +397,7 @@ SocketUser.getUnreadChatCount = function(socket, data, callback) { }; SocketUser.loadMore = function(socket, data, callback) { - if(!data || !data.set || parseInt(data.after, 10) < 0) { + if (!data || !data.set || parseInt(data.after, 10) < 0) { return callback(new Error('[[error:invalid-data]]')); } @@ -406,28 +406,30 @@ SocketUser.loadMore = function(socket, data, callback) { } var start = parseInt(data.after, 10), - end = start + 19; + stop = start + 19; - user.getUsersFromSet(data.set, socket.uid, start, end, function(err, userData) { + async.parallel({ + isAdmin: function(next) { + user.isAdministrator(socket.uid, next); + }, + users: function(next) { + user.getUsersFromSet(data.set, socket.uid, start, stop, next); + } + }, function(err, results) { if (err) { return callback(err); } - user.isAdministrator(socket.uid, function (err, isAdministrator) { - if (err) { - return callback(err); - } - - if (!isAdministrator && data.set === 'users:online') { - userData = userData.filter(function(item) { - return item.status !== 'offline'; - }); - } - callback(null, { - users: userData, - nextStart: end + 1 + if (!results.isAdmin && data.set === 'users:online') { + results.users = results.users.filter(function(user) { + return user.status !== 'offline'; }); + } + + callback(null, { + users: results.users, + nextStart: stop + 1 }); }); }; diff --git a/src/topics.js b/src/topics.js index 0cc153e85e..f4a1918397 100644 --- a/src/topics.js +++ b/src/topics.js @@ -112,16 +112,16 @@ var async = require('async'), }); }; - Topics.getTopicsFromSet = function(set, uid, start, end, callback) { + Topics.getTopicsFromSet = function(set, uid, start, stop, callback) { async.waterfall([ function(next) { - db.getSortedSetRevRange(set, start, end, next); + db.getSortedSetRevRange(set, start, stop, next); }, function(tids, next) { Topics.getTopics(tids, uid, next); }, function(topics, next) { - next(null, {topics: topics, nextStart: end + 1}); + next(null, {topics: topics, nextStart: stop + 1}); } ], callback); }; @@ -209,14 +209,14 @@ var async = require('async'), }); }; - Topics.getTopicWithPosts = function(tid, set, uid, start, end, reverse, callback) { + Topics.getTopicWithPosts = function(tid, set, uid, start, stop, reverse, callback) { Topics.getTopicData(tid, function(err, topicData) { if (err || !topicData) { return callback(err || new Error('[[error:no-topic]]')); } async.parallel({ - posts: async.apply(getMainPostAndReplies, topicData, set, uid, start, end, reverse), + posts: async.apply(getMainPostAndReplies, topicData, set, uid, start, stop, reverse), category: async.apply(Topics.getCategoryData, tid), threadTools: async.apply(plugins.fireHook, 'filter:topic.thread_tools', {topic: topicData, uid: uid, tools: []}), tags: async.apply(Topics.getTopicTagsObjects, tid), @@ -244,10 +244,10 @@ var async = require('async'), }); }; - function getMainPostAndReplies(topic, set, uid, start, end, reverse, callback) { + function getMainPostAndReplies(topic, set, uid, start, stop, reverse, callback) { async.waterfall([ function(next) { - posts.getPidsFromSet(set, start, end, reverse, next); + posts.getPidsFromSet(set, start, stop, reverse, next); }, function(pids, next) { if ((!Array.isArray(pids) || !pids.length) && !topic.mainPid) { @@ -268,7 +268,7 @@ var async = require('async'), posts[0].index = 0; } - var indices = Topics.calculatePostIndices(start, end, topic.postcount, reverse); + var indices = Topics.calculatePostIndices(start, stop, topic.postcount, reverse); for (var i=1; i b; }); - + plugins.fireHook('filter:tags.search', {data: data, matches: matches}, function(err, data) { callback(err, data ? data.matches : []); }); diff --git a/src/user/admin.js b/src/user/admin.js index 4693fe539d..4d559fcb34 100644 --- a/src/user/admin.js +++ b/src/user/admin.js @@ -15,8 +15,8 @@ module.exports = function(User) { } }; - User.getIPs = function(uid, end, callback) { - db.getSortedSetRevRange('uid:' + uid + ':ip', 0, end, function(err, ips) { + User.getIPs = function(uid, stop, callback) { + db.getSortedSetRevRange('uid:' + uid + ':ip', 0, stop, function(err, ips) { if(err) { return callback(err); } diff --git a/src/user/follow.js b/src/user/follow.js index b7bda96903..fc776bcef8 100644 --- a/src/user/follow.js +++ b/src/user/follow.js @@ -53,20 +53,20 @@ module.exports = function(User) { }); } - User.getFollowing = function(uid, start, end, callback) { - getFollow(uid, 'following:' + uid, start, end, callback); + User.getFollowing = function(uid, start, stop, callback) { + getFollow(uid, 'following:' + uid, start, stop, callback); }; - User.getFollowers = function(uid, start, end, callback) { - getFollow(uid, 'followers:' + uid, start, end, callback); + User.getFollowers = function(uid, start, stop, callback) { + getFollow(uid, 'followers:' + uid, start, stop, callback); }; - function getFollow(uid, set, start, end, callback) { + function getFollow(uid, set, start, stop, callback) { if (!parseInt(uid, 10)) { return callback(null, []); } - db.getSortedSetRevRange(set, start, end, function(err, uids) { + db.getSortedSetRevRange(set, start, stop, function(err, uids) { if (err) { return callback(err); } diff --git a/src/user/search.js b/src/user/search.js index 7545a6d3f3..08b2ebefa3 100644 --- a/src/user/search.js +++ b/src/user/search.js @@ -59,14 +59,14 @@ module.exports = function(User) { User.paginate = function(page, data) { var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 20; var start = Math.max(0, page - 1) * resultsPerPage; - var end = start + resultsPerPage; + var stop = start + resultsPerPage; var pageCount = Math.ceil(data.length / resultsPerPage); var currentPage = Math.max(1, Math.ceil((start + 1) / resultsPerPage)); return { pagination: pagination.create(currentPage, pageCount), - data: data.slice(start, end) + data: data.slice(start, stop) }; };