1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00

feat: SMTP integration and email notifications (#631)

This commit is contained in:
Edouard 2024-03-22 00:14:09 +01:00 committed by Maksim Eltyshev
parent 803e14c9e1
commit ca4d6761cd
14 changed files with 188 additions and 4 deletions

View file

@ -14,6 +14,40 @@ const valuesValidator = (value) => {
return true;
};
// TODO: use templates (views) to build html
const buildAndSendEmail = async (user, board, card, action, notifiableUser) => {
let emailData;
switch (action.type) {
case Action.Types.MOVE_CARD:
emailData = {
subject: `${user.name} moved ${card.name} from ${action.data.fromList.name} to ${action.data.toList.name} on ${board.name}`,
html:
`<p>${user.name} moved ` +
`<a href="${process.env.BASE_URL}/cards/${card.id}">${card.name}</a> ` +
`from ${action.data.fromList.name} to ${action.data.toList.name} ` +
`on <a href="${process.env.BASE_URL}/boards/${board.id}">${board.name}</a></p>`,
};
break;
case Action.Types.COMMENT_CARD:
emailData = {
subject: `${user.name} left a new comment to ${card.name} on ${board.name}`,
html:
`<p>${user.name} left a new comment to ` +
`<a href="${process.env.BASE_URL}/cards/${card.id}">${card.name}</a> ` +
`on <a href="${process.env.BASE_URL}/boards/${board.id}">${board.name}</a></p>` +
`<p>${action.data.text}</p>`,
};
break;
default:
return;
}
await sails.helpers.utils.sendEmail.with({
...emailData,
to: notifiableUser.email,
});
};
module.exports = {
inputs: {
values: {
@ -21,6 +55,18 @@ module.exports = {
custom: valuesValidator,
required: true,
},
user: {
type: 'ref',
required: true,
},
board: {
type: 'ref',
required: true,
},
card: {
type: 'ref',
required: true,
},
},
async fn(inputs) {
@ -40,6 +86,17 @@ module.exports = {
item: notification,
});
if (sails.hooks.smtp.isActive()) {
let notifiableUser;
if (values.user) {
notifiableUser = values.user;
} else {
notifiableUser = await sails.helpers.users.getOne(notification.userId);
}
buildAndSendEmail(inputs.user, inputs.board, inputs.card, values.action, notifiableUser);
}
return notification;
},
};