diff options
Diffstat (limited to 'app/channel.go')
-rw-r--r-- | app/channel.go | 61 |
1 files changed, 54 insertions, 7 deletions
diff --git a/app/channel.go b/app/channel.go index 3480d5b0e..0054fe14b 100644 --- a/app/channel.go +++ b/app/channel.go @@ -63,13 +63,15 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, channelRole s l4g.Warn("Failed to update ChannelMemberHistory table %v", result.Err) } - if requestor == nil { - if err := a.postJoinTeamMessage(user, townSquare); err != nil { - l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) - } - } else { - if err := a.postAddToTeamMessage(requestor, user, townSquare, ""); err != nil { - l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) + if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages { + if requestor == nil { + if err := a.postJoinTeamMessage(user, townSquare); err != nil { + l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) + } + } else { + if err := a.postAddToTeamMessage(requestor, user, townSquare, ""); err != nil { + l4g.Error(utils.T("api.channel.post_user_add_remove_message_and_forget.error"), err) + } } } @@ -341,6 +343,47 @@ func (a *App) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppE } } +func (a *App) UpdateChannelPrivacy(oldChannel *model.Channel, user *model.User) (*model.Channel, *model.AppError) { + if channel, err := a.UpdateChannel(oldChannel); err != nil { + return channel, err + } else { + if err := a.postChannelPrivacyMessage(user, channel); err != nil { + if channel.Type == model.CHANNEL_OPEN { + channel.Type = model.CHANNEL_PRIVATE + } else { + channel.Type = model.CHANNEL_OPEN + } + // revert to previous channel privacy + a.UpdateChannel(channel) + return channel, err + } + + return channel, nil + } +} + +func (a *App) postChannelPrivacyMessage(user *model.User, channel *model.Channel) *model.AppError { + privacy := (map[string]string{ + model.CHANNEL_OPEN: "private_to_public", + model.CHANNEL_PRIVATE: "public_to_private", + })[channel.Type] + post := &model.Post{ + ChannelId: channel.Id, + Message: fmt.Sprintf(utils.T("api.channel.change_channel_privacy." + privacy)), + Type: model.POST_CHANGE_CHANNEL_PRIVACY, + UserId: user.Id, + Props: model.StringInterface{ + "username": user.Username, + }, + } + + if _, err := a.CreatePost(post, channel, false); err != nil { + return model.NewAppError("postChannelPrivacyMessage", "api.channel.post_channel_privacy_message.error", nil, err.Error(), http.StatusInternalServerError) + } + + return nil +} + func (a *App) RestoreChannel(channel *model.Channel) (*model.Channel, *model.AppError) { if result := <-a.Srv.Store.Channel().Restore(channel.Id, model.GetMillis()); result.Err != nil { return nil, result.Err @@ -1012,6 +1055,10 @@ func (a *App) LeaveChannel(channelId string, userId string) *model.AppError { return err } + if channel.Name == model.DEFAULT_CHANNEL && *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages == false { + return nil + } + a.Go(func() { a.postLeaveChannelMessage(user, channel) }) |