diff --git a/package.json b/package.json index bd436082f9..526d901336 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "nodebb-plugin-composer-default": "1.0.20", "nodebb-plugin-dbsearch": "0.2.17", "nodebb-plugin-emoji-extended": "0.4.15", - "nodebb-plugin-markdown": "4.0.6", + "nodebb-plugin-markdown": "4.0.7", "nodebb-plugin-mentions": "1.0.8", "nodebb-plugin-soundpack-default": "0.1.4", "nodebb-plugin-spam-be-gone": "0.4.2", diff --git a/src/categories/data.js b/src/categories/data.js index cccacc8a68..5cfdb091b2 100644 --- a/src/categories/data.js +++ b/src/categories/data.js @@ -5,13 +5,17 @@ var validator = require('validator'); var winston = require('winston'); var db = require('../database'); -var plugins = require('../plugins'); module.exports = function(Categories) { Categories.getCategoryData = function(cid, callback) { - Categories.getCategoriesData([cid], function(err, categories) { - callback(err, categories ? categories[0] : null); + db.getObject('category:' + cid, function(err, category) { + if (err) { + return callback(err); + } + + modifyCategory(category); + callback(null, category); }); }; @@ -28,13 +32,14 @@ module.exports = function(Categories) { return callback(err, []); } - async.map(categories, modifyCategory, callback); + categories.forEach(modifyCategory); + callback(null, categories); }); }; - function modifyCategory(category, callback) { + function modifyCategory(category) { if (!category) { - return callback(null, null); + return; } category.name = validator.escape(category.name); @@ -56,8 +61,6 @@ module.exports = function(Categories) { category.description = validator.escape(category.description); category.descriptionParsed = category.descriptionParsed || category.description; } - - callback(null, category); } Categories.getCategoryField = function(cid, field, callback) { @@ -77,7 +80,9 @@ module.exports = function(Categories) { if (err) { return callback(err); } - async.map(categories, modifyCategory, callback); + + categories.forEach(modifyCategory); + callback(null, categories); }); }; diff --git a/src/controllers/topics.js b/src/controllers/topics.js index af62540ff6..6dbbb79ec5 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -72,9 +72,7 @@ topicsController.get = function(req, res, callback) { reverse = false; // `sort` qs has priority over user setting - if (sort === 'oldest_to_newest') { - reverse = false; - } else if (sort === 'newest_to_oldest') { + if (sort === 'newest_to_oldest') { reverse = true; } else if (sort === 'most_votes') { reverse = true; diff --git a/src/topics/tags.js b/src/topics/tags.js index e971f1b237..bde9beff8f 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -24,23 +24,23 @@ module.exports = function(Topics) { }, function (data, next) { tags = data.tags.slice(0, meta.config.maximumTagsPerTopic || 5); + tags = tags.map(Topics.cleanUpTag).filter(function(tag) { + return tag && tag.length >= (meta.config.minimumTagLength || 3); + }); - async.each(tags, function(tag, next) { - tag = Topics.cleanUpTag(tag); - if (tag.length < (meta.config.minimumTagLength || 3)) { - return next(); - } + var keys = tags.map(function(tag) { + return 'tag:' + tag + ':topics'; + }); - async.parallel([ - async.apply(db.setAdd, 'topic:' + tid + ':tags', tag), - async.apply(db.sortedSetAdd, 'tag:' + tag + ':topics', timestamp, tid) - ], function(err) { - if (err) { - return next(err); - } - updateTagCount(tag, next); - }); - }, next); + async.parallel([ + async.apply(db.setAdd, 'topic:' + tid + ':tags', tags), + async.apply(db.sortedSetsAdd, keys, timestamp, tid) + ], function(err) { + if (err) { + return next(err); + } + async.each(tags, updateTagCount, next); + }); } ], callback); }; @@ -66,9 +66,10 @@ module.exports = function(Topics) { function updateTagCount(tag, callback) { callback = callback || function() {}; Topics.getTagTopicCount(tag, function(err, count) { - if (err || !count) { + if (err) { return callback(err); } + count = count || 0; db.sortedSetAdd('tags:topic:count', count, tag, callback); });