diff --git a/app/post.go b/app/post.go index acace56d50..b8085d0401 100644 --- a/app/post.go +++ b/app/post.go @@ -236,7 +236,11 @@ func (a *App) CreatePost(post *model.Post, channel *model.Channel, triggerWebhoo pluginsEnvironment.RunMultiPluginHook(func(hooks plugin.Hooks) bool { replacementPost, rejectionReason := hooks.MessageWillBePosted(pluginContext, post) if rejectionReason != "" { - rejectionError = model.NewAppError("createPost", "Post rejected by plugin. "+rejectionReason, nil, "", http.StatusBadRequest) + id := "Post rejected by plugin. " + rejectionReason + if rejectionReason == plugin.DismissPostError { + id = plugin.DismissPostError + } + rejectionError = model.NewAppError("createPost", id, nil, "", http.StatusBadRequest) return false } if replacementPost != nil { @@ -245,6 +249,7 @@ func (a *App) CreatePost(post *model.Post, channel *model.Channel, triggerWebhoo return true }, plugin.MessageWillBePostedId) + if rejectionError != nil { return nil, rejectionError } diff --git a/plugin/hooks.go b/plugin/hooks.go index c6263c293a..2b2d912011 100644 --- a/plugin/hooks.go +++ b/plugin/hooks.go @@ -36,6 +36,11 @@ const ( TotalHooksId = iota ) +const ( + // DismissPostError dismisses a pending post when the error is returned from MessageWillBePosted. + DismissPostError = "plugin.message_will_be_posted.dismiss_post" +) + // Hooks describes the methods a plugin may implement to automatically receive the corresponding // event. // @@ -90,6 +95,7 @@ type Hooks interface { // To reject a post, return an non-empty string describing why the post was rejected. // To modify the post, return the replacement, non-nil *model.Post and an empty string. // To allow the post without modification, return a nil *model.Post and an empty string. + // To dismiss the post, return a nil *model.Post and the const DismissPostError string. // // If you don't need to modify or reject posts, use MessageHasBeenPosted instead. // diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index 367f6eb602..2daa812269 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -296,6 +296,7 @@ func (s *SqlPostStore) Get(id string) (*model.PostList, *model.AppError) { for _, p := range posts { pl.AddPost(p) + pl.AddOrder(p.Id) } return pl, nil