mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-22 00:10:25 +01:00
closes #5797
This commit is contained in:
100
src/flags.js
100
src/flags.js
@@ -3,6 +3,7 @@
|
|||||||
var async = require('async');
|
var async = require('async');
|
||||||
var _ = require('lodash');
|
var _ = require('lodash');
|
||||||
var S = require('string');
|
var S = require('string');
|
||||||
|
var winston = require('winston');
|
||||||
|
|
||||||
var db = require('./database');
|
var db = require('./database');
|
||||||
var user = require('./user');
|
var user = require('./user');
|
||||||
@@ -18,6 +19,60 @@ var utils = require('../public/src/utils');
|
|||||||
|
|
||||||
var Flags = module.exports;
|
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) {
|
Flags.get = function (flagId, callback) {
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
// First stage
|
// First stage
|
||||||
@@ -64,51 +119,14 @@ Flags.list = function (filters, uid, callback) {
|
|||||||
|
|
||||||
var sets = [];
|
var sets = [];
|
||||||
var orSets = [];
|
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) {
|
if (Object.keys(filters).length > 0) {
|
||||||
for (var type in filters) {
|
for (var type in filters) {
|
||||||
if (filters.hasOwnProperty(type)) {
|
if (filters.hasOwnProperty(type)) {
|
||||||
switch (type) {
|
if (Flags._filters.hasOwnProperty(type)) {
|
||||||
case 'type':
|
Flags._filters[type](sets, orSets, filters[type], uid);
|
||||||
prepareSets('flags:byType:', filters[type]);
|
} else {
|
||||||
break;
|
winston.warn('[flags/list] No flag filter type found: ' + type);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ var meta = require('./meta');
|
|||||||
var languages = require('./languages');
|
var languages = require('./languages');
|
||||||
var logger = require('./logger');
|
var logger = require('./logger');
|
||||||
var plugins = require('./plugins');
|
var plugins = require('./plugins');
|
||||||
|
var flags = require('./flags');
|
||||||
var routes = require('./routes');
|
var routes = require('./routes');
|
||||||
var auth = require('./routes/authentication');
|
var auth = require('./routes/authentication');
|
||||||
var templates = require('templates.js');
|
var templates = require('templates.js');
|
||||||
@@ -106,6 +107,7 @@ function initializeNodeBB(callback) {
|
|||||||
meta.sounds.addUploads,
|
meta.sounds.addUploads,
|
||||||
languages.init,
|
languages.init,
|
||||||
meta.blacklist.load,
|
meta.blacklist.load,
|
||||||
|
flags.init,
|
||||||
], next);
|
], next);
|
||||||
},
|
},
|
||||||
], function (err) {
|
], function (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user