123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // a map of notification service, like email, web, IM, qq, etc.
- // serviceName -> callback(user, title, description, params)
- // expected arguments to callback:
- // - user: Meteor user object
- // - title: String, TAPi18n key
- // - description, String, TAPi18n key
- // - params: Object, values extracted from context, to used for above two TAPi18n keys
- // see example call to Notifications.notify() in models/activities.js
- const notifyServices = {};
- Notifications = {
- subscribe: (serviceName, callback) => {
- notifyServices[serviceName] = callback;
- },
- unsubscribe: (serviceName) => {
- if (typeof notifyServices[serviceName] === 'function')
- delete notifyServices[serviceName];
- },
- // filter recipients according to user settings for notification
- getUsers: (participants, watchers) => {
- const userMap = {};
- participants.forEach((userId) => {
- if (userMap[userId]) return;
- const user = Users.findOne(userId);
- if (user && user.hasTag('notify-participate')) {
- userMap[userId] = user;
- }
- });
- watchers.forEach((userId) => {
- if (userMap[userId]) return;
- const user = Users.findOne(userId);
- if (user && user.hasTag('notify-watch')) {
- userMap[userId] = user;
- }
- });
- return _.map(userMap, (v) => v);
- },
- notify: (user, title, description, params) => {
- for(const k in notifyServices) {
- const notifyImpl = notifyServices[k];
- if (notifyImpl && typeof notifyImpl === 'function') notifyImpl(user, title, description, params);
- }
- },
- };
|