From 1b86f174ce99b579df35c32e800551b1fd1df807 Mon Sep 17 00:00:00 2001 From: 赵智超 <1012112796@qq.com> Date: Sat, 18 Apr 2020 21:50:25 +0800 Subject: Add a way to mark Conversation (code comment) resolved (#11037) * Add a way to mark Conversation (code comment) resolved mark Conversation is a way to mark a Conversation is stale or be solved. when it's marked as stale, will be hided like stale. all Pull Request writer , Offical Reviewers and poster can add or remove Conversation resolved mark. Signed-off-by: a1012112796 <1012112796@qq.com> * fix lint * Apply suggestions from code review * Add ResolveDoer * fix ui Co-Authored-By: Lauris BH Co-Authored-By: 6543 <6543@obermui.de> * change IsResolved to an function Add permission check in UpdateResolveConversation * Apply suggestions from code review * change return error for permisson check * add default message for deleted user * get issue message from comment * add migration for ``ResolveDoerID`` column another change: * block mark pending review as resolved because it's not necessary Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> * change button color * resolve button size * fix code style * remove unusefull code Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> Co-authored-by: Lauris BH Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> --- routers/repo/issue.go | 10 ++++++++++ routers/repo/pull.go | 7 +++++++ routers/repo/pull_review.go | 47 +++++++++++++++++++++++++++++++++++++++++++++ routers/routes/routes.go | 1 + 4 files changed, 65 insertions(+) (limited to 'routers') diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 9ad379684a..a7fda4e769 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -990,6 +990,11 @@ func ViewIssue(ctx *context.Context) { ctx.ServerError("Review.LoadCodeComments", err) return } + + if err = comment.LoadResolveDoer(); err != nil { + ctx.ServerError("LoadResolveDoer", err) + return + } } } @@ -1033,6 +1038,11 @@ func ViewIssue(ctx *context.Context) { ctx.ServerError("IsUserAllowedToMerge", err) return } + + if ctx.Data["CanMarkConversation"], err = models.CanMarkConversation(issue, ctx.User); err != nil { + ctx.ServerError("CanMarkConversation", err) + return + } } prUnit, err := repo.GetUnit(models.UnitTypePullRequests) diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 63cc39865c..d23c93d0b6 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -624,6 +624,13 @@ func ViewPullFiles(ctx *context.Context) { return } + if ctx.IsSigned && ctx.User != nil { + if ctx.Data["CanMarkConversation"], err = models.CanMarkConversation(issue, ctx.User); err != nil { + ctx.ServerError("CanMarkConversation", err) + return + } + } + setImageCompareContext(ctx, baseCommit, commit) setPathsCompareContext(ctx, baseCommit, commit, headTarget) diff --git a/routers/repo/pull_review.go b/routers/repo/pull_review.go index 0f5375dc16..730074b7f3 100644 --- a/routers/repo/pull_review.go +++ b/routers/repo/pull_review.go @@ -61,6 +61,53 @@ func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) { ctx.Redirect(comment.HTMLURL()) } +// UpdateResolveConversation add or remove an Conversation resolved mark +func UpdateResolveConversation(ctx *context.Context) { + action := ctx.Query("action") + commentID := ctx.QueryInt64("comment_id") + + comment, err := models.GetCommentByID(commentID) + if err != nil { + ctx.ServerError("GetIssueByID", err) + return + } + + if err = comment.LoadIssue(); err != nil { + ctx.ServerError("comment.LoadIssue", err) + return + } + + var permResult bool + if permResult, err = models.CanMarkConversation(comment.Issue, ctx.User); err != nil { + ctx.ServerError("CanMarkConversation", err) + return + } + if !permResult { + ctx.Error(403) + return + } + + if !comment.Issue.IsPull { + ctx.Error(400) + return + } + + if action == "Resolve" || action == "UnResolve" { + err = models.MarkConversation(comment, ctx.User, action == "Resolve") + if err != nil { + ctx.ServerError("MarkConversation", err) + return + } + } else { + ctx.Error(400) + return + } + + ctx.JSON(200, map[string]interface{}{ + "ok": true, + }) +} + // SubmitReview creates a review out of the existing pending review or creates a new one if no pending review exist func SubmitReview(ctx *context.Context, form auth.SubmitReviewForm) { issue := GetActionIssue(ctx) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 2273cb4473..e2514054bf 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -739,6 +739,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/assignee", reqRepoIssuesOrPullsWriter, repo.UpdateIssueAssignee) m.Post("/request_review", reqRepoIssuesOrPullsReader, repo.UpdatePullReviewRequest) m.Post("/status", reqRepoIssuesOrPullsWriter, repo.UpdateIssueStatus) + m.Post("/resolve_conversation", reqRepoIssuesOrPullsReader, repo.UpdateResolveConversation) }, context.RepoMustNotBeArchived()) m.Group("/comments/:id", func() { m.Post("", repo.UpdateCommentContent) -- cgit v1.2.3