v1.18.x
Julian Lam 8 years ago
parent 8e25471685
commit 932b3f06a5

@ -3,6 +3,7 @@
var async = require('async');
var _ = require('lodash');
var S = require('string');
var winston = require('winston');
var db = require('./database');
var user = require('./user');
@ -18,6 +19,60 @@ var utils = require('../public/src/utils');
var Flags = module.exports;
Flags.init = function (callback) {
// Query plugins for custom filter strategies and merge into core filter strategies
var prepareSets = function (sets, orSets, prefix, value) {
if (!Array.isArray(value)) {
sets.push(prefix + value);
} else if (value.length) {
value.forEach(function (x) {
orSets.push(prefix + x);
});
}
};
plugins.fireHook('filter:flags.getFilters', {
filters: {
type: function (sets, orSets, key) {
prepareSets(sets, orSets, 'flags:byType:', key);
},
state: function (sets, orSets, key) {
prepareSets(sets, orSets, 'flags:byState:', key);
},
reporterId: function (sets, orSets, key) {
prepareSets(sets, orSets, 'flags:byReporter:', key);
},
assignee: function (sets, orSets, key) {
prepareSets(sets, orSets, 'flags:byAssignee:', key);
},
targetUid: function (sets, orSets, key) {
prepareSets(sets, orSets, 'flags:byTargetUid:', key);
},
cid: function (sets, orSets, key) {
prepareSets(sets, orSets, 'flags:byCid:', key);
},
quick: function (sets, orSets, key, uid) {
switch (key) {
case 'mine':
sets.push('flags:byAssignee:' + uid);
break;
}
},
},
helpers: {
prepareSets: prepareSets,
},
}, function (err, data) {
if (err) {
winston.error('[flags/init] Could not retrieve filters (error: ' + err.message + ')');
data.filters = {};
}
Flags._filters = data.filters;
callback();
});
};
Flags.get = function (flagId, callback) {
async.waterfall([
// First stage
@ -64,51 +119,14 @@ Flags.list = function (filters, uid, callback) {
var sets = [];
var orSets = [];
var prepareSets = function (setPrefix, value) {
if (!Array.isArray(value)) {
sets.push(setPrefix + value);
} else if (value.length) {
value.forEach(function (x) {
orSets.push(setPrefix + x);
});
}
};
if (Object.keys(filters).length > 0) {
for (var type in filters) {
if (filters.hasOwnProperty(type)) {
switch (type) {
case 'type':
prepareSets('flags:byType:', filters[type]);
break;
case 'state':
prepareSets('flags:byState:', filters[type]);
break;
case 'reporterId':
prepareSets('flags:byReporter:', filters[type]);
break;
case 'assignee':
prepareSets('flags:byAssignee:', filters[type]);
break;
case 'targetUid':
prepareSets('flags:byTargetUid:', filters[type]);
break;
case 'cid':
prepareSets('flags:byCid:', filters[type]);
break;
case 'quick':
switch (filters.quick) {
case 'mine':
sets.push('flags:byAssignee:' + uid);
break;
}
break;
if (Flags._filters.hasOwnProperty(type)) {
Flags._filters[type](sets, orSets, filters[type], uid);
} else {
winston.warn('[flags/list] No flag filter type found: ' + type);
}
}
}

@ -24,6 +24,7 @@ var meta = require('./meta');
var languages = require('./languages');
var logger = require('./logger');
var plugins = require('./plugins');
var flags = require('./flags');
var routes = require('./routes');
var auth = require('./routes/authentication');
var templates = require('templates.js');
@ -106,6 +107,7 @@ function initializeNodeBB(callback) {
meta.sounds.addUploads,
languages.init,
meta.blacklist.load,
flags.init,
], next);
},
], function (err) {

Loading…
Cancel
Save