- Notifications.getMultiple now takes an optional uid parameter
- If a notification link in dropdown points to a topic and you're
  in said topic, you will be scrolled to the post instead of
  ajaxified to it.
This commit is contained in:
Julian Lam
2017-08-18 16:30:04 -04:00
parent 1159abf9ec
commit c1d7b06ded
3 changed files with 48 additions and 10 deletions

View File

@@ -13,6 +13,7 @@ var groups = require('./groups');
var meta = require('./meta');
var batch = require('./batch');
var plugins = require('./plugins');
var posts = require('./posts');
var utils = require('./utils');
var Notifications = module.exports;
@@ -22,13 +23,19 @@ Notifications.startJobs = function () {
new cron('*/30 * * * *', Notifications.prune, null, true);
};
Notifications.get = function (nid, callback) {
Notifications.getMultiple([nid], function (err, notifications) {
Notifications.get = function (nid, uid, callback) {
Notifications.getMultiple([nid], uid, function (err, notifications) {
callback(err, Array.isArray(notifications) && notifications.length ? notifications[0] : null);
});
};
Notifications.getMultiple = function (nids, callback) {
Notifications.getMultiple = function (nids, uid, callback) {
if (typeof uid === 'function' && !callback) {
// no uid passed in
callback = uid;
uid = undefined;
}
if (!Array.isArray(nids) || !nids.length) {
return setImmediate(callback, null, []);
}
@@ -37,8 +44,19 @@ Notifications.getMultiple = function (nids, callback) {
});
var notifications;
var userSettings;
async.waterfall([
function (next) {
if (!uid) {
return setImmediate(next);
}
User.getSettings(uid, function (err, settings) {
userSettings = settings;
next(err);
});
},
function (next) {
db.getObjects(keys, next);
},
@@ -51,7 +69,7 @@ Notifications.getMultiple = function (nids, callback) {
User.getUsersFields(userKeys, ['username', 'userslug', 'picture'], next);
},
function (usersData, next) {
notifications.forEach(function (notification, index) {
async.eachOf(notifications, function (notification, index, next) {
if (notification) {
notification.datetimeISO = utils.toISOString(notification.datetime);
@@ -68,10 +86,19 @@ Notifications.getMultiple = function (nids, callback) {
} else if (notification.image === 'brand:logo' || !notification.image) {
notification.image = meta.config['brand:logo'] || nconf.get('relative_path') + '/logo.png';
}
}
});
next(null, notifications);
if (notification.path.startsWith('/post/')) {
posts.getPidIndex(notification.pid, notification.tid, userSettings.topicPostSort, function (err, index) {
notification.index = index;
next(err);
});
} else {
next();
}
}
}, function (err) {
next(err, notifications);
});
},
], callback);
};