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/topics/follow.js

68 lines
1.7 KiB
JavaScript

'use strict';
var async = require('async'),
nconf = require('nconf'),
10 years ago
S = require('string'),
db = require('../database'),
user = require('../user'),
11 years ago
posts = require('../posts'),
postTools = require('../postTools'),
notifications = require('../notifications');
module.exports = function(Topics) {
Topics.isFollowing = function(tids, uid, callback) {
if (!Array.isArray(tids)) {
return callback();
}
if (!parseInt(uid, 10)) {
return callback(null, tids.map(function() { return false; }));
}
var keys = tids.map(function(tid) {
return 'tid:' + tid + ':followers';
})
db.isMemberOfSets(keys, uid, callback);
};
Topics.getFollowers = function(tid, callback) {
db.getSetMembers('tid:' + tid + ':followers', callback);
};
10 years ago
Topics.notifyFollowers = function(postData, exceptUid) {
Topics.getFollowers(postData.topic.tid, function(err, followers) {
11 years ago
if (err || !Array.isArray(followers) || !followers.length) {
return;
}
11 years ago
var index = followers.indexOf(exceptUid.toString());
if (index !== -1) {
followers.splice(index, 1);
}
if (!followers.length) {
return;
}
10 years ago
var title = postData.topic.title;
if (title) {
title = S(title).decodeHTMLEntities().s;
}
notifications.create({
10 years ago
bodyShort: '[[notifications:user_posted_to, ' + postData.user.username + ', ' + title + ']]',
bodyLong: postData.content,
pid: postData.pid,
10 years ago
nid: 'tid:' + postData.topic.tid + ':pid:' + postData.pid + ':uid:' + exceptUid,
tid: postData.topic.tid,
from: exceptUid
}, function(err, notification) {
if (!err && notification) {
notifications.push(notification, followers);
11 years ago
}
});
});
};
};