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.
nodebb/src/user/jobs.js

67 lines
1.8 KiB
JavaScript

'use strict';
var db = require('../database'),
async = require('async'),
winston = require('winston'),
cronJob = require('cron').CronJob,
nconf = require('nconf'),
user = require('../user'),
UserNotifications = require('./notifications'),
topics = require('../topics'),
emailer = require('../emailer'),
meta = require('../meta');
module.exports = function(User) {
User.startJobs = function() {
winston.info('[user.startJobs] Registering User Jobs');
new cronJob('0 0 17 * * *', function() {
User.sendDailyDigests();
}, null, true);
};
User.sendDailyDigests = function() {
async.parallel({
recent: function(next) {
topics.getLatestTopics(0, 0, 10, 'day', next);
},
uids: function(next) {
db.getSortedSetRange('users:joindate', 0, -1, next);
}
}, function(err, data) {
var now = new Date();
async.each(data.uids, function(uid, next) {
UserNotifications.getDailyUnread(uid, function(err, notifications) {
if (!err && notifications && notifications.length) {
user.getUserField(uid, 'username', function(err, username) {
// Send daily digest email
// winston.info('[user/notifications] Sending Daily Digest to uid ' + uid);
emailer.send('dailydigest', uid, {
subject: '[' + meta.config.title + '] Daily Digest for ' + now.getFullYear()+ '/' + (now.getMonth()+1) + '/' + now.getDate(),
username: username,
url: nconf.get('url'),
site_title: meta.config.title,
notifications: notifications,
recent: data.recent.topics
});
});
}
next(err);
});
}, function(err) {
// When finished...
if (!err) {
winston.info('[user/notifications] Daily Digests sent!');
} else {
winston.error('[user/notifications] Could not send daily digests: ' + err.message);
}
});
});
};
};