From 50b662040c5c2e2544b3517dc766f1837c7f05e1 Mon Sep 17 00:00:00 2001 From: "Jaehyun, Park" Date: Thu, 29 Jun 2017 23:38:56 +0900 Subject: Add /help slash command (#6650) * Add /help slash command * Fix copyright year * go fmt * Add help command test at api4 * Fix jasonblais's issue * Update test code * Fix unit test issue - keep config unchanged --- api/command_help_test.go | 33 +++++++++++++++++++++++++++ api4/command_help_test.go | 33 +++++++++++++++++++++++++++ app/command_help.go | 44 ++++++++++++++++++++++++++++++++++++ i18n/en.json | 8 +++++++ webapp/components/create_comment.jsx | 6 ++++- 5 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 api/command_help_test.go create mode 100644 api4/command_help_test.go create mode 100644 app/command_help.go diff --git a/api/command_help_test.go b/api/command_help_test.go new file mode 100644 index 000000000..20fa8c830 --- /dev/null +++ b/api/command_help_test.go @@ -0,0 +1,33 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api + +import ( + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" + "testing" +) + +func TestHelpCommand(t *testing.T) { + th := Setup().InitBasic() + Client := th.BasicClient + channel := th.BasicChannel + + HelpLink := *utils.Cfg.SupportSettings.HelpLink + defer func() { + *utils.Cfg.SupportSettings.HelpLink = HelpLink + }() + + *utils.Cfg.SupportSettings.HelpLink = "" + rs1 := Client.Must(Client.Command(channel.Id, "/help ")).Data.(*model.CommandResponse) + if rs1.GotoLocation != model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK { + t.Fatal("failed to default help link") + } + + *utils.Cfg.SupportSettings.HelpLink = "https://docs.mattermost.com/guides/user.html" + rs2 := Client.Must(Client.Command(channel.Id, "/help ")).Data.(*model.CommandResponse) + if rs2.GotoLocation != "https://docs.mattermost.com/guides/user.html" { + t.Fatal("failed to help link") + } +} diff --git a/api4/command_help_test.go b/api4/command_help_test.go new file mode 100644 index 000000000..cb0f1b634 --- /dev/null +++ b/api4/command_help_test.go @@ -0,0 +1,33 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api4 + +import ( + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" + "testing" +) + +func TestHelpCommand(t *testing.T) { + th := Setup().InitBasic() + Client := th.Client + channel := th.BasicChannel + + HelpLink := *utils.Cfg.SupportSettings.HelpLink + defer func() { + *utils.Cfg.SupportSettings.HelpLink = HelpLink + }() + + *utils.Cfg.SupportSettings.HelpLink = "" + rs1, _ := Client.ExecuteCommand(channel.Id, "/help ") + if rs1.GotoLocation != model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK { + t.Fatal("failed to default help link") + } + + *utils.Cfg.SupportSettings.HelpLink = "https://docs.mattermost.com/guides/user.html" + rs2, _ := Client.ExecuteCommand(channel.Id, "/help ") + if rs2.GotoLocation != "https://docs.mattermost.com/guides/user.html" { + t.Fatal("failed to help link") + } +} diff --git a/app/command_help.go b/app/command_help.go new file mode 100644 index 000000000..e545865fc --- /dev/null +++ b/app/command_help.go @@ -0,0 +1,44 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package app + +import ( + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" + goi18n "github.com/nicksnyder/go-i18n/i18n" +) + +type HelpProvider struct { +} + +const ( + CMD_HELP = "help" +) + +func init() { + RegisterCommandProvider(&HelpProvider{}) +} + +func (h *HelpProvider) GetTrigger() string { + return CMD_HELP +} + +func (h *HelpProvider) GetCommand(T goi18n.TranslateFunc) *model.Command { + return &model.Command{ + Trigger: CMD_HELP, + AutoComplete: true, + AutoCompleteDesc: T("api.command_help.desc"), + DisplayName: T("api.command_help.name"), + } +} + +func (h *HelpProvider) DoCommand(args *model.CommandArgs, message string) *model.CommandResponse { + helpLink := *utils.Cfg.SupportSettings.HelpLink + + if helpLink == "" { + helpLink = model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK + } + + return &model.CommandResponse{GotoLocation: helpLink} +} diff --git a/i18n/en.json b/i18n/en.json index 6371522a4..ff34cf54f 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -871,6 +871,14 @@ "id": "api.command_shrug.name", "translation": "shrug" }, + { + "id": "api.command_help.desc", + "translation": "Open the Mattermost help page" + }, + { + "id": "api.command_help.name", + "translation": "help" + }, { "id": "api.compliance.init.debug", "translation": "Initializing compliance API routes" diff --git a/webapp/components/create_comment.jsx b/webapp/components/create_comment.jsx index 56e9eb88f..2ddc828cc 100644 --- a/webapp/components/create_comment.jsx +++ b/webapp/components/create_comment.jsx @@ -203,7 +203,11 @@ export default class CreateComment extends React.Component { (data) => { this.setState({submitting: false}); if (data.goto_location && data.goto_location.length > 0) { - browserHistory.push(data.goto_location); + if (data.goto_location.startsWith('/') || data.goto_location.includes(window.location.hostname)) { + browserHistory.push(data.goto_location); + } else { + window.open(data.goto_location); + } } }, (err) => { -- cgit v1.2.3-1-g7c22