-
Notifications
You must be signed in to change notification settings - Fork 5
/
library.js
102 lines (96 loc) · 2.98 KB
/
library.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
'use strict';
const controllers = require('./lib/controllers');
const helper = require.main.require('./src/controllers/helpers');
const db = require.main.require('./src/database');
const user = require.main.require('./src/user');
const plugin = {};
plugin.init = function (params, callback) {
const router = params.router;
const hostMiddleware = params.middleware;
// const hostControllers = params.controllers;
// We create two routes for every view. One API call, and the actual route itself.
// Just add the buildHeader middleware to your route and NodeBB will take care of everything for you.
router.get('/admin/plugins/user-level', hostMiddleware.admin.buildHeader, controllers.renderAdminPage);
router.get('/api/admin/plugins/user-level', controllers.renderAdminPage);
router.post('/user-level/level',
// checkRegisterMiddleware,
getLevel)
router.post('/user-level/level-list',
// checkRegisterMiddleware,
getLevelList)
callback();
};
plugin.addAdminNavigation = function (header, callback) {
header.plugins.push({
route: '/plugins/user-level',
icon: 'fa-tint',
name: 'User level',
});
callback(null, header);
};
var checkRegisterMiddleware = function (req, res, next) {
// console.log(req);
if (!req.loggedIn) {
return helper.notAllowed(req, res);
}
else {
next();
}
}
var getLevel = async function (req, res) {
var levelList = await db.client.collection('objects').find({ _key: /settings:user-level:sorted-list:level-list:/ }).toArray();
levelList.map(e => e['min-reputation'] = parseInt(e['min-reputation']))
levelList.sort((a, b) => {
return b['min-reputation'] - a['min-reputation']
})
levelList.map((e, i) => {
e['level-index'] = levelList.length - i;
e['next-level'] = levelList[i - 1]
return e;
})
var reputation = await user.getUserField(req.body.uid, ['reputation'])
var level = levelList.find(e => {
return e['min-reputation'] <= reputation
})
level.reputation = reputation
if (!level) {
return res.status(200).send(
{
"level-name": "No level defined",
"min-reputation": -1
})
}
return res.status(200).send(level);
}
var getLevelList = async function (req, res) {
var levelList = await db.client.collection('objects').find({ _key: /settings:user-level:sorted-list:level-list:/ }).toArray();
levelList.map(e => e['min-reputation'] = parseInt(e['min-reputation']))
// console.log(levelList)
levelList.sort((a, b) => {
return b['min-reputation'] - a['min-reputation']
})
levelList.map((e, i) => {
e['level-index'] = levelList.length - i;
e['next-level'] = levelList[i - 1]
return e;
})
var users = await user.getUsersData(req.body.uid)
var reputation = [];
users.forEach(e => {
reputation.push(e.reputation)
})
// console.log(reputation)
var levelReturn = [];
reputation.forEach(e => {
levelReturn.push(
levelList.find(i => {
return i['min-reputation'] <= e
}))
})
var result = levelReturn.map((e, i) => {
e = { ...e, ...users[i] };
return e;
})
return res.status(200).send(result);
}
module.exports = plugin;