summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaturnino Abril <saturnino.abril@gmail.com>2018-03-27 21:14:42 +0800
committerGitHub <noreply@github.com>2018-03-27 21:14:42 +0800
commit07b14c370a6c911c89e1812bc796a445e5223604 (patch)
treed8ad9a5373db49c10d347bd8e2ea06b9cd5c8fed
parent9e6db178b09387e21ac19ce85369cf1ca7a443e8 (diff)
downloadchat-07b14c370a6c911c89e1812bc796a445e5223604.tar.gz
chat-07b14c370a6c911c89e1812bc796a445e5223604.tar.bz2
chat-07b14c370a6c911c89e1812bc796a445e5223604.zip
post a system message after a channel is converted from public to private (#8501)
-rw-r--r--api4/channel.go8
-rw-r--r--app/channel.go28
-rw-r--r--i18n/en.json12
-rw-r--r--model/post.go2
4 files changed, 50 insertions, 0 deletions
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
@@ -332,6 +332,18 @@
"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: