diff options
Diffstat (limited to 'models/review.go')
-rw-r--r-- | models/review.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/models/review.go b/models/review.go index d6bb77925e..7f23777c3e 100644 --- a/models/review.go +++ b/models/review.go @@ -5,6 +5,7 @@ package models import ( + "fmt" "strings" "code.gitea.io/gitea/modules/timeutil" @@ -594,3 +595,62 @@ func RemoveRewiewRequest(issue *Issue, reviewer *User, doer *User) (comment *Com return comment, sess.Commit() } + +// MarkConversation Add or remove Conversation mark for a code comment +func MarkConversation(comment *Comment, doer *User, isResolve bool) (err error) { + if comment.Type != CommentTypeCode { + return nil + } + + if isResolve { + if comment.ResolveDoerID != 0 { + return nil + } + + if _, err = x.Exec("UPDATE `comment` SET resolve_doer_id=? WHERE id=?", doer.ID, comment.ID); err != nil { + return err + } + } else { + if comment.ResolveDoerID == 0 { + return nil + } + + if _, err = x.Exec("UPDATE `comment` SET resolve_doer_id=? WHERE id=?", 0, comment.ID); err != nil { + return err + } + } + + return nil +} + +// CanMarkConversation Add or remove Conversation mark for a code comment permission check +// the PR writer , offfcial reviewer and poster can do it +func CanMarkConversation(issue *Issue, doer *User) (permResult bool, err error) { + if doer == nil || issue == nil { + return false, fmt.Errorf("issue or doer is nil") + } + + if doer.ID != issue.PosterID { + if err = issue.LoadRepo(); err != nil { + return false, err + } + + perm, err := GetUserRepoPermission(issue.Repo, doer) + if err != nil { + return false, err + } + + permResult = perm.CanAccess(AccessModeWrite, UnitTypePullRequests) + if !permResult { + if permResult, err = IsOfficialReviewer(issue, doer); err != nil { + return false, err + } + } + + if !permResult { + return false, nil + } + } + + return true, nil +} |