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

@ -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,

Loading…
Cancel
Save