mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 03:55:55 +01:00
closes #3762
This commit is contained in:
@@ -273,11 +273,13 @@ define('forum/category', [
|
|||||||
}
|
}
|
||||||
|
|
||||||
$(window).trigger('action:categories.loading');
|
$(window).trigger('action:categories.loading');
|
||||||
|
var params = utils.params();
|
||||||
infinitescroll.loadMore('categories.loadMore', {
|
infinitescroll.loadMore('categories.loadMore', {
|
||||||
cid: ajaxify.data.cid,
|
cid: ajaxify.data.cid,
|
||||||
after: after,
|
after: after,
|
||||||
direction: direction,
|
direction: direction,
|
||||||
author: utils.params().author,
|
author: params.author,
|
||||||
|
tag: params.tag,
|
||||||
categoryTopicSort: config.categoryTopicSort
|
categoryTopicSort: config.categoryTopicSort
|
||||||
}, function (data, done) {
|
}, function (data, done) {
|
||||||
if (data.topics && data.topics.length) {
|
if (data.topics && data.topics.length) {
|
||||||
|
|||||||
@@ -35,14 +35,18 @@ var privileges = require('./privileges');
|
|||||||
return next(new Error('[[error:invalid-cid]]'));
|
return next(new Error('[[error:invalid-cid]]'));
|
||||||
}
|
}
|
||||||
category = categories[0];
|
category = categories[0];
|
||||||
if (parseInt(data.uid, 10)) {
|
|
||||||
Categories.markAsRead([data.cid], data.uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
topics: function(next) {
|
topics: function(next) {
|
||||||
Categories.getCategoryTopics(data, next);
|
Categories.getCategoryTopics(data, next);
|
||||||
},
|
},
|
||||||
|
topicCount: function(next) {
|
||||||
|
if (Array.isArray(data.set)) {
|
||||||
|
db.sortedSetIntersectCard(data.set, next);
|
||||||
|
} else {
|
||||||
|
next(null, category.topic_count);
|
||||||
|
}
|
||||||
|
},
|
||||||
isIgnored: function(next) {
|
isIgnored: function(next) {
|
||||||
Categories.isIgnored([data.cid], data.uid, next);
|
Categories.isIgnored([data.cid], data.uid, next);
|
||||||
}
|
}
|
||||||
@@ -52,6 +56,7 @@ var privileges = require('./privileges');
|
|||||||
category.topics = results.topics.topics;
|
category.topics = results.topics.topics;
|
||||||
category.nextStart = results.topics.nextStart;
|
category.nextStart = results.topics.nextStart;
|
||||||
category.isIgnored = results.isIgnored[0];
|
category.isIgnored = results.isIgnored[0];
|
||||||
|
category.topic_count = results.topicCount;
|
||||||
|
|
||||||
plugins.fireHook('filter:category.get', {category: category, uid: data.uid}, next);
|
plugins.fireHook('filter:category.get', {category: category, uid: data.uid}, next);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -53,16 +53,16 @@ module.exports = function(Categories) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Categories.getTopicIds = function(set, reverse, start, stop, callback) {
|
Categories.getTopicIds = function(set, reverse, start, stop, callback) {
|
||||||
if (reverse) {
|
if (Array.isArray(set)) {
|
||||||
db.getSortedSetRevRange(set, start, stop, callback);
|
db[reverse ? 'getSortedSetRevIntersect' : 'getSortedSetIntersect']({sets: set, start: start, stop: stop}, callback);
|
||||||
} else {
|
} else {
|
||||||
db.getSortedSetRange(set, start, stop, callback);
|
db[reverse ? 'getSortedSetRevRange' : 'getSortedSetRange'](set, start, stop, callback);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Categories.getTopicIndex = function(tid, callback) {
|
Categories.getTopicIndex = function(tid, callback) {
|
||||||
topics.getTopicField(tid, 'cid', function(err, cid) {
|
topics.getTopicField(tid, 'cid', function(err, cid) {
|
||||||
if(err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ categoryController.get = function(req, res, callback) {
|
|||||||
var currentPage = parseInt(req.query.page, 10) || 1;
|
var currentPage = parseInt(req.query.page, 10) || 1;
|
||||||
var pageCount = 1;
|
var pageCount = 1;
|
||||||
var userPrivileges;
|
var userPrivileges;
|
||||||
|
var settings;
|
||||||
|
|
||||||
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)) {
|
||||||
return callback();
|
return callback();
|
||||||
@@ -54,7 +55,7 @@ categoryController.get = function(req, res, callback) {
|
|||||||
return helpers.redirect(res, '/category/' + results.categoryData.slug);
|
return helpers.redirect(res, '/category/' + results.categoryData.slug);
|
||||||
}
|
}
|
||||||
|
|
||||||
var settings = results.userSettings;
|
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);
|
||||||
pageCount = Math.max(1, Math.ceil(topicCount / settings.topicsPerPage));
|
pageCount = Math.max(1, Math.ceil(topicCount / settings.topicsPerPage));
|
||||||
@@ -89,7 +90,7 @@ categoryController.get = function(req, res, callback) {
|
|||||||
var start = (currentPage - 1) * settings.topicsPerPage + topicIndex;
|
var start = (currentPage - 1) * settings.topicsPerPage + topicIndex;
|
||||||
var stop = start + settings.topicsPerPage - 1;
|
var stop = start + settings.topicsPerPage - 1;
|
||||||
|
|
||||||
next(null, {
|
var payload = {
|
||||||
cid: cid,
|
cid: cid,
|
||||||
set: set,
|
set: set,
|
||||||
reverse: reverse,
|
reverse: reverse,
|
||||||
@@ -97,19 +98,24 @@ categoryController.get = function(req, res, callback) {
|
|||||||
stop: stop,
|
stop: stop,
|
||||||
uid: req.uid,
|
uid: req.uid,
|
||||||
settings: settings
|
settings: settings
|
||||||
});
|
};
|
||||||
},
|
|
||||||
function (payload, next) {
|
async.waterfall([
|
||||||
user.getUidByUserslug(req.query.author, function(err, uid) {
|
function(next) {
|
||||||
payload.targetUid = uid;
|
user.getUidByUserslug(req.query.author, next);
|
||||||
if (uid) {
|
},
|
||||||
payload.set = 'cid:' + cid + ':uid:' + uid + ':tids';
|
function(uid, next) {
|
||||||
|
payload.targetUid = uid;
|
||||||
|
if (uid) {
|
||||||
|
payload.set = 'cid:' + cid + ':uid:' + uid + ':tids';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.query.tag) {
|
||||||
|
payload.set = [payload.set, 'tag:' + req.query.tag + ':topics'];
|
||||||
|
}
|
||||||
|
categories.getCategoryById(payload, next);
|
||||||
}
|
}
|
||||||
next(err, payload);
|
], next);
|
||||||
});
|
|
||||||
},
|
|
||||||
function (payload, next) {
|
|
||||||
categories.getCategoryById(payload, next);
|
|
||||||
},
|
},
|
||||||
function (categoryData, next) {
|
function (categoryData, next) {
|
||||||
|
|
||||||
@@ -190,9 +196,14 @@ categoryController.get = function(req, res, callback) {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (parseInt(req.uid, 10)) {
|
||||||
|
categories.markAsRead([cid], req.uid);
|
||||||
|
}
|
||||||
|
|
||||||
categoryData['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
categoryData['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
||||||
categoryData.rssFeedUrl = nconf.get('relative_path') + '/category/' + categoryData.cid + '.rss';
|
categoryData.rssFeedUrl = nconf.get('relative_path') + '/category/' + categoryData.cid + '.rss';
|
||||||
categoryData.title = categoryData.name;
|
categoryData.title = categoryData.name;
|
||||||
|
pageCount = Math.max(1, Math.ceil(categoryData.topic_count / settings.topicsPerPage));
|
||||||
categoryData.pagination = pagination.create(currentPage, pageCount, req.query);
|
categoryData.pagination = pagination.create(currentPage, pageCount, req.query);
|
||||||
categoryData.pagination.rel.forEach(function(rel) {
|
categoryData.pagination.rel.forEach(function(rel) {
|
||||||
rel.href = nconf.get('url') + '/category/' + categoryData.slug + rel.href;
|
rel.href = nconf.get('url') + '/category/' + categoryData.slug + rel.href;
|
||||||
|
|||||||
@@ -105,6 +105,10 @@ SocketCategories.loadMore = function(socket, data, callback) {
|
|||||||
set = 'cid:' + data.cid + ':uid:' + results.targetUid + ':tids';
|
set = 'cid:' + data.cid + ':uid:' + results.targetUid + ':tids';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.tag) {
|
||||||
|
set = [set, 'tag:' + data.tag + ':topics'];
|
||||||
|
}
|
||||||
|
|
||||||
categories.getCategoryTopics({
|
categories.getCategoryTopics({
|
||||||
cid: data.cid,
|
cid: data.cid,
|
||||||
set: set,
|
set: set,
|
||||||
|
|||||||
Reference in New Issue
Block a user