github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/command_channel_rename.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package app
     5  
     6  import (
     7  	goi18n "github.com/mattermost/go-i18n/i18n"
     8  
     9  	"github.com/mattermost/mattermost-server/v5/model"
    10  )
    11  
    12  type RenameProvider struct {
    13  }
    14  
    15  const (
    16  	CMD_RENAME = "rename"
    17  )
    18  
    19  func init() {
    20  	RegisterCommandProvider(&RenameProvider{})
    21  }
    22  
    23  func (me *RenameProvider) GetTrigger() string {
    24  	return CMD_RENAME
    25  }
    26  
    27  func (me *RenameProvider) GetCommand(a *App, T goi18n.TranslateFunc) *model.Command {
    28  	renameAutocompleteData := model.NewAutocompleteData(CMD_RENAME, T("api.command_channel_rename.hint"), T("api.command_channel_rename.desc"))
    29  	renameAutocompleteData.AddTextArgument(T("api.command_channel_rename.hint"), "[text]", "")
    30  	return &model.Command{
    31  		Trigger:          CMD_RENAME,
    32  		AutoComplete:     true,
    33  		AutoCompleteDesc: T("api.command_channel_rename.desc"),
    34  		AutoCompleteHint: T("api.command_channel_rename.hint"),
    35  		DisplayName:      T("api.command_channel_rename.name"),
    36  		AutocompleteData: renameAutocompleteData,
    37  	}
    38  }
    39  
    40  func (me *RenameProvider) DoCommand(a *App, args *model.CommandArgs, message string) *model.CommandResponse {
    41  	channel, err := a.GetChannel(args.ChannelId)
    42  	if err != nil {
    43  		return &model.CommandResponse{
    44  			Text:         args.T("api.command_channel_rename.channel.app_error"),
    45  			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    46  		}
    47  	}
    48  
    49  	switch channel.Type {
    50  	case model.CHANNEL_OPEN:
    51  		if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) {
    52  			return &model.CommandResponse{
    53  				Text:         args.T("api.command_channel_rename.permission.app_error"),
    54  				ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    55  			}
    56  		}
    57  	case model.CHANNEL_PRIVATE:
    58  		if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) {
    59  			return &model.CommandResponse{
    60  				Text:         args.T("api.command_channel_rename.permission.app_error"),
    61  				ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    62  			}
    63  		}
    64  	default:
    65  		return &model.CommandResponse{Text: args.T("api.command_channel_rename.direct_group.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    66  	}
    67  
    68  	if len(message) == 0 {
    69  		return &model.CommandResponse{
    70  			Text:         args.T("api.command_channel_rename.message.app_error"),
    71  			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    72  		}
    73  	} else if len(message) > model.CHANNEL_NAME_MAX_LENGTH {
    74  		return &model.CommandResponse{
    75  			Text: args.T("api.command_channel_rename.too_long.app_error", map[string]interface{}{
    76  				"Length": model.CHANNEL_NAME_MAX_LENGTH,
    77  			}),
    78  			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    79  		}
    80  	} else if len(message) < model.CHANNEL_NAME_MIN_LENGTH {
    81  		return &model.CommandResponse{
    82  			Text: args.T("api.command_channel_rename.too_short.app_error", map[string]interface{}{
    83  				"Length": model.CHANNEL_NAME_MIN_LENGTH,
    84  			}),
    85  			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    86  		}
    87  	}
    88  
    89  	patch := &model.ChannelPatch{
    90  		DisplayName: new(string),
    91  	}
    92  	*patch.DisplayName = message
    93  
    94  	_, err = a.PatchChannel(channel, patch, args.UserId)
    95  	if err != nil {
    96  		return &model.CommandResponse{
    97  			Text:         args.T("api.command_channel_rename.update_channel.app_error"),
    98  			ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
    99  		}
   100  	}
   101  
   102  	return &model.CommandResponse{}
   103  }