You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
3.2 KiB
JavaScript

"use strict";
var rewards = {},
async = require('async'),
plugins = require('../plugins'),
db = require('../database');
var defaults = {
conditionals: [
{
"name": ">",
"conditional": "greaterthan"
},
{
"name": ">=",
"conditional": "greaterorequalthan"
},
{
"name": "<",
"conditional": "lesserthan"
},
{
"name": "<=",
"conditional": "lesserorequalthan"
},
{
"name": "string:",
"conditional": "string"
}
]
};
rewards.save = function(data, callback) {
function save(data, next) {
if (!Object.keys(data.rewards).length) {
return next();
}
var rewards = data.rewards;
delete data.rewards;
async.parallel([
function(next) {
db.setAdd('rewards:list', data.id, next);
},
function(next) {
db.setObject('rewards:id:' + data.id, data, next);
},
function(next) {
db.setObject('rewards:id:' + data.id + ':rewards', rewards, next);
}
], next);
}
async.each(data, save, callback);
};
10 years ago
rewards.delete = function(data, callback) {
async.parallel([
function(next) {
db.setRemove('rewards:list', data.id, next);
},
function(next) {
db.delete('rewards:id:' + data.id, next);
},
function(next) {
db.delete('rewards:id:' + data.id + ':rewards', next);
}
], callback);
};
rewards.get = function(callback) {
async.parallel({
active: getActiveRewards,
conditions: function(next) {
plugins.fireHook('filter:rewards.conditions', [
{
"name": "Reputation",
"condition": "reputation"
},
{
"name": "Post Count",
"condition": "postcount"
},
{
"name": "Last Logged in Time",
"condition": "lastLoggedIn"
}
], next);
},
conditionals: function(next) {
plugins.fireHook('filter:rewards.conditionals', defaults.conditionals, next);
},
rewards: function(next) {
plugins.fireHook('filter:rewards.rewards', [
{
"rid": "core:add-to-group",
"name": "Add to Group",
"inputs": [
{
"type": "select",
"name": "groupname",
"label": "Group Name:",
"values": [
{
"name": "Group 1",
"value": "group1"
},
{
"name": "Group 2",
"value": "group2"
},
{
"name": "Group 3",
"value": "group3"
}
],
}
]
},
{
"rid": "core:alert-user",
"name": "Send alert message",
"inputs": [
{
"type": "text",
"name": "title",
"label": "Title:"
},
{
"type": "text",
"name": "message",
"label": "Message:"
}
]
}
], next);
}
}, callback);
};
function getConditions() {
}
function getActiveRewards(callback) {
var activeRewards = [];
function load(id, next) {
async.parallel({
main: function(next) {
db.getObject('rewards:id:' + id, next);
},
rewards: function(next) {
db.getObject('rewards:id:' + id + ':rewards', next);
}
}, function(err, data) {
data.main.rewards = data.rewards;
activeRewards.push(data.main);
next(err);
});
}
db.getSetMembers('rewards:list', function(err, rewards) {
async.eachSeries(rewards, load, function(err) {
callback(err, activeRewards);
});
});
}
module.exports = rewards;