mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
more refactors
This commit is contained in:
@@ -13,6 +13,7 @@ var async = require('async'),
|
|||||||
|
|
||||||
(function(Categories) {
|
(function(Categories) {
|
||||||
|
|
||||||
|
require('./categories/data')(Categories);
|
||||||
require('./categories/create')(Categories);
|
require('./categories/create')(Categories);
|
||||||
require('./categories/delete')(Categories);
|
require('./categories/delete')(Categories);
|
||||||
require('./categories/topics')(Categories);
|
require('./categories/topics')(Categories);
|
||||||
@@ -40,9 +41,6 @@ var async = require('async'),
|
|||||||
topics: function(next) {
|
topics: function(next) {
|
||||||
Categories.getCategoryTopics(data, next);
|
Categories.getCategoryTopics(data, next);
|
||||||
},
|
},
|
||||||
pageCount: function(next) {
|
|
||||||
Categories.getPageCount(data.cid, data.uid, next);
|
|
||||||
},
|
|
||||||
isIgnored: function(next) {
|
isIgnored: function(next) {
|
||||||
Categories.isIgnored([data.cid], data.uid, next);
|
Categories.isIgnored([data.cid], data.uid, next);
|
||||||
}
|
}
|
||||||
@@ -53,7 +51,6 @@ var async = require('async'),
|
|||||||
|
|
||||||
category.topics = results.topics.topics;
|
category.topics = results.topics.topics;
|
||||||
category.nextStart = results.topics.nextStart;
|
category.nextStart = results.topics.nextStart;
|
||||||
category.pageCount = results.pageCount;
|
|
||||||
category.isIgnored = results.isIgnored[0];
|
category.isIgnored = results.isIgnored[0];
|
||||||
|
|
||||||
plugins.fireHook('filter:category.get', {category: category, uid: data.uid}, function(err, data) {
|
plugins.fireHook('filter:category.get', {category: category, uid: data.uid}, function(err, data) {
|
||||||
@@ -123,108 +120,10 @@ var async = require('async'),
|
|||||||
return callback(err, []);
|
return callback(err, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], callback);
|
user.getUsersFields(uids, ['uid', 'username', 'userslug', 'picture'], callback);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Categories.getCategoryData = function(cid, callback) {
|
|
||||||
Categories.getCategoriesData([cid], function(err, categories) {
|
|
||||||
callback(err, categories ? categories[0] : null);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.getCategoriesData = function(cids, callback) {
|
|
||||||
if (!Array.isArray(cids) || !cids.length) {
|
|
||||||
return callback(null, []);
|
|
||||||
}
|
|
||||||
var keys = cids.map(function(cid) {
|
|
||||||
return 'category:' + cid;
|
|
||||||
});
|
|
||||||
|
|
||||||
db.getObjects(keys, function(err, categories) {
|
|
||||||
if (err || !Array.isArray(categories) || !categories.length) {
|
|
||||||
return callback(err, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
async.map(categories, modifyCategory, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
function modifyCategory(category, callback) {
|
|
||||||
if (!category) {
|
|
||||||
return callback(null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
category.name = validator.escape(category.name);
|
|
||||||
category.disabled = category.hasOwnProperty('disabled') ? parseInt(category.disabled, 10) === 1 : undefined;
|
|
||||||
category.icon = category.icon || 'hidden';
|
|
||||||
if (category.hasOwnProperty('post_count')) {
|
|
||||||
category.post_count = category.totalPostCount = category.post_count || 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (category.hasOwnProperty('topic_count')) {
|
|
||||||
category.topic_count = category.totalTopicCount = category.topic_count || 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (category.image) {
|
|
||||||
category.backgroundImage = category.image;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (category.description) {
|
|
||||||
plugins.fireHook('filter:parse.raw', category.description, function(err, parsedDescription) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
category.descriptionParsed = parsedDescription;
|
|
||||||
category.description = validator.escape(category.description);
|
|
||||||
callback(null, category);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
callback(null, category);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Categories.getCategoryField = function(cid, field, callback) {
|
|
||||||
db.getObjectField('category:' + cid, field, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.getMultipleCategoryFields = function(cids, fields, callback) {
|
|
||||||
if (!Array.isArray(cids) || !cids.length) {
|
|
||||||
return callback(null, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
var keys = cids.map(function(cid) {
|
|
||||||
return 'category:' + cid;
|
|
||||||
});
|
|
||||||
|
|
||||||
db.getObjectsFields(keys, fields, function(err, categories) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
async.map(categories, modifyCategory, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.getAllCategoryFields = function(fields, callback) {
|
|
||||||
async.waterfall([
|
|
||||||
async.apply(db.getSortedSetRange, 'categories:cid', 0, -1),
|
|
||||||
function(cids, next) {
|
|
||||||
Categories.getMultipleCategoryFields(cids, fields, next);
|
|
||||||
}
|
|
||||||
], callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.getCategoryFields = function(cid, fields, callback) {
|
|
||||||
db.getObjectFields('category:' + cid, fields, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.setCategoryField = function(cid, field, value, callback) {
|
|
||||||
db.setObjectField('category:' + cid, field, value, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.incrementCategoryFieldBy = function(cid, field, value, callback) {
|
|
||||||
db.incrObjectFieldBy('category:' + cid, field, value, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Categories.getCategories = function(cids, uid, callback) {
|
Categories.getCategories = function(cids, uid, callback) {
|
||||||
if (!Array.isArray(cids)) {
|
if (!Array.isArray(cids)) {
|
||||||
@@ -297,7 +196,7 @@ var async = require('async'),
|
|||||||
var parentCids;
|
var parentCids;
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
Categories.getMultipleCategoryFields(cids, ['parentCid'], next);
|
Categories.getCategoriesFields(cids, ['parentCid'], next);
|
||||||
},
|
},
|
||||||
function (_categoriesData, next) {
|
function (_categoriesData, next) {
|
||||||
categoriesData = _categoriesData;
|
categoriesData = _categoriesData;
|
||||||
@@ -396,7 +295,7 @@ var async = require('async'),
|
|||||||
category.parentCid = 0;
|
category.parentCid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (category.parentCid == parentCid){
|
if (parseInt(category.parentCid, 10) === parseInt(parentCid, 10)){
|
||||||
tree.push(category);
|
tree.push(category);
|
||||||
category.children = Categories.getTree(categories, category.cid);
|
category.children = Categories.getTree(categories, category.cid);
|
||||||
}
|
}
|
||||||
|
|||||||
116
src/categories/data.js
Normal file
116
src/categories/data.js
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var async = require('async');
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.getCategoriesData = function(cids, callback) {
|
||||||
|
if (!Array.isArray(cids) || !cids.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
var keys = cids.map(function(cid) {
|
||||||
|
return 'category:' + cid;
|
||||||
|
});
|
||||||
|
|
||||||
|
db.getObjects(keys, function(err, categories) {
|
||||||
|
if (err || !Array.isArray(categories) || !categories.length) {
|
||||||
|
return callback(err, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
async.map(categories, modifyCategory, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function modifyCategory(category, callback) {
|
||||||
|
if (!category) {
|
||||||
|
return callback(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
category.name = validator.escape(category.name);
|
||||||
|
category.disabled = category.hasOwnProperty('disabled') ? parseInt(category.disabled, 10) === 1 : undefined;
|
||||||
|
category.icon = category.icon || 'hidden';
|
||||||
|
if (category.hasOwnProperty('post_count')) {
|
||||||
|
category.post_count = category.totalPostCount = category.post_count || 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (category.hasOwnProperty('topic_count')) {
|
||||||
|
category.topic_count = category.totalTopicCount = category.topic_count || 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (category.image) {
|
||||||
|
category.backgroundImage = category.image;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (category.description) {
|
||||||
|
plugins.fireHook('filter:parse.raw', category.description, function(err, parsedDescription) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
category.descriptionParsed = parsedDescription;
|
||||||
|
category.description = validator.escape(category.description);
|
||||||
|
callback(null, category);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback(null, category);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Categories.getCategoryField = function(cid, field, callback) {
|
||||||
|
db.getObjectField('category:' + cid, field, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.getCategoriesFields = function(cids, fields, callback) {
|
||||||
|
if (!Array.isArray(cids) || !cids.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = cids.map(function(cid) {
|
||||||
|
return 'category:' + cid;
|
||||||
|
});
|
||||||
|
|
||||||
|
db.getObjectsFields(keys, fields, function(err, categories) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
async.map(categories, modifyCategory, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.getMultipleCategoryFields = function(cids, fields, callback) {
|
||||||
|
winston.warn('[deprecated] Categories.getMultipleCategoryFields is deprecated please use Categories.getCategoriesFields');
|
||||||
|
Categories.getCategoriesFields(cids, fields, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.getAllCategoryFields = function(fields, callback) {
|
||||||
|
async.waterfall([
|
||||||
|
async.apply(db.getSortedSetRange, 'categories:cid', 0, -1),
|
||||||
|
function(cids, next) {
|
||||||
|
Categories.getCategoriesFields(cids, fields, next);
|
||||||
|
}
|
||||||
|
], callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.getCategoryFields = function(cid, fields, callback) {
|
||||||
|
db.getObjectFields('category:' + cid, fields, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.setCategoryField = function(cid, field, value, callback) {
|
||||||
|
db.setObjectField('category:' + cid, field, value, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Categories.incrementCategoryFieldBy = function(cid, field, value, callback) {
|
||||||
|
db.incrObjectFieldBy('category:' + cid, field, value, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
@@ -19,7 +19,7 @@ homePageController.get = function(req, res, next) {
|
|||||||
privileges.categories.filterCids('find', cids, 0, next);
|
privileges.categories.filterCids('find', cids, 0, next);
|
||||||
},
|
},
|
||||||
function(cids, next) {
|
function(cids, next) {
|
||||||
categories.getMultipleCategoryFields(cids, ['name', 'slug'], next);
|
categories.getCategoriesFields(cids, ['name', 'slug'], next);
|
||||||
},
|
},
|
||||||
function(categoryData, next) {
|
function(categoryData, next) {
|
||||||
categoryData = categoryData.map(function(category) {
|
categoryData = categoryData.map(function(category) {
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ categoriesController.list = function(req, res, next) {
|
|||||||
categoriesController.get = function(req, res, callback) {
|
categoriesController.get = function(req, res, callback) {
|
||||||
var cid = req.params.category_id,
|
var cid = req.params.category_id,
|
||||||
page = parseInt(req.query.page, 10) || 1,
|
page = parseInt(req.query.page, 10) || 1,
|
||||||
|
pageCount = 1,
|
||||||
userPrivileges;
|
userPrivileges;
|
||||||
|
|
||||||
if ((req.params.topic_index && !utils.isNumber(req.params.topic_index)) || !utils.isNumber(cid)) {
|
if ((req.params.topic_index && !utils.isNumber(req.params.topic_index)) || !utils.isNumber(cid)) {
|
||||||
@@ -120,7 +121,7 @@ categoriesController.get = function(req, res, callback) {
|
|||||||
var settings = results.userSettings;
|
var settings = results.userSettings;
|
||||||
var topicIndex = utils.isNumber(req.params.topic_index) ? parseInt(req.params.topic_index, 10) - 1 : 0;
|
var topicIndex = utils.isNumber(req.params.topic_index) ? parseInt(req.params.topic_index, 10) - 1 : 0;
|
||||||
var topicCount = parseInt(results.categoryData.topic_count, 10);
|
var topicCount = parseInt(results.categoryData.topic_count, 10);
|
||||||
var pageCount = Math.max(1, Math.ceil(topicCount / settings.topicsPerPage));
|
pageCount = Math.max(1, Math.ceil(topicCount / settings.topicsPerPage));
|
||||||
|
|
||||||
if (topicIndex < 0 || topicIndex > Math.max(topicCount - 1, 0)) {
|
if (topicIndex < 0 || topicIndex > Math.max(topicCount - 1, 0)) {
|
||||||
return helpers.redirect(res, '/category/' + cid + '/' + req.params.slug + (topicIndex > topicCount ? '/' + topicCount : ''));
|
return helpers.redirect(res, '/category/' + cid + '/' + req.params.slug + (topicIndex > topicCount ? '/' + topicCount : ''));
|
||||||
@@ -249,6 +250,7 @@ categoriesController.get = function(req, res, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.currentPage = page;
|
data.currentPage = page;
|
||||||
|
data.pageCount = pageCount;
|
||||||
data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
||||||
data.rssFeedUrl = nconf.get('relative_path') + '/category/' + data.cid + '.rss';
|
data.rssFeedUrl = nconf.get('relative_path') + '/category/' + data.cid + '.rss';
|
||||||
data.pagination = pagination.create(data.currentPage, data.pageCount);
|
data.pagination = pagination.create(data.currentPage, data.pageCount);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ unreadController.get = function(req, res, next) {
|
|||||||
privileges.categories.filterCids('read', results.watchedCategories, req.uid, next);
|
privileges.categories.filterCids('read', results.watchedCategories, req.uid, next);
|
||||||
},
|
},
|
||||||
function(cids, next) {
|
function(cids, next) {
|
||||||
categories.getMultipleCategoryFields(cids, ['cid', 'name', 'slug', 'icon', 'link'], next);
|
categories.getCategoriesFields(cids, ['cid', 'name', 'slug', 'icon', 'link'], next);
|
||||||
},
|
},
|
||||||
function(categories, next) {
|
function(categories, next) {
|
||||||
categories = categories.filter(function(category) {
|
categories = categories.filter(function(category) {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ var async = require('async'),
|
|||||||
user.isAdministrator(uids, next);
|
user.isAdministrator(uids, next);
|
||||||
},
|
},
|
||||||
userData: function(next) {
|
userData: function(next) {
|
||||||
user.getMultipleUserFields(uids, ['username', 'userslug', 'picture'], next);
|
user.getUsersFields(uids, ['username', 'userslug', 'picture'], next);
|
||||||
}
|
}
|
||||||
}, function(err, results) {
|
}, function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ module.exports = function(Groups) {
|
|||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'picture', 'userslug'], next);
|
user.getUsersFields(uids, ['uid', 'username', 'picture', 'userslug'], next);
|
||||||
});
|
});
|
||||||
}, callback);
|
}, callback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ module.exports = function(Groups) {
|
|||||||
Groups.getMembers(data.groupName, 0, -1, next);
|
Groups.getMembers(data.groupName, 0, -1, next);
|
||||||
},
|
},
|
||||||
function(members, next) {
|
function(members, next) {
|
||||||
user.getMultipleUserFields(members, ['uid'].concat([searchBy]), next);
|
user.getUsersFields(members, ['uid'].concat([searchBy]), next);
|
||||||
},
|
},
|
||||||
function(users, next) {
|
function(users, next) {
|
||||||
var uids = [];
|
var uids = [];
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ var db = require('./database'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
function getMessages(mids, fromuid, touid, isNew, callback) {
|
function getMessages(mids, fromuid, touid, isNew, callback) {
|
||||||
user.getMultipleUserFields([fromuid, touid], ['uid', 'username', 'userslug', 'picture', 'status'], function(err, userData) {
|
user.getUsersFields([fromuid, touid], ['uid', 'username', 'userslug', 'picture', 'status'], function(err, userData) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -263,7 +263,7 @@ var db = require('./database'),
|
|||||||
db.isSortedSetMembers('uid:' + uid + ':chats:unread', uids, next);
|
db.isSortedSetMembers('uid:' + uid + ':chats:unread', uids, next);
|
||||||
},
|
},
|
||||||
users: function(next) {
|
users: function(next) {
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'picture', 'status'] , next);
|
user.getUsersFields(uids, ['uid', 'username', 'picture', 'status'] , next);
|
||||||
},
|
},
|
||||||
teasers: function(next) {
|
teasers: function(next) {
|
||||||
async.map(uids, function(fromuid, next) {
|
async.map(uids, function(fromuid, next) {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ module.exports = function(Posts) {
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
users: function(next) {
|
users: function(next) {
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], next);
|
user.getUsersFields(uids, ['uid', 'username', 'userslug', 'picture'], next);
|
||||||
},
|
},
|
||||||
topicsAndCategories: function(next) {
|
topicsAndCategories: function(next) {
|
||||||
getTopicAndCategories(topicKeys, next);
|
getTopicAndCategories(topicKeys, next);
|
||||||
@@ -124,7 +124,7 @@ module.exports = function(Posts) {
|
|||||||
return topic && array.indexOf(topic) === index;
|
return topic && array.indexOf(topic) === index;
|
||||||
});
|
});
|
||||||
|
|
||||||
categories.getMultipleCategoryFields(cids, ['cid', 'name', 'icon', 'slug', 'parentCid', 'bgColor', 'color'], function(err, categories) {
|
categories.getCategoriesFields(cids, ['cid', 'name', 'icon', 'slug', 'parentCid', 'bgColor', 'color'], function(err, categories) {
|
||||||
callback(err, {topics: topics, categories: categories});
|
callback(err, {topics: topics, categories: categories});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ module.exports = function(Posts) {
|
|||||||
user.getMultipleUserSettings(uids, next);
|
user.getMultipleUserSettings(uids, next);
|
||||||
},
|
},
|
||||||
userData: function(next) {
|
userData: function(next) {
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status'], next);
|
user.getUsersFields(uids, ['uid', 'username', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status'], next);
|
||||||
},
|
},
|
||||||
online: function(next) {
|
online: function(next) {
|
||||||
require('../socket.io').isUsersOnline(uids, next);
|
require('../socket.io').isUsersOnline(uids, next);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ module.exports = function(privileges) {
|
|||||||
|
|
||||||
var members = _.unique(_.flatten(memberSets));
|
var members = _.unique(_.flatten(memberSets));
|
||||||
|
|
||||||
user.getMultipleUserFields(members, ['picture', 'username'], function(err, memberData) {
|
user.getUsersFields(members, ['picture', 'username'], function(err, memberData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
@@ -244,7 +244,7 @@ module.exports = function(privileges) {
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
categories: function(next) {
|
categories: function(next) {
|
||||||
categories.getMultipleCategoryFields(cids, ['disabled'], next);
|
categories.getCategoriesFields(cids, ['disabled'], next);
|
||||||
},
|
},
|
||||||
allowedTo: function(next) {
|
allowedTo: function(next) {
|
||||||
helpers.isUserAllowedTo(privilege, uid, cids, next);
|
helpers.isUserAllowedTo(privilege, uid, cids, next);
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ module.exports = function(privileges) {
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
categories: function(next) {
|
categories: function(next) {
|
||||||
categories.getMultipleCategoryFields(cids, ['disabled'], next);
|
categories.getCategoriesFields(cids, ['disabled'], next);
|
||||||
},
|
},
|
||||||
allowedTo: function(next) {
|
allowedTo: function(next) {
|
||||||
helpers.isUserAllowedTo(privilege, uid, cids, next);
|
helpers.isUserAllowedTo(privilege, uid, cids, next);
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ module.exports = function(privileges) {
|
|||||||
|
|
||||||
function isModeratorOfCategories(cids, uid, callback) {
|
function isModeratorOfCategories(cids, uid, callback) {
|
||||||
if (!parseInt(uid, 10)) {
|
if (!parseInt(uid, 10)) {
|
||||||
return filterIsModerator(null, cids.map(function() {return false;}));
|
return filterIsModerator(cids, uid, cids.map(function() {return false;}), callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
var uniqueCids = cids.filter(function(cid, index, array) {
|
var uniqueCids = cids.filter(function(cid, index, array) {
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ function getMatchedPosts(pids, data, callback) {
|
|||||||
var uids = posts.map(function(post) {
|
var uids = posts.map(function(post) {
|
||||||
return post.uid;
|
return post.uid;
|
||||||
});
|
});
|
||||||
user.getMultipleUserFields(uids, ['username'], next);
|
user.getUsersFields(uids, ['username'], next);
|
||||||
} else {
|
} else {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ User.makeAdmins = function(socket, uids, callback) {
|
|||||||
return callback(new Error('[[error:invalid-data]]'));
|
return callback(new Error('[[error:invalid-data]]'));
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getMultipleUserFields(uids, ['banned'], function(err, userData) {
|
user.getUsersFields(uids, ['banned'], function(err, userData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -133,7 +133,7 @@ User.sendValidationEmail = function(socket, uids, callback) {
|
|||||||
return callback(new Error('[[error:email-confirmations-are-disabled]]'));
|
return callback(new Error('[[error:email-confirmations-are-disabled]]'));
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getMultipleUserFields(uids, ['uid', 'email'], function(err, usersData) {
|
user.getUsersFields(uids, ['uid', 'email'], function(err, usersData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -216,7 +216,7 @@ User.search = function(socket, data, callback) {
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
users: function(next) {
|
users: function(next) {
|
||||||
user.getMultipleUserFields(uids, ['email'], next);
|
user.getUsersFields(uids, ['email'], next);
|
||||||
},
|
},
|
||||||
flagCounts: function(next) {
|
flagCounts: function(next) {
|
||||||
var sets = uids.map(function(uid) {
|
var sets = uids.map(function(uid) {
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ SocketCategories.getTopicCount = function(socket, cid, callback) {
|
|||||||
|
|
||||||
SocketCategories.getUsersInCategory = function(socket, cid, callback) {
|
SocketCategories.getUsersInCategory = function(socket, cid, callback) {
|
||||||
var uids = websockets.getUidsInRoom('category_' + cid);
|
var uids = websockets.getUidsInRoom('category_' + cid);
|
||||||
user.getMultipleUserFields(uids, ['uid', 'userslug', 'username', 'picture'], callback);
|
user.getUsersFields(uids, ['uid', 'userslug', 'username', 'picture'], callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
SocketCategories.getCategoriesByPrivilege = function(socket, privilege, callback) {
|
SocketCategories.getCategoriesByPrivilege = function(socket, privilege, callback) {
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ Sockets.getUsersInRoom = function (uid, roomName, start, stop, callback) {
|
|||||||
if (!uids.length) {
|
if (!uids.length) {
|
||||||
return callback(null, {users: [], total: 0 , room: roomName});
|
return callback(null, {users: [], total: 0 , room: roomName});
|
||||||
}
|
}
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status'], function(err, users) {
|
user.getUsersFields(uids, ['uid', 'username', 'userslug', 'picture', 'status'], function(err, users) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,13 +37,13 @@ module.exports = function(SocketPosts) {
|
|||||||
function (results, next) {
|
function (results, next) {
|
||||||
async.parallel({
|
async.parallel({
|
||||||
upvoters: function(next) {
|
upvoters: function(next) {
|
||||||
user.getMultipleUserFields(results.upvoteUids, ['username', 'userslug', 'picture'], next);
|
user.getUsersFields(results.upvoteUids, ['username', 'userslug', 'picture'], next);
|
||||||
},
|
},
|
||||||
upvoteCount: function(next) {
|
upvoteCount: function(next) {
|
||||||
next(null, results.upvoteUids.length);
|
next(null, results.upvoteUids.length);
|
||||||
},
|
},
|
||||||
downvoters: function(next) {
|
downvoters: function(next) {
|
||||||
user.getMultipleUserFields(results.downvoteUids, ['username', 'userslug', 'picture'], next);
|
user.getUsersFields(results.downvoteUids, ['username', 'userslug', 'picture'], next);
|
||||||
},
|
},
|
||||||
downvoteCount: function(next) {
|
downvoteCount: function(next) {
|
||||||
next(null, results.downvoteUids.length);
|
next(null, results.downvoteUids.length);
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ var async = require('async'),
|
|||||||
|
|
||||||
(function(Topics) {
|
(function(Topics) {
|
||||||
|
|
||||||
|
|
||||||
|
require('./topics/data')(Topics);
|
||||||
require('./topics/create')(Topics);
|
require('./topics/create')(Topics);
|
||||||
require('./topics/delete')(Topics);
|
require('./topics/delete')(Topics);
|
||||||
require('./topics/unread')(Topics);
|
require('./topics/unread')(Topics);
|
||||||
@@ -33,40 +35,6 @@ var async = require('async'),
|
|||||||
db.isSortedSetMember('topics:tid', tid, callback);
|
db.isSortedSetMember('topics:tid', tid, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Topics.getTopicData = function(tid, callback) {
|
|
||||||
db.getObject('topic:' + tid, function(err, topic) {
|
|
||||||
if (err || !topic) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
modifyTopic(topic, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Topics.getTopicsData = function(tids, callback) {
|
|
||||||
var keys = [];
|
|
||||||
|
|
||||||
for (var i=0; i<tids.length; ++i) {
|
|
||||||
keys.push('topic:' + tids[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
db.getObjects(keys, function(err, topics) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
async.map(topics, modifyTopic, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
function modifyTopic(topic, callback) {
|
|
||||||
if (!topic) {
|
|
||||||
return callback(null, topic);
|
|
||||||
}
|
|
||||||
topic.title = validator.escape(topic.title);
|
|
||||||
topic.relativeTime = utils.toISOString(topic.timestamp);
|
|
||||||
topic.lastposttimeISO = utils.toISOString(topic.lastposttime);
|
|
||||||
callback(null, topic);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topics.getPageCount = function(tid, uid, callback) {
|
Topics.getPageCount = function(tid, uid, callback) {
|
||||||
Topics.getTopicField(tid, 'postcount', function(err, postCount) {
|
Topics.getTopicField(tid, 'postcount', function(err, postCount) {
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -105,16 +73,6 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Topics.getCategoryData = function(tid, callback) {
|
|
||||||
Topics.getTopicField(tid, 'cid', function(err, cid) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
categories.getCategoryData(cid, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Topics.getTopicsFromSet = function(set, uid, start, stop, callback) {
|
Topics.getTopicsFromSet = function(set, uid, start, stop, callback) {
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function(next) {
|
function(next) {
|
||||||
@@ -166,10 +124,10 @@ var async = require('async'),
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
users: function(next) {
|
users: function(next) {
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], next);
|
user.getUsersFields(uids, ['uid', 'username', 'userslug', 'picture'], next);
|
||||||
},
|
},
|
||||||
categories: function(next) {
|
categories: function(next) {
|
||||||
categories.getMultipleCategoryFields(cids, ['cid', 'name', 'slug', 'icon', 'bgColor', 'color', 'disabled'], next);
|
categories.getCategoriesFields(cids, ['cid', 'name', 'slug', 'icon', 'bgColor', 'color', 'disabled'], next);
|
||||||
},
|
},
|
||||||
hasRead: function(next) {
|
hasRead: function(next) {
|
||||||
Topics.hasReadTopics(tids, uid, next);
|
Topics.hasReadTopics(tids, uid, next);
|
||||||
@@ -342,28 +300,6 @@ var async = require('async'),
|
|||||||
db.sortedSetAdd('tid:' + tid + ':bookmarks', index, uid, callback);
|
db.sortedSetAdd('tid:' + tid + ':bookmarks', index, uid, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Topics.getTopicField = function(tid, field, callback) {
|
|
||||||
db.getObjectField('topic:' + tid, field, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Topics.getTopicFields = function(tid, fields, callback) {
|
|
||||||
db.getObjectFields('topic:' + tid, fields, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Topics.getTopicsFields = function(tids, fields, callback) {
|
|
||||||
if (!Array.isArray(tids) || !tids.length) {
|
|
||||||
return callback(null, []);
|
|
||||||
}
|
|
||||||
var keys = tids.map(function(tid) {
|
|
||||||
return 'topic:' + tid;
|
|
||||||
});
|
|
||||||
db.getObjectsFields(keys, fields, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Topics.setTopicField = function(tid, field, value, callback) {
|
|
||||||
db.setObjectField('topic:' + tid, field, value, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Topics.isLocked = function(tid, callback) {
|
Topics.isLocked = function(tid, callback) {
|
||||||
Topics.getTopicField(tid, 'locked', function(err, locked) {
|
Topics.getTopicField(tid, 'locked', function(err, locked) {
|
||||||
callback(err, parseInt(locked, 10) === 1);
|
callback(err, parseInt(locked, 10) === 1);
|
||||||
|
|||||||
78
src/topics/data.js
Normal file
78
src/topics/data.js
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var async = require('async');
|
||||||
|
var validator = require('validator');
|
||||||
|
|
||||||
|
var db = require('../database');
|
||||||
|
var categories = require('../categories');
|
||||||
|
var utils = require('../../public/src/utils');
|
||||||
|
|
||||||
|
module.exports = function(Topics) {
|
||||||
|
|
||||||
|
Topics.getTopicField = function(tid, field, callback) {
|
||||||
|
db.getObjectField('topic:' + tid, field, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Topics.getTopicFields = function(tid, fields, callback) {
|
||||||
|
db.getObjectFields('topic:' + tid, fields, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Topics.getTopicsFields = function(tids, fields, callback) {
|
||||||
|
if (!Array.isArray(tids) || !tids.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
var keys = tids.map(function(tid) {
|
||||||
|
return 'topic:' + tid;
|
||||||
|
});
|
||||||
|
db.getObjectsFields(keys, fields, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Topics.getTopicData = function(tid, callback) {
|
||||||
|
db.getObject('topic:' + tid, function(err, topic) {
|
||||||
|
if (err || !topic) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
modifyTopic(topic, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Topics.getTopicsData = function(tids, callback) {
|
||||||
|
var keys = [];
|
||||||
|
|
||||||
|
for (var i=0; i<tids.length; ++i) {
|
||||||
|
keys.push('topic:' + tids[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
db.getObjects(keys, function(err, topics) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
async.map(topics, modifyTopic, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function modifyTopic(topic, callback) {
|
||||||
|
if (!topic) {
|
||||||
|
return callback(null, topic);
|
||||||
|
}
|
||||||
|
topic.title = validator.escape(topic.title);
|
||||||
|
topic.relativeTime = utils.toISOString(topic.timestamp);
|
||||||
|
topic.lastposttimeISO = utils.toISOString(topic.lastposttime);
|
||||||
|
callback(null, topic);
|
||||||
|
}
|
||||||
|
|
||||||
|
Topics.getCategoryData = function(tid, callback) {
|
||||||
|
Topics.getTopicField(tid, 'cid', function(err, cid) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
categories.getCategoryData(cid, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Topics.setTopicField = function(tid, field, value, callback) {
|
||||||
|
db.setObjectField('topic:' + tid, field, value, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
@@ -99,7 +99,7 @@ module.exports = function(Topics) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getMultipleUserFields(editors, ['uid', 'username', 'userslug'], function(err, editors) {
|
user.getUsersFields(editors, ['uid', 'username', 'userslug'], function(err, editors) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ module.exports = function(Topics) {
|
|||||||
return array.indexOf(uid) === index;
|
return array.indexOf(uid) === index;
|
||||||
});
|
});
|
||||||
|
|
||||||
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], next);
|
user.getUsersFields(uids, ['uid', 'username', 'userslug', 'picture'], next);
|
||||||
},
|
},
|
||||||
function(usersData, next) {
|
function(usersData, next) {
|
||||||
var users = {};
|
var users = {};
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
async.parallel({
|
async.parallel({
|
||||||
userData: function(next) {
|
userData: function(next) {
|
||||||
User.getMultipleUserFields(uids, data.fields, next);
|
User.getUsersFields(uids, data.fields, next);
|
||||||
},
|
},
|
||||||
isAdmin: function(next) {
|
isAdmin: function(next) {
|
||||||
User.isAdministrator(uids, next);
|
User.isAdministrator(uids, next);
|
||||||
@@ -193,7 +193,7 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.getUsernamesByUids = function(uids, callback) {
|
User.getUsernamesByUids = function(uids, callback) {
|
||||||
User.getMultipleUserFields(uids, ['username'], function(err, users) {
|
User.getUsersFields(uids, ['username'], function(err, users) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ module.exports = function(User) {
|
|||||||
var uids = users.map(function(user) {
|
var uids = users.map(function(user) {
|
||||||
return user.score;
|
return user.score;
|
||||||
});
|
});
|
||||||
User.getMultipleUserFields(uids, ['uid', 'email', 'username'], next);
|
User.getUsersFields(uids, ['uid', 'email', 'username'], next);
|
||||||
},
|
},
|
||||||
function(usersData, next) {
|
function(usersData, next) {
|
||||||
usersData.forEach(function(user, index) {
|
usersData.forEach(function(user, index) {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ module.exports = function(User) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.getUserFields = function(uid, fields, callback) {
|
User.getUserFields = function(uid, fields, callback) {
|
||||||
User.getMultipleUserFields([uid], fields, function(err, users) {
|
User.getUsersFields([uid], fields, function(err, users) {
|
||||||
callback(err, users ? users[0] : null);
|
callback(err, users ? users[0] : null);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ var async = require('async'),
|
|||||||
Digest.send = function(data, callback) {
|
Digest.send = function(data, callback) {
|
||||||
var now = new Date();
|
var now = new Date();
|
||||||
|
|
||||||
user.getMultipleUserFields(data.subscribers, ['uid', 'username', 'userslug', 'lastonline'], function(err, users) {
|
user.getUsersFields(data.subscribers, ['uid', 'username', 'userslug', 'lastonline'], function(err, users) {
|
||||||
if (err) {
|
if (err) {
|
||||||
winston.error('[user/jobs] Could not send digests (' + data.interval + '): ' + err.message);
|
winston.error('[user/jobs] Could not send digests (' + data.interval + '): ' + err.message);
|
||||||
return callback(err);
|
return callback(err);
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ module.exports = function(User) {
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
userData: function(next) {
|
userData: function(next) {
|
||||||
User.getMultipleUserFields(uids, fields, next);
|
User.getUsersFields(uids, fields, next);
|
||||||
},
|
},
|
||||||
isOnline: function(next) {
|
isOnline: function(next) {
|
||||||
if (data.onlineOnly) {
|
if (data.onlineOnly) {
|
||||||
|
|||||||
Reference in New Issue
Block a user