Browse Source

Add mail notify for creating issue

Unknown 11 years ago
parent
commit
c1a3d4fefb
5 changed files with 49 additions and 5 deletions
  1. 1 1
      gogs.go
  2. 0 1
      models/issue.go
  3. 38 2
      modules/mailer/mail.go
  4. 1 1
      modules/mailer/mailer.go
  5. 9 0
      routers/repo/issue.go

+ 1 - 1
gogs.go

@@ -19,7 +19,7 @@ import (
 // Test that go1.2 tag above is included in builds. main.go refers to this definition.
 const go12tag = true
 
-const APP_VER = "0.1.7.0325"
+const APP_VER = "0.1.8.0325"
 
 func init() {
 	base.AppVer = APP_VER

+ 0 - 1
models/issue.go

@@ -59,7 +59,6 @@ func CreateIssue(userId, repoId, milestoneId, assigneeId int64, name, labels, co
 		Content:     content,
 	}
 	_, err = orm.Insert(issue)
-	// TODO: newIssueAction
 	return issue, err
 }
 

+ 38 - 2
modules/mailer/mail.go

@@ -6,6 +6,7 @@ package mailer
 
 import (
 	"encoding/hex"
+	"errors"
 	"fmt"
 
 	"github.com/gogits/gogs/models"
@@ -15,12 +16,17 @@ import (
 )
 
 // Create New mail message use MailFrom and MailUser
-func NewMailMessage(To []string, subject, body string) Message {
-	msg := NewHtmlMessage(To, base.MailService.User, subject, body)
+func NewMailMessageFrom(To []string, from, subject, body string) Message {
+	msg := NewHtmlMessage(To, from, subject, body)
 	msg.User = base.MailService.User
 	return msg
 }
 
+// Create New mail message use MailFrom and MailUser
+func NewMailMessage(To []string, subject, body string) Message {
+	return NewMailMessageFrom(To, base.MailService.User, subject, body)
+}
+
 func GetMailTmplData(user *models.User) map[interface{}]interface{} {
 	data := make(map[interface{}]interface{}, 10)
 	data["AppName"] = base.AppName
@@ -84,3 +90,33 @@ func SendActiveMail(r *middleware.Render, user *models.User) {
 
 	SendAsync(&msg)
 }
+
+// SendNotifyMail sends mail notification of all watchers.
+func SendNotifyMail(userId, repoId int64, userName, repoName, subject, content string) error {
+	watches, err := models.GetWatches(repoId)
+	if err != nil {
+		return errors.New("mail.NotifyWatchers(get watches): " + err.Error())
+	}
+
+	tos := make([]string, 0, len(watches))
+	for i := range watches {
+		uid := watches[i].UserId
+		if userId == uid {
+			continue
+		}
+		u, err := models.GetUserById(uid)
+		if err != nil {
+			return errors.New("mail.NotifyWatchers(get user): " + err.Error())
+		}
+		tos = append(tos, u.Email)
+	}
+
+	if len(tos) == 0 {
+		return nil
+	}
+
+	msg := NewMailMessageFrom(tos, userName, subject, content)
+	msg.Info = fmt.Sprintf("Subject: %s, send notify emails", subject)
+	SendAsync(&msg)
+	return nil
+}

+ 1 - 1
modules/mailer/mailer.go

@@ -33,7 +33,7 @@ func (m Message) Content() string {
 	}
 
 	// create mail content
-	content := "From: " + m.User + "<" + m.From +
+	content := "From: " + m.From + "<" + m.User +
 		">\r\nSubject: " + m.Subject + "\r\nContent-Type: " + contentType + "\r\n\r\n" + m.Body
 	return content
 }

+ 9 - 0
routers/repo/issue.go

@@ -13,6 +13,7 @@ import (
 	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/base"
 	"github.com/gogits/gogs/modules/log"
+	"github.com/gogits/gogs/modules/mailer"
 	"github.com/gogits/gogs/modules/middleware"
 )
 
@@ -86,6 +87,14 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat
 		return
 	}
 
+	// Mail watchers.
+	if base.Service.NotifyMail {
+		if err = mailer.SendNotifyMail(ctx.User.Id, ctx.Repo.Repository.Id, ctx.User.Name, ctx.Repo.Repository.Name, issue.Name, issue.Content); err != nil {
+			ctx.Handle(200, "issue.CreateIssue", err)
+			return
+		}
+	}
+
 	log.Trace("%d Issue created: %d", ctx.Repo.Repository.Id, issue.Id)
 	ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index))
 }