diff options
author | Carlos Tadeu Panato Junior <ctadeu@gmail.com> | 2017-06-29 14:06:17 +0200 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-06-29 08:06:17 -0400 |
commit | 976030ea250bb5b9ae5cf70bddf9b9c54ab07959 (patch) | |
tree | 254624406eeba1b44c2a7333de62a07daf991fdd /app/command_channel_header.go | |
parent | 520cedea16c3a4c71c2d11ede89c6a50a81ff8db (diff) | |
download | chat-976030ea250bb5b9ae5cf70bddf9b9c54ab07959.tar.gz chat-976030ea250bb5b9ae5cf70bddf9b9c54ab07959.tar.bz2 chat-976030ea250bb5b9ae5cf70bddf9b9c54ab07959.zip |
[PLT-6707] /header [text] slash command: Edit the channel header (#6566)
* add /header slash command
* update websocket
* updater per review
Diffstat (limited to 'app/command_channel_header.go')
-rw-r--r-- | app/command_channel_header.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/app/command_channel_header.go b/app/command_channel_header.go new file mode 100644 index 000000000..b5a70ef89 --- /dev/null +++ b/app/command_channel_header.go @@ -0,0 +1,73 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package app + +import ( + l4g "github.com/alecthomas/log4go" + "github.com/mattermost/platform/model" + + goi18n "github.com/nicksnyder/go-i18n/i18n" +) + +type HeaderProvider struct { +} + +const ( + CMD_HEADER = "header" +) + +func init() { + RegisterCommandProvider(&HeaderProvider{}) +} + +func (me *HeaderProvider) GetTrigger() string { + return CMD_HEADER +} + +func (me *HeaderProvider) GetCommand(T goi18n.TranslateFunc) *model.Command { + return &model.Command{ + Trigger: CMD_HEADER, + AutoComplete: true, + AutoCompleteDesc: T("api.command_channel_header.desc"), + AutoCompleteHint: T("api.command_channel_header.hint"), + DisplayName: T("api.command_channel_header.name"), + } +} + +func (me *HeaderProvider) DoCommand(args *model.CommandArgs, message string) *model.CommandResponse { + channel, err := GetChannel(args.ChannelId) + if err != nil { + return &model.CommandResponse{Text: args.T("api.command_channel_header.channel.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + + if channel.Type == model.CHANNEL_OPEN && !SessionHasPermissionToChannel(args.Session, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) { + return &model.CommandResponse{Text: args.T("api.command_channel_header.permission.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + + if channel.Type == model.CHANNEL_PRIVATE && !SessionHasPermissionToChannel(args.Session, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) { + return &model.CommandResponse{Text: args.T("api.command_channel_header.permission.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + + if len(message) == 0 { + return &model.CommandResponse{Text: args.T("api.command_channel_header.message.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + + oldChannelHeader := channel.Header + channel.Header = message + + updateChannel, err := UpdateChannel(channel) + if err != nil { + return &model.CommandResponse{Text: args.T("api.command_channel_header.update_channel.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + + messageWs := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_UPDATED, "", channel.Id, "", nil) + messageWs.Add("channel", channel.ToJson()) + Publish(messageWs) + + if err := PostUpdateChannelHeaderMessage(args.Session.UserId, channel.Id, args.TeamId, oldChannelHeader, updateChannel.Header); err != nil { + l4g.Error(err.Error()) + } + + return &model.CommandResponse{} +} |