v1.18.x
barisusakli 9 years ago
parent 2ac3f5e392
commit 958fe3e72f

@ -273,11 +273,13 @@ define('forum/category', [
}
$(window).trigger('action:categories.loading');
var params = utils.params();
infinitescroll.loadMore('categories.loadMore', {
cid: ajaxify.data.cid,
after: after,
direction: direction,
author: utils.params().author,
author: params.author,
tag: params.tag,
categoryTopicSort: config.categoryTopicSort
}, function (data, done) {
if (data.topics && data.topics.length) {

@ -35,14 +35,18 @@ var privileges = require('./privileges');
return next(new Error('[[error:invalid-cid]]'));
}
category = categories[0];
if (parseInt(data.uid, 10)) {
Categories.markAsRead([data.cid], data.uid);
}
async.parallel({
topics: function(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) {
Categories.isIgnored([data.cid], data.uid, next);
}
@ -52,6 +56,7 @@ var privileges = require('./privileges');
category.topics = results.topics.topics;
category.nextStart = results.topics.nextStart;
category.isIgnored = results.isIgnored[0];
category.topic_count = results.topicCount;
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) {
if (reverse) {
db.getSortedSetRevRange(set, start, stop, callback);
if (Array.isArray(set)) {
db[reverse ? 'getSortedSetRevIntersect' : 'getSortedSetIntersect']({sets: set, start: start, stop: stop}, callback);
} else {
db.getSortedSetRange(set, start, stop, callback);
db[reverse ? 'getSortedSetRevRange' : 'getSortedSetRange'](set, start, stop, callback);
}
};
Categories.getTopicIndex = function(tid, callback) {
topics.getTopicField(tid, 'cid', function(err, cid) {
if(err) {
if (err) {
return callback(err);
}

@ -20,6 +20,7 @@ categoryController.get = function(req, res, callback) {
var currentPage = parseInt(req.query.page, 10) || 1;
var pageCount = 1;
var userPrivileges;
var settings;
if ((req.params.topic_index && !utils.isNumber(req.params.topic_index)) || !utils.isNumber(cid)) {
return callback();
@ -54,7 +55,7 @@ categoryController.get = function(req, res, callback) {
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 topicCount = parseInt(results.categoryData.topic_count, 10);
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 stop = start + settings.topicsPerPage - 1;
next(null, {
var payload = {
cid: cid,
set: set,
reverse: reverse,
@ -97,19 +98,24 @@ categoryController.get = function(req, res, callback) {
stop: stop,
uid: req.uid,
settings: settings
});
},
function (payload, next) {
user.getUidByUserslug(req.query.author, function(err, uid) {
payload.targetUid = uid;
if (uid) {
payload.set = 'cid:' + cid + ':uid:' + uid + ':tids';
};
async.waterfall([
function(next) {
user.getUidByUserslug(req.query.author, next);
},
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);
});
},
function (payload, next) {
categories.getCategoryById(payload, next);
], 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.rssFeedUrl = nconf.get('relative_path') + '/category/' + categoryData.cid + '.rss';
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.rel.forEach(function(rel) {
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';
}
if (data.tag) {
set = [set, 'tag:' + data.tag + ':topics'];
}
categories.getCategoryTopics({
cid: data.cid,
set: set,

Loading…
Cancel
Save