add all Changes of #4565

This commit is contained in:
Negue
2015-03-27 18:35:32 +01:00
parent fc00fb7103
commit 7105bc195f
9 changed files with 129 additions and 7 deletions

View File

@@ -645,6 +645,20 @@ api.wrap = (user, main=true) ->
user.markModified? 'preferences.webhooks' user.markModified? 'preferences.webhooks'
cb? null, user.preferences.webhooks cb? null, user.preferences.webhooks
# ------
# Push Notifications
# ------
addPushDevice: (req, cb) ->
user.pushDevices = [] unless user.pushDevices
pd = user.pushDevices
item = {regId:req.body.regId, type:req.body.type};
i = _.findIndex pd, {regId: item.regId}
pd.push(item) unless i != -1
user.markModified? 'pushDevices'
cb? null, user.pushDevices
# ------ # ------
# Inbox # Inbox
# ------ # ------

View File

@@ -51,5 +51,12 @@
"token": "token", "token": "token",
"username": "username", "username": "username",
"password": "password" "password": "password"
},
"PUSH_CONFIGS": {
"GCM_SERVER_API_KEY": "",
"APN_PEM_FILES": {
"KEY": "key.pem",
"CERT": "cert.pem"
}
} }
} }

View File

@@ -11,7 +11,7 @@ var logging = require('./../logging');
var csv = require('express-csv'); var csv = require('express-csv');
var utils = require('../utils'); var utils = require('../utils');
var api = module.exports; var api = module.exports;
var pushNotify = require('./pushNotifications');
/* /*
------------------------------------------------------------------------ ------------------------------------------------------------------------
@@ -341,6 +341,9 @@ api.selectWinner = function(req, res, next) {
{name: 'CHALLENGE_NAME', content: chal.name} {name: 'CHALLENGE_NAME', content: chal.name}
]); ]);
} }
pushNotify.sendNotify(saved, shared.i18n.t('wonChallenge'), chal.name);
closeChal(cid, {broken: 'CHALLENGE_CLOSED', winner: saved.profile.name}, cb); closeChal(cid, {broken: 'CHALLENGE_CLOSED', winner: saved.profile.name}, cb);
} }
], function(err){ ], function(err){

View File

@@ -14,6 +14,7 @@ var Group = require('./../models/group').model;
var Challenge = require('./../models/challenge').model; var Challenge = require('./../models/challenge').model;
var isProd = nconf.get('NODE_ENV') === 'production'; var isProd = nconf.get('NODE_ENV') === 'production';
var api = module.exports; var api = module.exports;
var pushNotify = require('./pushNotifications');
/* /*
------------------------------------------------------------------------ ------------------------------------------------------------------------
@@ -535,9 +536,13 @@ var inviteByUUIDs = function(uuids, group, req, res, next){
function sendInvite (){ function sendInvite (){
if(group.type === 'guild'){ if(group.type === 'guild'){
invite.invitations.guilds.push({id: group._id, name: group.name, inviter:res.locals.user._id}); invite.invitations.guilds.push({id: group._id, name: group.name, inviter:res.locals.user._id});
pushNotify.sendNotify(invite, shared.i18n.t('invitedGuild'), group.name);
}else{ }else{
//req.body.type in 'guild', 'party' //req.body.type in 'guild', 'party'
invite.invitations.party = {id: group._id, name: group.name, inviter:res.locals.user._id}; invite.invitations.party = {id: group._id, name: group.name, inviter:res.locals.user._id};
pushNotify.sendNotify(invite, shared.i18n.t('invitedParty'), group.name);
} }
group.invites.push(invite._id); group.invites.push(invite._id);
@@ -860,6 +865,10 @@ api.questAccept = function(req, res, next) {
group.quest.leader = user._id; group.quest.leader = user._id;
} else { } else {
group.quest.members[m] = undefined; group.quest.members[m] = undefined;
User.findById(m, function(err,groupMember){
pushNotify.sendNotify(groupMember, "HabitRPG", "Invitation for the Quest "+quest.text());
});
} }
}); });

View File

@@ -7,6 +7,7 @@ var _ = require('lodash');
var shared = require('../../../common'); var shared = require('../../../common');
var utils = require('../utils'); var utils = require('../utils');
var nconf = require('nconf'); var nconf = require('nconf');
var pushNotify = require('./pushNotifications');
var fetchMember = function(uuid, restrict){ var fetchMember = function(uuid, restrict){
return function(cb){ return function(cb){
@@ -96,12 +97,18 @@ api.sendGift = function(req, res, next){
member.balance += amt; member.balance += amt;
user.balance -= amt; user.balance -= amt;
api.sendMessage(user, member, req.body); api.sendMessage(user, member, req.body);
var byUsername = utils.getUserInfo(user, ['name']).name;
if(member.preferences.emailNotifications.giftedGems !== false){ if(member.preferences.emailNotifications.giftedGems !== false){
utils.txnEmail(member, 'gifted-gems', [ utils.txnEmail(member, 'gifted-gems', [
{name: 'GIFTER', content: utils.getUserInfo(user, ['name']).name}, {name: 'GIFTER', content: byUsername},
{name: 'X_GEMS_GIFTED', content: req.body.gems.amount} {name: 'X_GEMS_GIFTED', content: req.body.gems.amount}
]); ]);
} }
pushNotify.sendNotify(member, shared.i18n.t('giftedGems'), req.body.gems.amount + ' Gems - by '+byUsername);
return async.parallel([ return async.parallel([
function (cb2) { member.save(cb2) }, function (cb2) { member.save(cb2) },
function (cb2) { user.save(cb2) } function (cb2) { user.save(cb2) }

View File

@@ -12,6 +12,7 @@ var async = require('async');
var iap = require('./iap'); var iap = require('./iap');
var mongoose= require('mongoose'); var mongoose= require('mongoose');
var cc = require('coupon-code'); var cc = require('coupon-code');
var pushNotify = require('./../pushNotifications');
function revealMysteryItems(user) { function revealMysteryItems(user) {
_.each(shared.content.gear.flat, function(item) { _.each(shared.content.gear.flat, function(item) {
@@ -75,12 +76,17 @@ exports.createSubscription = function(data, cb) {
data.user.purchased.txnCount++; data.user.purchased.txnCount++;
if (data.gift){ if (data.gift){
members.sendMessage(data.user, data.gift.member, data.gift); members.sendMessage(data.user, data.gift.member, data.gift);
var byUserName = utils.getUserInfo(data.user, ['name']).name;
if(data.gift.member.preferences.emailNotifications.giftedSubscription !== false){ if(data.gift.member.preferences.emailNotifications.giftedSubscription !== false){
utils.txnEmail(data.gift.member, 'gifted-subscription', [ utils.txnEmail(data.gift.member, 'gifted-subscription', [
{name: 'GIFTER', content: utils.getUserInfo(data.user, ['name']).name}, {name: 'GIFTER', content: byUserName},
{name: 'X_MONTHS_SUBSCRIPTION', content: months} {name: 'X_MONTHS_SUBSCRIPTION', content: months}
]); ]);
} }
pushNotify.sendNotify(data.gift.member, shared.i18n.t('gifted-subscription'), months + " months - by "+ byUserName);
} }
async.parallel([ async.parallel([
function(cb2){data.user.save(cb2)}, function(cb2){data.user.save(cb2)},
@@ -119,13 +125,18 @@ exports.buyGems = function(data, cb) {
utils.ga.transaction(data.user._id, amt).item(amt, 1, data.paymentMethod.toLowerCase() + "-checkout", "Gems > " + data.paymentMethod).send(); utils.ga.transaction(data.user._id, amt).item(amt, 1, data.paymentMethod.toLowerCase() + "-checkout", "Gems > " + data.paymentMethod).send();
} }
if (data.gift){ if (data.gift){
var byUsername = utils.getUserInfo(data.user, ['name']).name;
var gemAmount = data.gift.gems.amount || 20;
members.sendMessage(data.user, data.gift.member, data.gift); members.sendMessage(data.user, data.gift.member, data.gift);
if(data.gift.member.preferences.emailNotifications.giftedGems !== false){ if(data.gift.member.preferences.emailNotifications.giftedGems !== false){
utils.txnEmail(data.gift.member, 'gifted-gems', [ utils.txnEmail(data.gift.member, 'gifted-gems', [
{name: 'GIFTER', content: utils.getUserInfo(data.user, ['name']).name}, {name: 'GIFTER', content: byUsername},
{name: 'X_GEMS_GIFTED', content: data.gift.gems.amount || 20} {name: 'X_GEMS_GIFTED', content: gemAmount}
]); ]);
} }
pushNotify.sendNotify(data.gift.member, shared.i18n.t('giftedGems'), gemAmount + ' Gems - by '+byUsername);
} }
async.parallel([ async.parallel([
function(cb2){data.user.save(cb2)}, function(cb2){data.user.save(cb2)},

View File

@@ -0,0 +1,56 @@
var api = module.exports;
var _ = require('lodash');
var nconf = require('nconf');
var pushNotify = require('push-notify');
var gcmApiKey = nconf.get("PUSH_CONFIGS:GCM_SERVER_API_KEY");
var gcm = gcmApiKey ? pushNotify.gcm({
apiKey: gcmApiKey,
retries: 3
}) : undefined;
if(gcm){
gcm.on('transmitted', function (result, message, registrationId) {
console.info("transmitted", result, message, registrationId);
});
gcm.on('transmissionError', function (error, message, registrationId) {
console.info("transmissionError", error, message, registrationId);
});
gcm.on('updated', function (result, registrationId) {
console.info("updated", result, registrationId);
});
}
api.sendNotify = function(user, title, msg, timeToLive){
timeToLive = timeToLive || 15;
_.forEach(user.pushDevices, function(pushDevice){
switch(pushDevice.type){
case "android":
if(gcm){
console.info("sending", title, msg);
console.info(pushDevice);
gcm.send({
registrationId: pushDevice.regId,
//collapseKey: 'COLLAPSE_KEY',
delayWhileIdle: true,
timeToLive: timeToLive,
data: {
title: title,
message: msg
}
});
}
break;
case "ios":
break;
}
});
};

View File

@@ -387,7 +387,12 @@ var UserSchema = new Schema({
todos: {type:[TaskSchemas.TodoSchema]}, todos: {type:[TaskSchemas.TodoSchema]},
rewards: {type:[TaskSchemas.RewardSchema]}, rewards: {type:[TaskSchemas.RewardSchema]},
extra: Schema.Types.Mixed extra: Schema.Types.Mixed,
pushDevices: {type: [{
regId: {type: String},
type: {type: String}
}],'default': []}
}, { }, {
strict: true, strict: true,

View File

@@ -396,6 +396,16 @@ module.exports = (swagger, v2) ->
] ]
action: user.deleteWebhook action: user.deleteWebhook
# Push Notifications
"/user/pushDevice":
spec:
method: 'POST'
description: 'Add a new push devices registration ID'
parameters: [
body '','New push registration { regId: "123123", type: "android"}','object'
]
action: user.addPushDevice
# --------------------------------- # ---------------------------------
# Groups # Groups
# --------------------------------- # ---------------------------------