mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Add dismiss review feature (#12674)
* Add dismiss review feature
refs:
    https://github.blog/2016-10-12-dismissing-reviews-on-pull-requests/
    https://developer.github.com/v3/pulls/reviews/#dismiss-a-review-for-a-pull-request
* change modal ui and error message
* Add unDismissReview api
Signed-off-by: a1012112796 <1012112796@qq.com>
Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: 6543 <6543@obermui.de>
			
			
This commit is contained in:
		@@ -275,6 +275,26 @@ func (*actionNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mode
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*actionNotifier) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
 | 
			
		||||
	reviewerName := review.Reviewer.Name
 | 
			
		||||
	if len(review.OriginalAuthor) > 0 {
 | 
			
		||||
		reviewerName = review.OriginalAuthor
 | 
			
		||||
	}
 | 
			
		||||
	if err := models.NotifyWatchers(&models.Action{
 | 
			
		||||
		ActUserID: doer.ID,
 | 
			
		||||
		ActUser:   doer,
 | 
			
		||||
		OpType:    models.ActionPullReviewDismissed,
 | 
			
		||||
		Content:   fmt.Sprintf("%d|%s|%s", review.Issue.Index, reviewerName, comment.Content),
 | 
			
		||||
		RepoID:    review.Issue.Repo.ID,
 | 
			
		||||
		Repo:      review.Issue.Repo,
 | 
			
		||||
		IsPrivate: review.Issue.Repo.IsPrivate,
 | 
			
		||||
		CommentID: comment.ID,
 | 
			
		||||
		Comment:   comment,
 | 
			
		||||
	}); err != nil {
 | 
			
		||||
		log.Error("NotifyWatchers [%d]: %v", review.Issue.ID, err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *actionNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
 | 
			
		||||
	data, err := json.Marshal(commits)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@ type Notifier interface {
 | 
			
		||||
	NotifyPullRequestCodeComment(pr *models.PullRequest, comment *models.Comment, mentions []*models.User)
 | 
			
		||||
	NotifyPullRequestChangeTargetBranch(doer *models.User, pr *models.PullRequest, oldBranch string)
 | 
			
		||||
	NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment)
 | 
			
		||||
	NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment)
 | 
			
		||||
 | 
			
		||||
	NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
 | 
			
		||||
		issue *models.Issue, comment *models.Comment, mentions []*models.User)
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,10 @@ func (*NullNotifier) NotifyPullRequestChangeTargetBranch(doer *models.User, pr *
 | 
			
		||||
func (*NullNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyPullRevieweDismiss notifies when a review was dismissed by repo admin
 | 
			
		||||
func (*NullNotifier) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyUpdateComment places a place holder function
 | 
			
		||||
func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -152,6 +152,12 @@ func (m *mailNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *model
 | 
			
		||||
	m.NotifyCreateIssueComment(doer, comment.Issue.Repo, comment.Issue, comment, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *mailNotifier) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
 | 
			
		||||
	if err := mailer.MailParticipantsComment(comment, models.ActionPullReviewDismissed, review.Issue, []*models.User{}); err != nil {
 | 
			
		||||
		log.Error("MailParticipantsComment: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *mailNotifier) NotifyNewRelease(rel *models.Release) {
 | 
			
		||||
	if err := rel.LoadAttributes(); err != nil {
 | 
			
		||||
		log.Error("NotifyNewRelease: %v", err)
 | 
			
		||||
 
 | 
			
		||||
@@ -108,6 +108,13 @@ func NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, com
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyPullRevieweDismiss notifies when a review was dismissed by repo admin
 | 
			
		||||
func NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
 | 
			
		||||
	for _, notifier := range notifiers {
 | 
			
		||||
		notifier.NotifyPullRevieweDismiss(doer, review, comment)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotifyUpdateComment notifies update comment to notifiers
 | 
			
		||||
func NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
 | 
			
		||||
	for _, notifier := range notifiers {
 | 
			
		||||
 
 | 
			
		||||
@@ -161,6 +161,15 @@ func (ns *notificationService) NotifyPullRequestPushCommits(doer *models.User, p
 | 
			
		||||
	_ = ns.issueQueue.Push(opts)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ns *notificationService) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
 | 
			
		||||
	var opts = issueNotificationOpts{
 | 
			
		||||
		IssueID:              review.IssueID,
 | 
			
		||||
		NotificationAuthorID: doer.ID,
 | 
			
		||||
		CommentID:            comment.ID,
 | 
			
		||||
	}
 | 
			
		||||
	_ = ns.issueQueue.Push(opts)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ns *notificationService) NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, assignee *models.User, removed bool, comment *models.Comment) {
 | 
			
		||||
	if !removed {
 | 
			
		||||
		var opts = issueNotificationOpts{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user