summaryrefslogtreecommitdiffstats
path: root/modules/notification
diff options
context:
space:
mode:
Diffstat (limited to 'modules/notification')
-rw-r--r--modules/notification/base/notifier.go1
-rw-r--r--modules/notification/base/null.go4
-rw-r--r--modules/notification/mail/mail.go7
-rw-r--r--modules/notification/notification.go7
-rw-r--r--modules/notification/ui/ui.go35
5 files changed, 53 insertions, 1 deletions
diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go
index 1c607ded3b..43b68b603c 100644
--- a/modules/notification/base/notifier.go
+++ b/modules/notification/base/notifier.go
@@ -24,6 +24,7 @@ type Notifier interface {
NotifyIssueChangeStatus(*models.User, *models.Issue, *models.Comment, bool)
NotifyIssueChangeMilestone(doer *models.User, issue *models.Issue, oldMilestoneID int64)
NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, assignee *models.User, removed bool, comment *models.Comment)
+ NotifyPullRewiewRequest(doer *models.User, issue *models.Issue, reviewer *models.User, isRequest bool, comment *models.Comment)
NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string)
NotifyIssueClearLabels(doer *models.User, issue *models.Issue)
NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string)
diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go
index f6c423b469..4b5efd80bb 100644
--- a/modules/notification/base/null.go
+++ b/modules/notification/base/null.go
@@ -86,6 +86,10 @@ func (*NullNotifier) NotifyIssueChangeContent(doer *models.User, issue *models.I
func (*NullNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, assignee *models.User, removed bool, comment *models.Comment) {
}
+// NotifyPullRewiewRequest places a place holder function
+func (*NullNotifier) NotifyPullRewiewRequest(doer *models.User, issue *models.Issue, reviewer *models.User, isRequest bool, comment *models.Comment) {
+}
+
// NotifyIssueClearLabels places a place holder function
func (*NullNotifier) NotifyIssueClearLabels(doer *models.User, issue *models.Issue) {
}
diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go
index ec7d9d617e..b5c2db3831 100644
--- a/modules/notification/mail/mail.go
+++ b/modules/notification/mail/mail.go
@@ -100,6 +100,13 @@ func (m *mailNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *model
}
}
+func (m *mailNotifier) NotifyPullRewiewRequest(doer *models.User, issue *models.Issue, reviewer *models.User, isRequest bool, comment *models.Comment) {
+ if isRequest && doer.ID != reviewer.ID && reviewer.EmailNotifications() == models.EmailNotificationsEnabled {
+ ct := fmt.Sprintf("Requested to review #%d.", issue.Index)
+ mailer.SendIssueAssignedMail(issue, doer, ct, comment, []string{reviewer.Email})
+ }
+}
+
func (m *mailNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User) {
if err := pr.LoadIssue(); err != nil {
log.Error("pr.LoadIssue: %v", err)
diff --git a/modules/notification/notification.go b/modules/notification/notification.go
index 8c5d7d6035..95117c1f3e 100644
--- a/modules/notification/notification.go
+++ b/modules/notification/notification.go
@@ -150,6 +150,13 @@ func NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, assignee
}
}
+// NotifyPullRewiewRequest notifies Request Review change
+func NotifyPullRewiewRequest(doer *models.User, issue *models.Issue, reviewer *models.User, isRequest bool, comment *models.Comment) {
+ for _, notifier := range notifiers {
+ notifier.NotifyPullRewiewRequest(doer, issue, reviewer, isRequest, comment)
+ }
+}
+
// NotifyIssueClearLabels notifies clear labels to notifiers
func NotifyIssueClearLabels(doer *models.User, issue *models.Issue) {
for _, notifier := range notifiers {
diff --git a/modules/notification/ui/ui.go b/modules/notification/ui/ui.go
index 525753425a..6ce14a90cc 100644
--- a/modules/notification/ui/ui.go
+++ b/modules/notification/ui/ui.go
@@ -22,6 +22,7 @@ type (
IssueID int64
CommentID int64
NotificationAuthorID int64
+ ReceiverID int64 // 0 -- ALL Watcher
}
)
@@ -39,7 +40,7 @@ func NewNotifier() base.Notifier {
func (ns *notificationService) handle(data ...queue.Data) {
for _, datum := range data {
opts := datum.(issueNotificationOpts)
- if err := models.CreateOrUpdateIssueNotifications(opts.IssueID, opts.CommentID, opts.NotificationAuthorID); err != nil {
+ if err := models.CreateOrUpdateIssueNotifications(opts.IssueID, opts.CommentID, opts.NotificationAuthorID, opts.ReceiverID); err != nil {
log.Error("Was unable to create issue notification: %v", err)
}
}
@@ -103,3 +104,35 @@ func (ns *notificationService) NotifyPullRequestReview(pr *models.PullRequest, r
}
_ = 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{
+ IssueID: issue.ID,
+ NotificationAuthorID: doer.ID,
+ ReceiverID: assignee.ID,
+ }
+
+ if comment != nil {
+ opts.CommentID = comment.ID
+ }
+
+ _ = ns.issueQueue.Push(opts)
+ }
+}
+
+func (ns *notificationService) NotifyPullRewiewRequest(doer *models.User, issue *models.Issue, reviewer *models.User, isRequest bool, comment *models.Comment) {
+ if isRequest {
+ var opts = issueNotificationOpts{
+ IssueID: issue.ID,
+ NotificationAuthorID: doer.ID,
+ ReceiverID: reviewer.ID,
+ }
+
+ if comment != nil {
+ opts.CommentID = comment.ID
+ }
+
+ _ = ns.issueQueue.Push(opts)
+ }
+}