mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
port push notifications in api v3
This commit is contained in:
@@ -11,7 +11,7 @@ var logging = require('./../../libs/api-v2/logging');
|
|||||||
var csv = require('express-csv');
|
var csv = require('express-csv');
|
||||||
var utils = require('../../libs/api-v2/utils');
|
var utils = require('../../libs/api-v2/utils');
|
||||||
var api = module.exports;
|
var api = module.exports;
|
||||||
var pushNotify = require('./../pushNotifications');
|
var pushNotify = require('./pushNotifications');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ var Challenge = require('./../../models/challenge').model;
|
|||||||
var EmailUnsubscription = require('./../../models/emailUnsubscription').model;
|
var EmailUnsubscription = require('./../../models/emailUnsubscription').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');
|
var pushNotify = require('./pushNotifications');
|
||||||
var analytics = utils.analytics;
|
var analytics = utils.analytics;
|
||||||
var firebase = require('../../libs/api-v2/firebase');
|
var firebase = require('../../libs/api-v2/firebase');
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ var _ = require('lodash');
|
|||||||
var shared = require('../../../../common');
|
var shared = require('../../../../common');
|
||||||
var utils = require('../../libs/api-v2/utils');
|
var utils = require('../../libs/api-v2/utils');
|
||||||
var nconf = require('nconf');
|
var nconf = require('nconf');
|
||||||
var pushNotify = require('./../pushNotifications');
|
var pushNotify = require('./pushNotifications');
|
||||||
|
|
||||||
var fetchMember = function(uuid, restrict){
|
var fetchMember = function(uuid, restrict){
|
||||||
return function(cb){
|
return function(cb){
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
import shared from '../../../../common';
|
import shared from '../../../../common';
|
||||||
import * as Tasks from '../../models/task';
|
import * as Tasks from '../../models/task';
|
||||||
import { sendTxn as txnEmail } from '../../libs/api-v3/email';
|
import { sendTxn as txnEmail } from '../../libs/api-v3/email';
|
||||||
import pushNotify from '../../libs/api-v3/pushNotifications';
|
import { sendNotification as sendPushNotification } from '../../libs/api-v3/pushNotifications';
|
||||||
import Q from 'q';
|
import Q from 'q';
|
||||||
import csvStringify from '../../libs/api-v3/csvStringify';
|
import csvStringify from '../../libs/api-v3/csvStringify';
|
||||||
|
|
||||||
@@ -471,7 +471,7 @@ async function _closeChal (challenge, broken = {}) {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
pushNotify(savedWinner, shared.i18n.t('wonChallenge'), challenge.name); // TODO translate
|
sendPushNotification(savedWinner, shared.i18n.t('wonChallenge'), challenge.name); // TODO translate
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run some operations in the background withouth blocking the thread
|
// Run some operations in the background withouth blocking the thread
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ import { removeFromArray } from '../../libs/api-v3/collectionManipulators';
|
|||||||
import * as firebase from '../../libs/api-v3/firebase';
|
import * as firebase from '../../libs/api-v3/firebase';
|
||||||
import { sendTxn as sendTxnEmail } from '../../libs/api-v3/email';
|
import { sendTxn as sendTxnEmail } from '../../libs/api-v3/email';
|
||||||
import { encrypt } from '../../libs/api-v3/encryption';
|
import { encrypt } from '../../libs/api-v3/encryption';
|
||||||
|
import common from '../../../../common';
|
||||||
|
import { sendNotification as sendPushNotification } from '../../libs/api-v3/pushNotifications';
|
||||||
let api = {};
|
let api = {};
|
||||||
|
|
||||||
// TODO shall we accept party as groupId in all routes?
|
// TODO shall we accept party as groupId in all routes?
|
||||||
@@ -510,6 +511,12 @@ async function _inviteByUUID (uuid, group, inviter, req, res) {
|
|||||||
sendTxnEmail(userToInvite, `invited-${groupLabel}`, emailVars);
|
sendTxnEmail(userToInvite, `invited-${groupLabel}`, emailVars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendPushNotification(
|
||||||
|
userToInvite,
|
||||||
|
common.i18n.t(group.type === 'guild' ? 'invitedGuild' : 'invitedParty'),
|
||||||
|
group.name
|
||||||
|
);
|
||||||
|
|
||||||
let userInvited = await userToInvite.save();
|
let userInvited = await userToInvite.save();
|
||||||
if (group.type === 'guild') {
|
if (group.type === 'guild') {
|
||||||
return userInvited.invitations.guilds[userToInvite.invitations.guilds.length - 1];
|
return userInvited.invitations.guilds[userToInvite.invitations.guilds.length - 1];
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ import {
|
|||||||
sendTxn as sendTxnEmail,
|
sendTxn as sendTxnEmail,
|
||||||
} from '../../libs/api-v3/email';
|
} from '../../libs/api-v3/email';
|
||||||
import { quests as questScrolls } from '../../../../common/script/content';
|
import { quests as questScrolls } from '../../../../common/script/content';
|
||||||
|
import common from '../../../../common';
|
||||||
|
import { sendNotification as sendPushNotification } from '../../libs/api-v3/pushNotifications';
|
||||||
|
|
||||||
function canStartQuestAutomatically (group) {
|
function canStartQuestAutomatically (group) {
|
||||||
// If all members are either true (accepted) or false (rejected) return true
|
// If all members are either true (accepted) or false (rejected) return true
|
||||||
@@ -62,7 +64,7 @@ api.inviteToQuest = {
|
|||||||
let members = await User.find({
|
let members = await User.find({
|
||||||
'party._id': group._id,
|
'party._id': group._id,
|
||||||
_id: {$ne: user._id},
|
_id: {$ne: user._id},
|
||||||
}).select('auth.facebook auth.local preferences.emailNotifications profile.name')
|
}).select('auth.facebook auth.local preferences.emailNotifications profile.name pushDevices')
|
||||||
.exec();
|
.exec();
|
||||||
|
|
||||||
group.markModified('quest');
|
group.markModified('quest');
|
||||||
@@ -102,6 +104,13 @@ api.inviteToQuest = {
|
|||||||
// send out invites
|
// send out invites
|
||||||
let inviterVars = getUserInfo(user, ['name', 'email']);
|
let inviterVars = getUserInfo(user, ['name', 'email']);
|
||||||
let membersToEmail = members.filter(member => {
|
let membersToEmail = members.filter(member => {
|
||||||
|
// send push notifications while filtering members before sending emails
|
||||||
|
sendPushNotification(
|
||||||
|
member,
|
||||||
|
common.i18n.t('questInvitationTitle'),
|
||||||
|
common.i18n.t('questInvitationInfo', { quest: quest.text() })
|
||||||
|
);
|
||||||
|
|
||||||
return member.preferences.emailNotifications.invitedQuest !== false;
|
return member.preferences.emailNotifications.invitedQuest !== false;
|
||||||
});
|
});
|
||||||
sendTxnEmail(membersToEmail, `invite-${quest.boss ? 'boss' : 'collection'}-quest`, [
|
sendTxnEmail(membersToEmail, `invite-${quest.boss ? 'boss' : 'collection'}-quest`, [
|
||||||
|
|||||||
@@ -12,7 +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');
|
var pushNotify = require('./../api-v2/pushNotifications');
|
||||||
|
|
||||||
function revealMysteryItems(user) {
|
function revealMysteryItems(user) {
|
||||||
_.each(shared.content.gear.flat, function(item) {
|
_.each(shared.content.gear.flat, function(item) {
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ if (gcm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO test
|
// TODO test
|
||||||
export default function sendNotify (user, title, message, timeToLive = 15) {
|
export default function sendNotification (user, title, message, timeToLive = 15) {
|
||||||
// TODO need investigation:
|
// TODO need investigation:
|
||||||
// https://github.com/HabitRPG/habitrpg/issues/5252
|
// https://github.com/HabitRPG/habitrpg/issues/5252
|
||||||
|
|
||||||
if (!user) throw new Error('User is required');
|
if (!user) throw new Error('User is required.');
|
||||||
|
|
||||||
_.each(user.pushDevices, pushDevice => {
|
_.each(user.pushDevices, pushDevice => {
|
||||||
switch (pushDevice.type) {
|
switch (pushDevice.type) {
|
||||||
@@ -50,6 +50,7 @@ export default function sendNotify (user, title, message, timeToLive = 15) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'ios':
|
case 'ios':
|
||||||
|
// TODO implement
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import { sendTxn as sendTxnEmail } from '../libs/api-v3/email';
|
|||||||
import { quests as questScrolls } from '../../../common/script/content';
|
import { quests as questScrolls } from '../../../common/script/content';
|
||||||
import Q from 'q';
|
import Q from 'q';
|
||||||
import nconf from 'nconf';
|
import nconf from 'nconf';
|
||||||
|
import { sendNotification as sendPushNotification } from '../libs/api-v3/pushNotifications';
|
||||||
|
|
||||||
let Schema = mongoose.Schema;
|
let Schema = mongoose.Schema;
|
||||||
|
|
||||||
@@ -306,9 +307,12 @@ schema.methods.startQuest = async function startQuest (user) {
|
|||||||
// send notifications in the background without blocking
|
// send notifications in the background without blocking
|
||||||
User.find(
|
User.find(
|
||||||
{ _id: { $in: nonUserQuestMembers } },
|
{ _id: { $in: nonUserQuestMembers } },
|
||||||
'party.quest items.quests auth.facebook auth.local preferences.emailNotifications profile.name',
|
'party.quest items.quests auth.facebook auth.local preferences.emailNotifications pushDevices profile.name',
|
||||||
).exec().then(membersToEmail => {
|
).exec().then(membersToNotify => {
|
||||||
membersToEmail = _.filter(membersToEmail, (member) => {
|
let membersToEmail = _.filter(membersToNotify, (member) => {
|
||||||
|
// send push notifications and filter users that disabled emails
|
||||||
|
sendPushNotification(user, 'HabitRPG', `${shared.i18n.t('questStarted')}: ${quest.text()}`);
|
||||||
|
|
||||||
return member.preferences.emailNotifications.questStarted !== false &&
|
return member.preferences.emailNotifications.questStarted !== false &&
|
||||||
member._id !== user._id;
|
member._id !== user._id;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user