]> source.dussan.org Git - gitea.git/commitdiff
Add mail notify for new collaborator
authorUnknown <joe2010xtmf@163.com>
Mon, 5 May 2014 08:27:28 +0000 (04:27 -0400)
committerUnknown <joe2010xtmf@163.com>
Mon, 5 May 2014 08:27:28 +0000 (04:27 -0400)
README.md
README_ZH.md
modules/mailer/mail.go
routers/repo/issue.go
routers/repo/setting.go
templates/mail/notify/collaborator.tmpl [new file with mode: 0644]
templates/mail/notify/mention.tmpl [new file with mode: 0644]

index cebb577aa19e6638d7524f43216a759ab27fa9c1..5e45c5fc95c9b6985ffc229cd44c5d92a951e76a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -71,7 +71,7 @@ There are 4 ways to install Gogs:
 
 ## Contributors
 
-This project was launched by [Unknwon](https://github.com/Unknwon) and [lunny](https://github.com/lunny); [fuxiaohei](https://github.com/fuxiaohei), [slene](https://github.com/slene) and [codeskyblue](https://github.com/codeskyblue) joined the team soon after. See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors.
+The [core team](http://gogs.io/team) of this project. See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors.
 
 [![Clone in Koding](http://learn.koding.com/btn/clone_d.png)][koding]
 [koding]: https://koding.com/Teamwork?import=https://github.com/gogits/gogs/archive/master.zip&c=git1
index d93a4921a08274e52e8e17537ed3a96138c6ae6b..9911714462be04ed0ea95e8f18fd040a3654cd46 100644 (file)
@@ -63,7 +63,7 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依
 
 ## 贡献成员
 
-本项目最初由 [Unknown](https://github.com/Unknwon) 和 [lunny](https://github.com/lunny) 发起,随后 [fuxiaohei](https://github.com/fuxiaohei)、[slene](https://github.com/slene) 以及 [codeskyblue](https://github.com/codeskyblue) 加入到开发团队。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。
+本项目的 [开发团队](http://gogs.io/team)。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。
 
 [![Clone in Koding](http://learn.koding.com/btn/clone_d.png)][koding]
 [koding]: https://koding.com/Teamwork?import=https://github.com/gogits/gogs/archive/master.zip&c=git1
index 834f4a898acb2f3521e9cd2f9795271923036cf6..7516ce7e94b27311cacfa08ab73a34737d3f27c6 100644 (file)
@@ -8,6 +8,7 @@ import (
        "encoding/hex"
        "errors"
        "fmt"
+       "path"
 
        "github.com/gogits/gogs/models"
        "github.com/gogits/gogs/modules/base"
@@ -135,7 +136,7 @@ func SendIssueNotifyMail(user, owner *models.User, repo *models.Repository, issu
                return tos, nil
        }
 
-       subject := fmt.Sprintf("[%s] %s", repo.Name, issue.Name)
+       subject := fmt.Sprintf("[%s] %s(#%d)", repo.Name, issue.Name, issue.Index)
        content := fmt.Sprintf("%s<br>-<br> <a href=\"%s%s/%s/issues/%d\">View it on Gogs</a>.",
                base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name),
                base.AppUrl, owner.Name, repo.Name, issue.Index)
@@ -146,17 +147,48 @@ func SendIssueNotifyMail(user, owner *models.User, repo *models.Repository, issu
 }
 
 // SendIssueMentionMail sends mail notification for who are mentioned in issue.
-func SendIssueMentionMail(user, owner *models.User, repo *models.Repository, issue *models.Issue, tos []string) error {
+func SendIssueMentionMail(r *middleware.Render, user, owner *models.User,
+       repo *models.Repository, issue *models.Issue, tos []string) error {
+
        if len(tos) == 0 {
                return nil
        }
 
-       issueLink := fmt.Sprintf("%s%s/%s/issues/%d", base.AppUrl, owner.Name, repo.Name, issue.Index)
-       body := fmt.Sprintf(`%s mentioned you.`, user.Name)
-       subject := fmt.Sprintf("[%s] %s", repo.Name, issue.Name)
-       content := fmt.Sprintf("%s<br>-<br> <a href=\"%s\">View it on Gogs</a>.", body, issueLink)
-       msg := NewMailMessageFrom(tos, user.Name, subject, content)
+       subject := fmt.Sprintf("[%s] %s(#%d)", repo.Name, issue.Name, issue.Index)
+
+       data := GetMailTmplData(nil)
+       data["IssueLink"] = fmt.Sprintf("%s/%s/issues/%d", owner.Name, repo.Name, issue.Index)
+       data["Subject"] = subject
+
+       body, err := r.HTMLString("mail/notify/mention", data)
+       if err != nil {
+               return fmt.Errorf("mail.SendIssueMentionMail(fail to render): %v", err)
+       }
+
+       msg := NewMailMessageFrom(tos, user.Name, subject, body)
        msg.Info = fmt.Sprintf("Subject: %s, send issue mention emails", subject)
        SendAsync(&msg)
        return nil
 }
+
+// SendCollaboratorMail sends mail notification to new collaborator.
+func SendCollaboratorMail(r *middleware.Render, user, owner *models.User,
+       repo *models.Repository) error {
+
+       subject := fmt.Sprintf("%s added you to %s", owner.Name, repo.Name)
+
+       data := GetMailTmplData(nil)
+       data["RepoLink"] = path.Join(owner.Name, repo.Name)
+       data["Subject"] = subject
+
+       body, err := r.HTMLString("mail/notify/collaborator", data)
+       if err != nil {
+               return fmt.Errorf("mail.SendCollaboratorMail(fail to render): %v", err)
+       }
+
+       msg := NewMailMessage([]string{user.Email}, subject, body)
+       msg.Info = fmt.Sprintf("UID: %d, send register mail", user.Id)
+
+       SendAsync(&msg)
+       return nil
+}
index e761d9a2e96ff9fc57590c141a954a1f68e745d3..4e2076620d55ce0863f3e3d5294e51a17e632a68 100644 (file)
@@ -132,8 +132,8 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C
 
                        newTos = append(newTos, m[1:])
                }
-               if err = mailer.SendIssueMentionMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository,
-                       issue, models.GetUserEmailsByNames(newTos)); err != nil {
+               if err = mailer.SendIssueMentionMail(ctx.Render, ctx.User, ctx.Repo.Owner,
+                       ctx.Repo.Repository, issue, models.GetUserEmailsByNames(newTos)); err != nil {
                        ctx.Handle(500, "issue.CreateIssue(SendIssueMentionMail)", err)
                        return
                }
index aee3fe3a1d4e295893d5018f19e37b3f9f959f81..79d5f175da4115970b4d00a4dea1d6d711bd7a24 100644 (file)
@@ -13,6 +13,7 @@ import (
        "github.com/gogits/gogs/models"
        "github.com/gogits/gogs/modules/base"
        "github.com/gogits/gogs/modules/log"
+       "github.com/gogits/gogs/modules/mailer"
        "github.com/gogits/gogs/modules/middleware"
 )
 
@@ -185,22 +186,30 @@ func CollaborationPost(ctx *middleware.Context) {
                return
        }
 
-       isExist, err := models.IsUserExist(name)
+       u, err := models.GetUserByName(name)
        if err != nil {
-               ctx.Handle(500, "repo.CollaborationPost(IsUserExist)", err)
-               return
-       } else if !isExist {
-               ctx.Flash.Error("Given user does not exist.")
-               ctx.Redirect(ctx.Req.RequestURI)
+               if err == models.ErrUserNotExist {
+                       ctx.Flash.Error("Given user does not exist.")
+                       ctx.Redirect(ctx.Req.RequestURI)
+               } else {
+                       ctx.Handle(500, "repo.CollaborationPost(GetUserByName)", err)
+               }
                return
        }
 
-       if err := models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
+       if err = models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
                Mode: models.AU_WRITABLE}); err != nil {
                ctx.Handle(500, "repo.CollaborationPost(AddAccess)", err)
                return
        }
 
+       if base.Service.NotifyMail {
+               if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil {
+                       ctx.Handle(500, "repo.CollaborationPost(SendCollaboratorMail)", err)
+                       return
+               }
+       }
+
        ctx.Flash.Success("New collaborator has been added.")
        ctx.Redirect(ctx.Req.RequestURI)
 }
diff --git a/templates/mail/notify/collaborator.tmpl b/templates/mail/notify/collaborator.tmpl
new file mode 100644 (file)
index 0000000..0664b4c
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>{{.Subject}}</title>
+</head>
+
+<body>
+    <p>You can now push to this repository.</p>
+    <p>
+        ---
+        <br>
+        View it on Gogs: 
+        <br>
+        <a href="{{.AppUrl}}{{.RepoLink}}">{{.AppUrl}}{{.RepoLink}}</a>
+    </p>
+</body>
+</html>
diff --git a/templates/mail/notify/mention.tmpl b/templates/mail/notify/mention.tmpl
new file mode 100644 (file)
index 0000000..be022d0
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>{{.Subject}}</title>
+</head>
+
+<body>
+    <p>{{.ActUserName}} mentioned you.</p>
+    <p>
+        ---
+        <br>
+        <a href="{{.AppUrl}}{{.IssueLink}}">View it on Gogs</a>.
+    </p>
+</body>
+</html>