diff --git a/test/api/v3/integration/members/POST-flag_private_message.test.js b/test/api/v3/integration/members/POST-flag_private_message.test.js index bf7b67f2e1..c8f9eceeb1 100644 --- a/test/api/v3/integration/members/POST-flag_private_message.test.js +++ b/test/api/v3/integration/members/POST-flag_private_message.test.js @@ -45,7 +45,6 @@ describe('POST /members/flag-private-message/:messageId', () => { expect(sendersMessageInReceiversInbox).to.exist; await expect(receiver.post(`/members/flag-private-message/${sendersMessageInReceiversInbox.id}`)).to.eventually.be.ok; - }); it('Returns an error when user tries to flag a private message that is already flagged', async () => { diff --git a/website/server/libs/chatReporting/inboxChatReporter.js b/website/server/libs/chatReporting/inboxChatReporter.js index 36751d354f..7f94237afc 100644 --- a/website/server/libs/chatReporting/inboxChatReporter.js +++ b/website/server/libs/chatReporting/inboxChatReporter.js @@ -1,4 +1,5 @@ import nconf from 'nconf'; +import { model as User } from '../../models/user'; import ChatReporter from './chatReporter'; import { @@ -18,7 +19,8 @@ export default class InboxChatReporter extends ChatReporter { constructor (req, res) { super(req, res); - this.user = res.locals.user; + this.reporter = res.locals.user; + this.inboxUser = res.locals.user; } async validate () { @@ -27,7 +29,11 @@ export default class InboxChatReporter extends ChatReporter { let validationErrors = this.req.validationErrors(); if (validationErrors) throw validationErrors; - let messages = this.user.inbox.messages; + if (this.reporter.contributor.admin && this.req.query.userId) { + this.inboxUser = await User.findOne({_id: this.req.query.userId}); + } + + let messages = this.inboxUser.inbox.messages; const message = _find(messages, (m) => m.id === this.req.params.messageId); if (!message) throw new NotFound(this.res.t('messageGroupChatNotFound')); @@ -55,7 +61,7 @@ export default class InboxChatReporter extends ChatReporter { slack.sendInboxFlagNotification({ authorEmail: this.authorEmail, - flagger: this.user, + flagger: this.reporter, message, userComment, }); @@ -64,26 +70,26 @@ export default class InboxChatReporter extends ChatReporter { updateMessageAndSave (message, updateFunc) { updateFunc(message); - this.user.inbox.messages[message.id] = message; - this.user.markModified('inbox.messages'); + this.inboxUser.inbox.messages[message.id] = message; + this.inboxUser.markModified('inbox.messages'); - return this.user.save(); + return this.inboxUser.save(); } flagInboxMessage (message) { // Log user ids that have flagged the message if (!message.flags) message.flags = {}; // TODO fix error type - if (message.flags[this.user._id] && !this.user.contributor.admin) { + if (message.flags[this.reporter._id] && !this.reporter.contributor.admin) { throw new NotFound(this.res.t('messageGroupChatFlagAlreadyReported')); } return this.updateMessageAndSave(message, (m) => { - m.flags[this.user._id] = true; + m.flags[this.reporter._id] = true; // Log total number of flags (publicly viewable) if (!m.flagCount) m.flagCount = 0; - if (this.user.contributor.admin) { + if (this.reporter.contributor.admin) { // Arbitrary amount, higher than 2 m.flagCount = 5; } else { diff --git a/website/server/libs/slack.js b/website/server/libs/slack.js index 0d4060ce38..a8f89c96e3 100644 --- a/website/server/libs/slack.js +++ b/website/server/libs/slack.js @@ -133,7 +133,7 @@ function sendInboxFlagNotification ({ title, title_link: titleLink, text: messageText, - footer: `<${SLACK_FLAGGING_FOOTER_LINK}?groupId=privateMessages&chatId=${message.id}|Flag this message>`, + footer: `<${SLACK_FLAGGING_FOOTER_LINK}?userId=${flagger.id}&chatMessageId=${message.id}|Flag this message>`, mrkdwn_in: [ 'text', ],