Describe file uploads when notifying by email

Closes #7976
pull/8924/head
Diego Sampaio 8 years ago
parent b4f04c7888
commit 5135a849b7
No known key found for this signature in database
GPG Key ID: E060152B30502562
  1. 4
      packages/rocketchat-i18n/i18n/en.i18n.json
  2. 4
      packages/rocketchat-i18n/i18n/pt.i18n.json
  3. 79
      packages/rocketchat-lib/server/lib/sendEmailOnMessage.js
  4. 12
      packages/rocketchat-lib/server/models/Users.js

@ -1930,6 +1930,10 @@
"Username_is_already_in_here": "`@%s` is already in here.",
"Username_is_not_in_this_room": "The user `#%s` is not in this room.",
"Username_Placeholder": "Please enter usernames...",
"User_sent_a_message_on_channel": "<strong>__username__</strong> sent a message on <strong>__channel__</strong>:",
"User_uploaded_a_file_on_channel": "<strong>__username__</strong> uploaded a file on <strong>__channel__</strong>:",
"User_sent_a_message_to_you": "<strong>__username__</strong> sent you a message:",
"User_uploaded_a_file_to_you": "<strong>__username__</strong> sent you a file:",
"Username_title": "Register username",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ wants to start OTR. Do you want to accept?",
"Users": "Users",

@ -1246,6 +1246,10 @@
"User_removed": "Usuário removido",
"User_removed_by": "Usuário <em>__user_removed__</em> removido da conversa por <em>__user_by__</em>.",
"User_Settings": "Configurações do Usuário",
"User_sent_a_message_on_channel": "<strong>__username__</strong> enviou uma mensagem em <strong>__channel__</strong>:",
"User_uploaded_a_file_on_channel": "<strong>__username__</strong> enviou um arquivo em <strong>__channel__</strong>:",
"User_sent_a_message_to_you": "<strong>__username__</strong> enviou uma mensagem para você:",
"User_uploaded_a_file_to_you": "<strong>__username__</strong> enviou um arquivo para você:",
"User_unmuted_by": "<em>__user_by__</em> permitiu que <em>__user_unmuted__</em> fale na sala.",
"User_unmuted_in_room": "Usuário pode falar na sala",
"User_updated_successfully": "Usuário atualizado com sucesso",

@ -1,6 +1,57 @@
import moment from 'moment';
import s from 'underscore.string';
function getEmailContent({ messageContent, message, user, room }) {
const lng = user && user.language || RocketChat.settings.get('language') || 'en';
const roomName = `#${ RocketChat.settings.get('UI_Allow_room_names_with_special_chars') ? room.fname || room.name : room.name }`;
const userName = RocketChat.settings.get('UI_Use_Real_Name') ? message.u.name || message.u.username : message.u.username;
const header = TAPi18n.__(room.t === 'd' ? 'User_sent_a_message_to_you' : 'User_sent_a_message_on_channel', {
username: userName,
channel: roomName,
lng
});
if (messageContent) {
return `${ header }<br/><br/>${ messageContent }`;
}
if (message.file) {
const fileHeader = TAPi18n.__(room.t === 'd' ? 'User_uploaded_a_file_to_you' : 'User_uploaded_a_file_on_channel', {
username: userName,
channel: roomName,
lng
});
let content = `${ TAPi18n.__('Attachment_File_Uploaded') }: ${ message.file.name }`;
if (message.attachments && message.attachments.length === 1 && message.attachments[0].description !== '') {
content += `<br/><br/>${ message.attachments[0].description }`;
}
return `${ fileHeader }<br/><br/>${ content }`;
}
if (message.attachments.length > 0) {
const [ attachment ] = message.attachments;
let content = '';
if (attachment.title) {
content += `${ attachment.title }<br/>`;
}
if (attachment.text) {
content += `${ attachment.text }<br/>`;
}
return `${ header }<br/><br/>${ content }`;
}
return header;
}
RocketChat.callbacks.add('afterSaveMessage', function(message, room) {
// skips this callback if the message was edited
if (message.editedAt) {
@ -26,19 +77,23 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) {
};
const divisorMessage = '<hr style="margin: 20px auto; border: none; border-bottom: 1px solid #dddddd;">';
let messageHTML = s.escapeHTML(message.msg);
message = RocketChat.callbacks.run('renderMessage', message);
if (message.tokens && message.tokens.length > 0) {
message.tokens.forEach((token) => {
token.text = token.text.replace(/([^\$])(\$[^\$])/gm, '$1$$$2');
messageHTML = messageHTML.replace(token.token, token.text);
});
let messageHTML;
if (message.msg !== '') {
messageHTML = s.escapeHTML(message.msg);
message = RocketChat.callbacks.run('renderMessage', message);
if (message.tokens && message.tokens.length > 0) {
message.tokens.forEach((token) => {
token.text = token.text.replace(/([^\$])(\$[^\$])/gm, '$1$$$2');
messageHTML = messageHTML.replace(token.token, token.text);
});
}
messageHTML = messageHTML.replace(/\n/gm, '<br/>');
}
const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || '');
let footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || '');
messageHTML = messageHTML.replace(/\n/gm, '<br/>');
const usersToSendEmail = {};
if (room.t === 'd') {
@ -166,11 +221,17 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) {
}
user.emails.some((email) => {
if (email.verified) {
const content = getEmailContent({
messageContent: messageHTML,
message,
user,
room
});
email = {
to: email.address,
from: RocketChat.settings.get('From_Email'),
subject: emailSubject,
html: header + messageHTML + divisorMessage + (linkByUser[user._id] || defaultLink) + footer
html: header + content + divisorMessage + (linkByUser[user._id] || defaultLink) + footer
};
// If direct reply enabled, email content with headers
if (RocketChat.settings.get('Direct_Reply_Enable')) {

@ -541,7 +541,17 @@ Find users to send a message by email if:
'emails.verified': true
};
return this.find(query, { fields: { name: 1, username: 1, emails: 1, 'settings.preferences.emailNotificationMode': 1 } });
const options = {
fields: {
name: 1,
username: 1,
emails: 1,
'settings.preferences.emailNotificationMode': 1,
language: 1
}
};
return this.find(query, options);
}
}

Loading…
Cancel
Save