flag list page (#5232)

v1.18.x
Julian Lam 8 years ago
parent 106502952a
commit 640df0379e

@ -0,0 +1,6 @@
{
"quick-filters": "Quick Filters",
"reporter": "Reporter",
"reported-at": "Reported At",
"no-flags": "Hooray! No flags found."
}

@ -3,7 +3,8 @@
var async = require('async'); var async = require('async');
var user = require('../user'); var user = require('../user');
var adminFlagsController = require('./admin/flags'); var flags = require('../flags');
// var adminFlagsController = require('./admin/flags');
var modsController = {}; var modsController = {};
@ -20,7 +21,11 @@ modsController.flagged = function (req, res, next) {
res.locals.cids = results.moderatedCids; res.locals.cids = results.moderatedCids;
} }
adminFlagsController.get(req, res, next); flags.list({}, function(err, flags) {
res.render('flags', {
flags: flags
});
});
}); });
}; };

@ -13,10 +13,71 @@ var utils = require('../public/src/utils');
var Flags = { var Flags = {
_defaults: { _defaults: {
state: 'open' state: 'open',
assignee: null
} }
}; };
Flags.list = function (filters, callback) {
if (typeof filters === 'function' && !callback) {
callback = filters;
filters = {};
}
async.waterfall([
async.apply(db.getSortedSetRevRange.bind(db), 'flags:datetime', 0, 19),
function (flagIds, next) {
async.map(flagIds, function (flagId, next) {
async.waterfall([
async.apply(db.getObject, 'flag:' + flagId),
function (flagObj, next) {
user.getUserFields(flagObj.uid, ['username', 'picture'], function (err, userObj) {
next(err, Object.assign(flagObj, {
user: {
username: userObj.username,
picture: userObj.picture,
'icon:bgColor': userObj['icon:bgColor'],
'icon:text': userObj['icon:text']
}
}));
})
}
], function (err, flagObj) {
if (err) {
return next(err);
}
switch(flagObj.state) {
case 'open':
flagObj.labelClass = 'info';
break;
case 'wip':
flagObj.labelClass = 'warning';
break;
case 'resolved':
flagObj.labelClass = 'success';
break;
case 'rejected':
flagObj.labelClass = 'danger';
break;
}
next(null, Object.assign(flagObj, {
target_readable: flagObj.type.charAt(0).toUpperCase() + flagObj.type.slice(1) + ' ' + flagObj.id,
datetimeISO: new Date(parseInt(flagObj.datetime, 10)).toISOString()
}));
});
}, next);
}
], function (err, flags) {
if (err) {
return callback(err);
}
return callback(null, flags);
});
};
Flags.create = function (type, id, uid, reason, callback) { Flags.create = function (type, id, uid, reason, callback) {
async.waterfall([ async.waterfall([
function (next) { function (next) {
@ -38,23 +99,22 @@ Flags.create = function (type, id, uid, reason, callback) {
var flagId = utils.generateUUID(); var flagId = utils.generateUUID();
async.parallel([ async.parallel([
async.apply(db.setObject.bind(db), 'flag:' + flagId, _.defaults({ async.apply(db.setObject.bind(db), 'flag:' + flagId, Object.assign({}, Flags._defaults, {
description: reason type: type,
}), Flags._defaults), id: id,
async.apply(db.sortedSetAdd.bind(db), 'flags:datetime', now, flagId) description: reason,
], function (err) { uid: uid,
if (err) { datetime: Date.now()
return next(err); })),
} async.apply(db.sortedSetAdd.bind(db), 'flags:datetime', Date.now(), flagId)
}); ], next);
} }
], function (err) { ], function (err) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
console.log('done', arguments); callback();
process.exit();
}); });
// if (!parseInt(uid, 10) || !reason) { // if (!parseInt(uid, 10) || !reason) {
// return callback(); // return callback();
@ -107,7 +167,7 @@ Flags.create = function (type, id, uid, reason, callback) {
// ], next); // ], next);
// }, // },
// function (data, next) { // function (data, next) {
// openNewFlag(post.pid, uid, next); // openNewFlag(post.pid, uid, next); // removed, used to just update flag to open state if new flag
// } // }
// ], function (err) { // ], function (err) {
// if (err) { // if (err) {
@ -118,21 +178,6 @@ Flags.create = function (type, id, uid, reason, callback) {
// }); // });
}; };
function openNewFlag(pid, uid, callback) {
db.sortedSetScore('posts:flags:count', pid, function (err, count) {
if (err) {
return callback(err);
}
if (count === 1) { // Only update state on new flag
Flags.update(uid, pid, {
state: 'open'
}, callback);
} else {
callback();
}
});
}
Flags.exists = function (type, id, uid, callback) { Flags.exists = function (type, id, uid, callback) {
db.isObjectField('flagHash:flagId', [type, id, uid].join(':'), callback); db.isObjectField('flagHash:flagId', [type, id, uid].join(':'), callback);
}; };

@ -40,7 +40,7 @@ function mainRoutes(app, middleware, controllers) {
} }
function modRoutes(app, middleware, controllers) { function modRoutes(app, middleware, controllers) {
setupPageRoute(app, '/posts/flags', middleware, [], controllers.mods.flagged); setupPageRoute(app, '/flags', middleware, [], controllers.mods.flagged);
} }
function globalModRoutes(app, middleware, controllers) { function globalModRoutes(app, middleware, controllers) {

Loading…
Cancel
Save