mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-07 21:16:28 +02:00
ability to filter flags by category
This commit is contained in:
@@ -3,28 +3,26 @@
|
||||
var async = require('async');
|
||||
var posts = require('../../posts');
|
||||
var user = require('../../user');
|
||||
var categories = require('../../categories');
|
||||
var analytics = require('../../analytics');
|
||||
var pagination = require('../../pagination');
|
||||
|
||||
var flagsController = {};
|
||||
|
||||
flagsController.get = function(req, res, next) {
|
||||
var sortBy = req.query.sortBy || 'count';
|
||||
var byUsername = req.query.byUsername || '';
|
||||
var itemsPerPage = 20;
|
||||
|
||||
flagsController.get = function(req, res, next) {
|
||||
var byUsername = req.query.byUsername || '';
|
||||
var cid = req.query.cid || 0;
|
||||
var sortBy = req.query.sortBy || 'count';
|
||||
var page = parseInt(req.query.page, 10) || 1;
|
||||
var itemsPerPage = 20;
|
||||
var start = (page - 1) * itemsPerPage;
|
||||
var stop = start + itemsPerPage - 1;
|
||||
|
||||
async.parallel({
|
||||
categories: function(next) {
|
||||
categories.buildForSelect(req.uid, next);
|
||||
},
|
||||
flagData: function(next) {
|
||||
if (byUsername) {
|
||||
posts.getUserFlags(byUsername, sortBy, req.uid, start, stop, next);
|
||||
} else {
|
||||
var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged';
|
||||
posts.getFlags(set, req.uid, start, stop, next);
|
||||
}
|
||||
getFlagData(req, next);
|
||||
},
|
||||
analytics: function(next) {
|
||||
analytics.getDailyStatsForSet('analytics:flags', Date.now(), 30, next);
|
||||
@@ -47,12 +45,18 @@ flagsController.get = function(req, res, next) {
|
||||
|
||||
var pageCount = Math.max(1, Math.ceil(results.flagData.count / itemsPerPage));
|
||||
|
||||
results.categories.forEach(function(category) {
|
||||
category.selected = parseInt(category.cid, 10) === parseInt(cid, 10);
|
||||
});
|
||||
|
||||
var data = {
|
||||
posts: results.flagData.posts,
|
||||
assignees: results.assignees,
|
||||
analytics: results.analytics,
|
||||
next: stop + 1,
|
||||
categories: results.categories,
|
||||
byUsername: byUsername,
|
||||
sortByCount: sortBy === 'count',
|
||||
sortByTime: sortBy === 'time',
|
||||
pagination: pagination.create(page, pageCount, req.query),
|
||||
title: '[[pages:flagged-posts]]'
|
||||
};
|
||||
@@ -60,5 +64,36 @@ flagsController.get = function(req, res, next) {
|
||||
});
|
||||
};
|
||||
|
||||
function getFlagData(req, callback) {
|
||||
var sortBy = req.query.sortBy || 'count';
|
||||
var byUsername = req.query.byUsername || '';
|
||||
var cid = req.query.cid || 0;
|
||||
var page = parseInt(req.query.page, 10) || 1;
|
||||
var start = (page - 1) * itemsPerPage;
|
||||
var stop = start + itemsPerPage - 1;
|
||||
|
||||
var sets = [sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged'];
|
||||
if (cid) {
|
||||
sets.push('cid:' + cid + ':pids');
|
||||
}
|
||||
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
if (byUsername) {
|
||||
user.getUidByUsername(byUsername, next);
|
||||
} else {
|
||||
process.nextTick(next, null, 0);
|
||||
}
|
||||
},
|
||||
function(uid, next) {
|
||||
if (uid) {
|
||||
sets.push('uid:' + uid + ':flag:pids');
|
||||
}
|
||||
|
||||
posts.getFlags(sets, req.uid, start, stop, next);
|
||||
}
|
||||
], callback);
|
||||
}
|
||||
|
||||
|
||||
module.exports = flagsController;
|
||||
|
||||
Reference in New Issue
Block a user