mirror of
https://github.com/plankanban/planka.git
synced 2025-07-18 20:59:44 +02:00
feat: Log action when user is removed from card
This commit is contained in:
parent
eeb52d19bb
commit
3aedbff5d0
9 changed files with 86 additions and 17 deletions
|
@ -113,6 +113,36 @@ const Item = React.memo(({ id }) => {
|
|||
</Trans>
|
||||
);
|
||||
|
||||
break;
|
||||
case ActivityTypes.REMOVE_MEMBER_FROM_CARD:
|
||||
contentNode =
|
||||
user.id === activity.data.user.id ? (
|
||||
<Trans
|
||||
i18nKey="common.userLeftThisCard"
|
||||
values={{
|
||||
user: userName,
|
||||
}}
|
||||
>
|
||||
<span className={styles.author}>{userName}</span>
|
||||
<span className={styles.text}>{' left this card'}</span>
|
||||
</Trans>
|
||||
) : (
|
||||
<Trans
|
||||
i18nKey="common.userRemovedUserFromThisCard"
|
||||
values={{
|
||||
actorUser: userName,
|
||||
removedUser: activity.data.user.name,
|
||||
}}
|
||||
>
|
||||
<span className={styles.author}>{userName}</span>
|
||||
<span className={styles.text}>
|
||||
{' removed '}
|
||||
{activity.data.user.name}
|
||||
{' from this card'}
|
||||
</span>
|
||||
</Trans>
|
||||
);
|
||||
|
||||
break;
|
||||
default:
|
||||
contentNode = null;
|
||||
|
|
|
@ -91,6 +91,7 @@ export const ActivityTypes = {
|
|||
CREATE_CARD: 'createCard',
|
||||
MOVE_CARD: 'moveCard',
|
||||
ADD_MEMBER_TO_CARD: 'addMemberToCard',
|
||||
REMOVE_MEMBER_FROM_CARD: 'removeMemberFromCard',
|
||||
};
|
||||
|
||||
export const NotificationTypes = {
|
||||
|
|
|
@ -291,9 +291,12 @@ export default {
|
|||
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
|
||||
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
|
||||
userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}</2>',
|
||||
userLeftThisCard: '<0>{{user}}</0><1> left this card</1>',
|
||||
userMovedCardFromListToList: '{{user}} moved <2>{{card}}</2> from {{fromList}} to {{toList}}',
|
||||
userMovedThisCardFromListToList:
|
||||
'<0>{{user}}</0><1> moved this card from {{fromList}} to {{toList}}</1>',
|
||||
userRemovedUserFromThisCard:
|
||||
'<0>{{actorUser}}</0><1> removed {{removedUser}} from this card</1>',
|
||||
username: 'Username',
|
||||
users: 'Users',
|
||||
viewer: 'Viewer',
|
||||
|
|
|
@ -286,9 +286,12 @@ export default {
|
|||
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
|
||||
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
|
||||
userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}</2>',
|
||||
userLeftThisCard: '<0>{{user}}</0><1> left this card</1>',
|
||||
userMovedCardFromListToList: '{{user}} moved <2>{{card}}</2> from {{fromList}} to {{toList}}',
|
||||
userMovedThisCardFromListToList:
|
||||
'<0>{{user}}</0><1> moved this card from {{fromList}} to {{toList}}</1>',
|
||||
userRemovedUserFromThisCard:
|
||||
'<0>{{actorUser}}</0><1> removed {{removedUser}} from this card</1>',
|
||||
username: 'Username',
|
||||
users: 'Users',
|
||||
viewer: 'Viewer',
|
||||
|
|
|
@ -76,7 +76,7 @@ module.exports = {
|
|||
const isBoardMember = await sails.helpers.users.isBoardMember(user.id, board.id);
|
||||
|
||||
if (!isBoardMember) {
|
||||
throw Errors.USER_NOT_FOUND;
|
||||
throw Errors.USER_NOT_FOUND; // Forbidden
|
||||
}
|
||||
|
||||
const cardMembership = await sails.helpers.cardMemberships.createOne
|
||||
|
|
|
@ -70,7 +70,10 @@ module.exports = {
|
|||
throw Errors.USER_NOT_CARD_MEMBER;
|
||||
}
|
||||
|
||||
const user = await User.qm.getOneById(cardMembership.userId);
|
||||
|
||||
cardMembership = await sails.helpers.cardMemberships.deleteOne.with({
|
||||
user,
|
||||
project,
|
||||
board,
|
||||
list,
|
||||
|
|
|
@ -142,8 +142,8 @@ module.exports = {
|
|||
user: values.user,
|
||||
});
|
||||
|
||||
if (action.type !== Action.Types.CREATE_CARD) {
|
||||
if (action.type === Action.Types.ADD_MEMBER_TO_CARD) {
|
||||
if (Action.INTERNAL_NOTIFIABLE_TYPES.includes(action.type)) {
|
||||
if (Action.PERSONAL_NOTIFIABLE_TYPES.includes(action.type)) {
|
||||
if (values.user !== action.data.user.id) {
|
||||
await sails.helpers.notifications.createOne.with({
|
||||
values: {
|
||||
|
@ -195,23 +195,25 @@ module.exports = {
|
|||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const notificationServices = await NotificationService.qm.getByBoardId(inputs.board.id);
|
||||
if (Action.EXTERNAL_NOTIFIABLE_TYPES.includes(action.type)) {
|
||||
const notificationServices = await NotificationService.qm.getByBoardId(inputs.board.id);
|
||||
|
||||
if (notificationServices.length > 0) {
|
||||
const services = notificationServices.map((notificationService) =>
|
||||
_.pick(notificationService, ['url', 'format']),
|
||||
);
|
||||
if (notificationServices.length > 0) {
|
||||
const services = notificationServices.map((notificationService) =>
|
||||
_.pick(notificationService, ['url', 'format']),
|
||||
);
|
||||
|
||||
buildAndSendNotifications(
|
||||
services,
|
||||
inputs.board,
|
||||
values.card,
|
||||
action,
|
||||
values.user,
|
||||
sails.helpers.utils.makeTranslator(),
|
||||
);
|
||||
}
|
||||
buildAndSendNotifications(
|
||||
services,
|
||||
inputs.board,
|
||||
values.card,
|
||||
action,
|
||||
values.user,
|
||||
sails.helpers.utils.makeTranslator(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,10 @@ module.exports = {
|
|||
type: 'ref',
|
||||
required: true,
|
||||
},
|
||||
user: {
|
||||
type: 'ref',
|
||||
required: true,
|
||||
},
|
||||
project: {
|
||||
type: 'ref',
|
||||
required: true,
|
||||
|
@ -52,6 +56,7 @@ module.exports = {
|
|||
buildData: () => ({
|
||||
item: cardMembership,
|
||||
included: {
|
||||
users: [inputs.user],
|
||||
projects: [inputs.project],
|
||||
boards: [inputs.board],
|
||||
lists: [inputs.list],
|
||||
|
@ -75,6 +80,20 @@ module.exports = {
|
|||
},
|
||||
});
|
||||
}
|
||||
|
||||
await sails.helpers.actions.createOne.with({
|
||||
values: {
|
||||
type: Action.Types.REMOVE_MEMBER_FROM_CARD,
|
||||
data: {
|
||||
user: _.pick(inputs.user, ['id', 'name']),
|
||||
},
|
||||
user: inputs.actorUser,
|
||||
card: inputs.card,
|
||||
},
|
||||
project: inputs.project,
|
||||
board: inputs.board,
|
||||
list: inputs.list,
|
||||
});
|
||||
}
|
||||
|
||||
return cardMembership;
|
||||
|
|
|
@ -14,10 +14,18 @@ const Types = {
|
|||
CREATE_CARD: 'createCard',
|
||||
MOVE_CARD: 'moveCard',
|
||||
ADD_MEMBER_TO_CARD: 'addMemberToCard',
|
||||
REMOVE_MEMBER_FROM_CARD: 'removeMemberFromCard',
|
||||
};
|
||||
|
||||
const INTERNAL_NOTIFIABLE_TYPES = [Types.MOVE_CARD, Types.ADD_MEMBER_TO_CARD];
|
||||
const EXTERNAL_NOTIFIABLE_TYPES = [Types.CREATE_CARD, Types.MOVE_CARD];
|
||||
const PERSONAL_NOTIFIABLE_TYPES = [Types.ADD_MEMBER_TO_CARD];
|
||||
|
||||
module.exports = {
|
||||
Types,
|
||||
INTERNAL_NOTIFIABLE_TYPES,
|
||||
EXTERNAL_NOTIFIABLE_TYPES,
|
||||
PERSONAL_NOTIFIABLE_TYPES,
|
||||
|
||||
attributes: {
|
||||
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue