mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-07 06:25:50 +01:00
fix #3965
This commit is contained in:
@@ -340,7 +340,7 @@ var async = require('async'),
|
|||||||
'notifications:user_posted_to',
|
'notifications:user_posted_to',
|
||||||
'notifications:user_flagged_post_in'
|
'notifications:user_flagged_post_in'
|
||||||
],
|
],
|
||||||
isolated, differentiator, modifyIndex;
|
isolated, differentiators, differentiator, modifyIndex, set;
|
||||||
|
|
||||||
notifications = mergeIds.reduce(function(notifications, mergeId) {
|
notifications = mergeIds.reduce(function(notifications, mergeId) {
|
||||||
isolated = notifications.filter(function(notifObj) {
|
isolated = notifications.filter(function(notifObj) {
|
||||||
@@ -355,9 +355,24 @@ var async = require('async'),
|
|||||||
return notifications; // Nothing to merge
|
return notifications; // Nothing to merge
|
||||||
}
|
}
|
||||||
|
|
||||||
differentiator = isolated[0].mergeId.split('|')[1];
|
// Each isolated mergeId may have multiple differentiators, so process each separately
|
||||||
|
differentiators = isolated.reduce(function(cur, next) {
|
||||||
|
differentiator = next.mergeId.split('|')[1];
|
||||||
|
if (cur.indexOf(differentiator) === -1) {
|
||||||
|
cur.push(differentiator);
|
||||||
|
}
|
||||||
|
|
||||||
modifyIndex = notifications.indexOf(isolated[0]);
|
return cur;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
differentiators.forEach(function(differentiator) {
|
||||||
|
set = isolated.filter(function(notifObj) {
|
||||||
|
return notifObj.mergeId === (mergeId + '|' + differentiator);
|
||||||
|
});
|
||||||
|
modifyIndex = notifications.indexOf(set[0]);
|
||||||
|
if (modifyIndex === -1) {
|
||||||
|
return notifications;
|
||||||
|
}
|
||||||
|
|
||||||
switch(mergeId) {
|
switch(mergeId) {
|
||||||
case 'notifications:favourited_your_post_in': // intentional fall-through
|
case 'notifications:favourited_your_post_in': // intentional fall-through
|
||||||
@@ -365,24 +380,29 @@ var async = require('async'),
|
|||||||
case 'notifications:user_started_following_you':
|
case 'notifications:user_started_following_you':
|
||||||
case 'notifications:user_posted_to':
|
case 'notifications:user_posted_to':
|
||||||
case 'notifications:user_flagged_post_in':
|
case 'notifications:user_flagged_post_in':
|
||||||
var usernames = isolated.map(function(notifObj) {
|
var usernames = set.map(function(notifObj) {
|
||||||
return notifObj.user.username;
|
return notifObj.user.username;
|
||||||
});
|
});
|
||||||
var numUsers = usernames.length;
|
var numUsers = usernames.length;
|
||||||
|
|
||||||
// Update bodyShort
|
// Update bodyShort
|
||||||
if (numUsers === 2) {
|
if (numUsers === 2) {
|
||||||
isolated[0].bodyShort = '[[' + mergeId + '_dual, ' + usernames.join(', ') + ', ' + isolated[0].topicTitle + ']]'
|
notifications[modifyIndex].bodyShort = '[[' + mergeId + '_dual, ' + usernames.join(', ') + ', ' + notifications[modifyIndex].topicTitle + ']]'
|
||||||
} else {
|
} else {
|
||||||
isolated[0].bodyShort = '[[' + mergeId + '_multiple, ' + usernames[0] + ', ' + (numUsers-1) + ', ' + isolated[0].topicTitle + ']]'
|
notifications[modifyIndex].bodyShort = '[[' + mergeId + '_multiple, ' + usernames[0] + ', ' + (numUsers-1) + ', ' + notifications[modifyIndex].topicTitle + ']]'
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter out duplicates
|
// Filter out duplicates
|
||||||
return notifications.filter(function(notifObj, idx) {
|
notifications = notifications.filter(function(notifObj, idx) {
|
||||||
return notifObj.mergeId !== mergeId + '|' + differentiator || idx === modifyIndex;
|
if (notifObj.mergeId === (mergeId + '|' + differentiator) && idx !== modifyIndex) {
|
||||||
|
}
|
||||||
|
return !(notifObj.mergeId === (mergeId + '|' + differentiator) && idx !== modifyIndex);
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return notifications;
|
||||||
}, notifications);
|
}, notifications);
|
||||||
|
|
||||||
plugins.fireHook('filter:notifications.merge', {
|
plugins.fireHook('filter:notifications.merge', {
|
||||||
|
|||||||
Reference in New Issue
Block a user