From 07b14c370a6c911c89e1812bc796a445e5223604 Mon Sep 17 00:00:00 2001 From: Saturnino Abril Date: Tue, 27 Mar 2018 21:14:42 +0800 Subject: post a system message after a channel is converted from public to private (#8501) --- api4/channel.go | 8 ++++++++ app/channel.go | 28 ++++++++++++++++++++++++++++ i18n/en.json | 12 ++++++++++++ model/post.go | 2 ++ 4 files changed, 50 insertions(+) diff --git a/api4/channel.go b/api4/channel.go index 29dff883f..d587ddc72 100644 --- a/api4/channel.go +++ b/api4/channel.go @@ -118,6 +118,7 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) { oldChannel.Purpose = channel.Purpose oldChannelDisplayName := oldChannel.DisplayName + oldChannelType := oldChannel.Type if len(channel.DisplayName) > 0 { oldChannel.DisplayName = channel.DisplayName @@ -140,6 +141,13 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) { l4g.Error(err.Error()) } } + + if oldChannelType == model.CHANNEL_OPEN && channel.Type == model.CHANNEL_PRIVATE { + if err := c.App.PostConvertChannelToPrivate(c.Session.UserId, channel); err != nil { + l4g.Error(err.Error()) + } + } + c.LogAudit("name=" + channel.Name) w.Write([]byte(oldChannel.ToJson())) } diff --git a/app/channel.go b/app/channel.go index 4e294abbb..49a797f15 100644 --- a/app/channel.go +++ b/app/channel.go @@ -805,6 +805,34 @@ func (a *App) PostUpdateChannelDisplayNameMessage(userId string, channel *model. return nil } +func (a *App) PostConvertChannelToPrivate(userId string, channel *model.Channel) *model.AppError { + uc := a.Srv.Store.User().Get(userId) + + if uresult := <-uc; uresult.Err != nil { + return model.NewAppError("PostConvertChannelToPrivate", "api.channel.post_convert_channel_to_private.retrieve_user.error", nil, uresult.Err.Error(), http.StatusBadRequest) + } else { + user := uresult.Data.(*model.User) + + message := fmt.Sprintf(utils.T("api.channel.post_convert_channel_to_private.updated_from"), user.Username) + + post := &model.Post{ + ChannelId: channel.Id, + Message: message, + Type: model.POST_CONVERT_CHANNEL, + UserId: userId, + Props: model.StringInterface{ + "username": user.Username, + }, + } + + if _, err := a.CreatePost(post, channel, false); err != nil { + return model.NewAppError("PostConvertChannelToPrivate", "api.channel.post_convert_channel_to_private.create_post.error", nil, err.Error(), http.StatusInternalServerError) + } + } + + return nil +} + func (a *App) GetChannel(channelId string) (*model.Channel, *model.AppError) { if result := <-a.Srv.Store.Channel().Get(channelId, true); result.Err != nil && result.Err.Id == "store.sql_channel.get.existing.app_error" { result.Err.StatusCode = http.StatusNotFound diff --git a/i18n/en.json b/i18n/en.json index 0ce0a47e6..8f0e61588 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -331,6 +331,18 @@ "id": "api.channel.leave.left", "translation": "%v left the channel." }, + { + "id": "api.channel.post_convert_channel_to_private.create_post.error", + "translation": "Failed to post channel conversion to private message" + }, + { + "id": "api.channel.post_convert_channel_to_private.retrieve_user.error", + "translation": "Failed to retrieve user while converting the channel from public to private" + }, + { + "id": "api.channel.post_convert_channel_to_private.updated_from", + "translation": "%s converted the channel from public to private" + }, { "id": "api.channel.post_update_channel_displayname_message_and_forget.create_post.error", "translation": "Failed to post displayname update message" diff --git a/model/post.go b/model/post.go index ae0627a03..09303c0cd 100644 --- a/model/post.go +++ b/model/post.go @@ -33,6 +33,7 @@ const ( POST_REMOVE_FROM_TEAM = "system_remove_from_team" POST_HEADER_CHANGE = "system_header_change" POST_DISPLAYNAME_CHANGE = "system_displayname_change" + POST_CONVERT_CHANNEL = "system_convert_channel" POST_PURPOSE_CHANGE = "system_purpose_change" POST_CHANNEL_DELETED = "system_channel_deleted" POST_EPHEMERAL = "system_ephemeral" @@ -207,6 +208,7 @@ func (o *Post) IsValid(maxPostSize int) *AppError { POST_HEADER_CHANGE, POST_PURPOSE_CHANGE, POST_DISPLAYNAME_CHANGE, + POST_CONVERT_CHANNEL, POST_CHANNEL_DELETED, POST_CHANGE_CHANNEL_PRIVACY: default: -- cgit v1.2.3-1-g7c22