summaryrefslogtreecommitdiffstats
path: root/app/channel.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/channel.go')
-rw-r--r--app/channel.go61
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)
})