From 18ee37586027e5672446a6f23c05a8ccb2b35896 Mon Sep 17 00:00:00 2001 From: Saturnino Abril Date: Sat, 21 Oct 2017 01:38:26 +0800 Subject: [PLT-7362] Option to add user to channel if mentioned user is not currently in the channel (#7619) * Option to add user to channel if mentioned user is not currently in the channel * instead of link from server, just add component on client side to add channel member * change implementation using post.props * do clean up and add test * sanitize post.props['add_channel_member'] on post creation * move sanitize to app.CreatePost and also apply to app.UpdatePost --- app/notification.go | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'app/notification.go') diff --git a/app/notification.go b/app/notification.go index e11218faa..bbd305b05 100644 --- a/app/notification.go +++ b/app/notification.go @@ -94,7 +94,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod outOfChannelMentions := result.Data.([]*model.User) if channel.Type != model.CHANNEL_GROUP { a.Go(func() { - a.sendOutOfChannelMentions(sender, post, team.Id, outOfChannelMentions) + a.sendOutOfChannelMentions(sender, post, channel.Type, outOfChannelMentions) }) } } @@ -723,7 +723,7 @@ func (a *App) getMobileAppSessions(userId string) ([]*model.Session, *model.AppE } } -func (a *App) sendOutOfChannelMentions(sender *model.User, post *model.Post, teamId string, users []*model.User) *model.AppError { +func (a *App) sendOutOfChannelMentions(sender *model.User, post *model.Post, channelType string, users []*model.User) *model.AppError { if len(users) == 0 { return nil } @@ -734,26 +734,51 @@ func (a *App) sendOutOfChannelMentions(sender *model.User, post *model.Post, tea } sort.Strings(usernames) + var userIds []string + for _, user := range users { + userIds = append(userIds, user.Id) + } + T := utils.GetUserTranslations(sender.Locale) + var localePhrase string + if channelType == model.CHANNEL_OPEN { + localePhrase = T("api.post.check_for_out_of_channel_mentions.link.public") + } else if channelType == model.CHANNEL_PRIVATE { + localePhrase = T("api.post.check_for_out_of_channel_mentions.link.private") + } + + ephemeralPostId := model.NewId() var message string - if len(usernames) == 1 { + if len(users) == 1 { message = T("api.post.check_for_out_of_channel_mentions.message.one", map[string]interface{}{ "Username": usernames[0], + "Phrase": localePhrase, }) } else { message = T("api.post.check_for_out_of_channel_mentions.message.multiple", map[string]interface{}{ - "Usernames": strings.Join(usernames[:len(usernames)-1], ", "), + "Usernames": strings.Join(usernames[:len(usernames)-1], ", @"), "LastUsername": usernames[len(usernames)-1], + "Phrase": localePhrase, }) } + props := model.StringInterface{ + model.PROPS_ADD_CHANNEL_MEMBER: model.StringInterface{ + "post_id": ephemeralPostId, + "usernames": usernames, + "user_ids": userIds, + }, + } + a.SendEphemeralPost( post.UserId, &model.Post{ + Id: ephemeralPostId, ChannelId: post.ChannelId, Message: message, CreateAt: post.CreateAt + 1, + Props: props, }, ) -- cgit v1.2.3-1-g7c22