mirror of
https://github.com/plankanban/planka.git
synced 2025-07-19 05:09:43 +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>
|
</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;
|
break;
|
||||||
default:
|
default:
|
||||||
contentNode = null;
|
contentNode = null;
|
||||||
|
|
|
@ -91,6 +91,7 @@ export const ActivityTypes = {
|
||||||
CREATE_CARD: 'createCard',
|
CREATE_CARD: 'createCard',
|
||||||
MOVE_CARD: 'moveCard',
|
MOVE_CARD: 'moveCard',
|
||||||
ADD_MEMBER_TO_CARD: 'addMemberToCard',
|
ADD_MEMBER_TO_CARD: 'addMemberToCard',
|
||||||
|
REMOVE_MEMBER_FROM_CARD: 'removeMemberFromCard',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const NotificationTypes = {
|
export const NotificationTypes = {
|
||||||
|
|
|
@ -291,9 +291,12 @@ export default {
|
||||||
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
|
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
|
||||||
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
|
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
|
||||||
userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}</2>',
|
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}}',
|
userMovedCardFromListToList: '{{user}} moved <2>{{card}}</2> from {{fromList}} to {{toList}}',
|
||||||
userMovedThisCardFromListToList:
|
userMovedThisCardFromListToList:
|
||||||
'<0>{{user}}</0><1> moved this card from {{fromList}} to {{toList}}</1>',
|
'<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',
|
username: 'Username',
|
||||||
users: 'Users',
|
users: 'Users',
|
||||||
viewer: 'Viewer',
|
viewer: 'Viewer',
|
||||||
|
|
|
@ -286,9 +286,12 @@ export default {
|
||||||
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
|
userAddedYouToCard: '{{user}} added you to <2>{{card}}</2>',
|
||||||
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
|
userJoinedThisCard: `<0>{{user}}</0><1> joined this card</1>`,
|
||||||
userLeftNewCommentToCard: '{{user}} left a new comment «{{comment}}» to <2>{{card}}</2>',
|
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}}',
|
userMovedCardFromListToList: '{{user}} moved <2>{{card}}</2> from {{fromList}} to {{toList}}',
|
||||||
userMovedThisCardFromListToList:
|
userMovedThisCardFromListToList:
|
||||||
'<0>{{user}}</0><1> moved this card from {{fromList}} to {{toList}}</1>',
|
'<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',
|
username: 'Username',
|
||||||
users: 'Users',
|
users: 'Users',
|
||||||
viewer: 'Viewer',
|
viewer: 'Viewer',
|
||||||
|
|
|
@ -76,7 +76,7 @@ module.exports = {
|
||||||
const isBoardMember = await sails.helpers.users.isBoardMember(user.id, board.id);
|
const isBoardMember = await sails.helpers.users.isBoardMember(user.id, board.id);
|
||||||
|
|
||||||
if (!isBoardMember) {
|
if (!isBoardMember) {
|
||||||
throw Errors.USER_NOT_FOUND;
|
throw Errors.USER_NOT_FOUND; // Forbidden
|
||||||
}
|
}
|
||||||
|
|
||||||
const cardMembership = await sails.helpers.cardMemberships.createOne
|
const cardMembership = await sails.helpers.cardMemberships.createOne
|
||||||
|
|
|
@ -70,7 +70,10 @@ module.exports = {
|
||||||
throw Errors.USER_NOT_CARD_MEMBER;
|
throw Errors.USER_NOT_CARD_MEMBER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const user = await User.qm.getOneById(cardMembership.userId);
|
||||||
|
|
||||||
cardMembership = await sails.helpers.cardMemberships.deleteOne.with({
|
cardMembership = await sails.helpers.cardMemberships.deleteOne.with({
|
||||||
|
user,
|
||||||
project,
|
project,
|
||||||
board,
|
board,
|
||||||
list,
|
list,
|
||||||
|
|
|
@ -142,8 +142,8 @@ module.exports = {
|
||||||
user: values.user,
|
user: values.user,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (action.type !== Action.Types.CREATE_CARD) {
|
if (Action.INTERNAL_NOTIFIABLE_TYPES.includes(action.type)) {
|
||||||
if (action.type === Action.Types.ADD_MEMBER_TO_CARD) {
|
if (Action.PERSONAL_NOTIFIABLE_TYPES.includes(action.type)) {
|
||||||
if (values.user !== action.data.user.id) {
|
if (values.user !== action.data.user.id) {
|
||||||
await sails.helpers.notifications.createOne.with({
|
await sails.helpers.notifications.createOne.with({
|
||||||
values: {
|
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) {
|
if (notificationServices.length > 0) {
|
||||||
const services = notificationServices.map((notificationService) =>
|
const services = notificationServices.map((notificationService) =>
|
||||||
_.pick(notificationService, ['url', 'format']),
|
_.pick(notificationService, ['url', 'format']),
|
||||||
);
|
);
|
||||||
|
|
||||||
buildAndSendNotifications(
|
buildAndSendNotifications(
|
||||||
services,
|
services,
|
||||||
inputs.board,
|
inputs.board,
|
||||||
values.card,
|
values.card,
|
||||||
action,
|
action,
|
||||||
values.user,
|
values.user,
|
||||||
sails.helpers.utils.makeTranslator(),
|
sails.helpers.utils.makeTranslator(),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,10 @@ module.exports = {
|
||||||
type: 'ref',
|
type: 'ref',
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
user: {
|
||||||
|
type: 'ref',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
project: {
|
project: {
|
||||||
type: 'ref',
|
type: 'ref',
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -52,6 +56,7 @@ module.exports = {
|
||||||
buildData: () => ({
|
buildData: () => ({
|
||||||
item: cardMembership,
|
item: cardMembership,
|
||||||
included: {
|
included: {
|
||||||
|
users: [inputs.user],
|
||||||
projects: [inputs.project],
|
projects: [inputs.project],
|
||||||
boards: [inputs.board],
|
boards: [inputs.board],
|
||||||
lists: [inputs.list],
|
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;
|
return cardMembership;
|
||||||
|
|
|
@ -14,10 +14,18 @@ const Types = {
|
||||||
CREATE_CARD: 'createCard',
|
CREATE_CARD: 'createCard',
|
||||||
MOVE_CARD: 'moveCard',
|
MOVE_CARD: 'moveCard',
|
||||||
ADD_MEMBER_TO_CARD: 'addMemberToCard',
|
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 = {
|
module.exports = {
|
||||||
Types,
|
Types,
|
||||||
|
INTERNAL_NOTIFIABLE_TYPES,
|
||||||
|
EXTERNAL_NOTIFIABLE_TYPES,
|
||||||
|
PERSONAL_NOTIFIABLE_TYPES,
|
||||||
|
|
||||||
attributes: {
|
attributes: {
|
||||||
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗
|
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue