diff --git a/src/api/groups.js b/src/api/groups.js index 1314f6c397..36f11471d2 100644 --- a/src/api/groups.js +++ b/src/api/groups.js @@ -171,10 +171,11 @@ groupsAPI.leave = async function (caller, data) { throw new Error('[[error:no-privileges]]'); } - const username = await user.getUserField(data.uid, 'username'); + const { displayname } = await user.getUserFields(data.uid, ['username']); + const notification = await notifications.create({ type: 'group-leave', - bodyShort: `[[groups:membership.leave.notification_title, ${username}, ${groupName}]]`, + bodyShort: `[[groups:membership.leave.notification_title, ${displayname}, ${groupName}]]`, nid: `group:${validator.escape(groupName)}:uid:${data.uid}:group-leave`, path: `/groups/${slugify(groupName)}`, from: data.uid, diff --git a/src/api/users.js b/src/api/users.js index 9b7b2ba1d1..1803259b39 100644 --- a/src/api/users.js +++ b/src/api/users.js @@ -137,9 +137,11 @@ usersAPI.follow = async function (caller, data) { }); const userData = await user.getUserFields(caller.uid, ['username', 'userslug']); + const { displayname } = userData; + const notifObj = await notifications.create({ type: 'follow', - bodyShort: `[[notifications:user_started_following_you, ${userData.username}]]`, + bodyShort: `[[notifications:user_started_following_you, ${displayname}]]`, nid: `follow:${data.uid}:uid:${caller.uid}`, from: caller.uid, path: `/uid/${data.uid}/followers`, diff --git a/src/flags.js b/src/flags.js index b97ecbfeba..60543ae1ce 100644 --- a/src/flags.js +++ b/src/flags.js @@ -736,6 +736,9 @@ Flags.notify = async function (flagObj, uid) { ]); let uids = admins.concat(globalMods); let notifObj = null; + + const { displayname } = flagObj.reports[flagObj.reports.length - 1].reporter; + if (flagObj.type === 'post') { const [title, cid] = await Promise.all([ topics.getTitleByPid(flagObj.targetId), @@ -747,7 +750,7 @@ Flags.notify = async function (flagObj, uid) { notifObj = await notifications.create({ type: 'new-post-flag', - bodyShort: `[[notifications:user_flagged_post_in, ${flagObj.reports[flagObj.reports.length - 1].reporter.username}, ${titleEscaped}]]`, + bodyShort: `[[notifications:user_flagged_post_in, ${displayname}, ${titleEscaped}]]`, bodyLong: await plugins.hooks.fire('filter:parse.raw', String(flagObj.description || '')), pid: flagObj.targetId, path: `/flags/${flagObj.flagId}`, @@ -760,7 +763,7 @@ Flags.notify = async function (flagObj, uid) { } else if (flagObj.type === 'user') { notifObj = await notifications.create({ type: 'new-user-flag', - bodyShort: `[[notifications:user_flagged_user, ${flagObj.reports[flagObj.reports.length - 1].reporter.username}, ${flagObj.target.username}]]`, + bodyShort: `[[notifications:user_flagged_user, ${displayname}, ${flagObj.target.user.displayname}]]`, bodyLong: await plugins.hooks.fire('filter:parse.raw', String(flagObj.description || '')), path: `/flags/${flagObj.flagId}`, nid: `flag:user:${flagObj.targetId}`, diff --git a/src/groups/invite.js b/src/groups/invite.js index 74b7453c4e..5cabdbdcdf 100644 --- a/src/groups/invite.js +++ b/src/groups/invite.js @@ -11,12 +11,13 @@ const notifications = require('../notifications'); module.exports = function (Groups) { Groups.requestMembership = async function (groupName, uid) { await inviteOrRequestMembership(groupName, uid, 'request'); - const username = await user.getUserField(uid, 'username'); + const { displayname } = await user.getUserFields(uid, ['username']); + const [notification, owners] = await Promise.all([ notifications.create({ type: 'group-request-membership', - bodyShort: `[[groups:request.notification_title, ${username}]]`, - bodyLong: `[[groups:request.notification_text, ${username}, ${groupName}]]`, + bodyShort: `[[groups:request.notification_title, ${displayname}]]`, + bodyLong: `[[groups:request.notification_text, ${displayname}, ${groupName}]]`, nid: `group:${groupName}:uid:${uid}:request`, path: `/groups/${slugify(groupName)}`, from: uid, diff --git a/src/messaging/notifications.js b/src/messaging/notifications.js index bd03f2dd48..52fcecce8c 100644 --- a/src/messaging/notifications.js +++ b/src/messaging/notifications.js @@ -57,11 +57,13 @@ module.exports = function (Messaging) { return; } + const { displayname } = messageObj.fromUser; + const isGroupChat = await Messaging.isGroupChat(roomId); const notification = await notifications.create({ type: isGroupChat ? 'new-group-chat' : 'new-chat', - subject: `[[email:notif.chat.subject, ${messageObj.fromUser.username}]]`, - bodyShort: `[[notifications:new_message_from, ${messageObj.fromUser.username}]]`, + subject: `[[email:notif.chat.subject, ${displayname}]]`, + bodyShort: `[[notifications:new_message_from, ${displayname}]]`, bodyLong: messageObj.content, nid: `chat_${fromuid}_${roomId}`, from: fromuid, diff --git a/src/socket.io/helpers.js b/src/socket.io/helpers.js index c397a43afd..ad3ea3a87f 100644 --- a/src/socket.io/helpers.js +++ b/src/socket.io/helpers.js @@ -80,18 +80,20 @@ SocketHelpers.sendNotificationToPostOwner = async function (pid, fromuid, comman if (!canRead || isIgnoring[0] || !postData.uid || fromuid === postData.uid) { return; } - const [username, topicTitle, postObj] = await Promise.all([ - user.getUserField(fromuid, 'username'), + const [userData, topicTitle, postObj] = await Promise.all([ + user.getUserFields(fromuid, ['username']), topics.getTopicField(postData.tid, 'title'), posts.parsePost(postData), ]); + const { displayname } = userData; + const title = utils.decodeHTMLEntities(topicTitle); const titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); const notifObj = await notifications.create({ type: command, - bodyShort: `[[${notification}, ${username}, ${titleEscaped}]]`, + bodyShort: `[[${notification}, ${displayname}, ${titleEscaped}]]`, bodyLong: postObj.content, pid: pid, tid: postData.tid, @@ -113,20 +115,23 @@ SocketHelpers.sendNotificationToTopicOwner = async function (tid, fromuid, comma fromuid = parseInt(fromuid, 10); - const [username, topicData] = await Promise.all([ - user.getUserField(fromuid, 'username'), + const [userData, topicData] = await Promise.all([ + user.getUserFields(fromuid, ['username']), topics.getTopicFields(tid, ['uid', 'slug', 'title']), ]); if (fromuid === topicData.uid) { return; } + + const { displayname } = userData; + const ownerUid = topicData.uid; const title = utils.decodeHTMLEntities(topicData.title); const titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); const notifObj = await notifications.create({ - bodyShort: `[[${notification}, ${username}, ${titleEscaped}]]`, + bodyShort: `[[${notification}, ${displayname}, ${titleEscaped}]]`, path: `/topic/${topicData.slug}`, nid: `${command}:tid:${tid}:uid:${fromuid}`, from: fromuid, diff --git a/src/socket.io/user/profile.js b/src/socket.io/user/profile.js index 6f0f3b7573..1d65e814ab 100644 --- a/src/socket.io/user/profile.js +++ b/src/socket.io/user/profile.js @@ -93,8 +93,9 @@ module.exports = function (SocketUser) { child.on('exit', async () => { await db.deleteObjectField('locks', `export:${data.uid}${type}`); const userData = await user.getUserFields(data.uid, ['username', 'userslug']); + const { displayname } = userData; const n = await notifications.create({ - bodyShort: `[[notifications:${type}-exported, ${userData.username}]]`, + bodyShort: `[[notifications:${type}-exported, ${displayname}]]`, path: `/api/user/${userData.userslug}/export/${type}`, nid: `${type}:export:${data.uid}`, from: data.uid, diff --git a/src/topics/create.js b/src/topics/create.js index 512e70eda7..0fe4e399e6 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -192,9 +192,11 @@ module.exports = function (Topics) { } if (parseInt(uid, 10) || meta.config.allowGuestReplyNotifications) { + const { displayname } = postData.user; + Topics.notifyFollowers(postData, uid, { type: 'new-reply', - bodyShort: translator.compile('notifications:user_posted_to', postData.user.username, postData.topic.title), + bodyShort: translator.compile('notifications:user_posted_to', displayname, postData.topic.title), nid: `new_post:tid:${postData.topic.tid}:pid:${postData.pid}:uid:${uid}`, mergeId: `notifications:user_posted_to|${postData.topic.tid}`, }); diff --git a/src/user/notifications.js b/src/user/notifications.js index b7be8262d0..57617cc5d5 100644 --- a/src/user/notifications.js +++ b/src/user/notifications.js @@ -184,7 +184,7 @@ UserNotifications.sendTopicNotificationToFollowers = async function (uid, topicD const notifObj = await notifications.create({ type: 'new-topic', - bodyShort: `[[notifications:user_posted_topic, ${postData.user.username}, ${title}]]`, + bodyShort: `[[notifications:user_posted_topic, ${postData.user.displayname}, ${title}]]`, bodyLong: postData.content, pid: postData.pid, path: `/post/${postData.pid}`,