mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 08:21:11 +00:00 
			
		
		
		
	Add mail notify for new collaborator
This commit is contained in:
		
					parent
					
						
							
								07c3d497a7
							
						
					
				
			
			
				commit
				
					
						02687cbdf3
					
				
			
		
					 7 changed files with 93 additions and 18 deletions
				
			
		| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 | 
			
		||||
[][koding]
 | 
			
		||||
[koding]: https://koding.com/Teamwork?import=https://github.com/gogits/gogs/archive/master.zip&c=git1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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) 获取完整的贡献者列表。
 | 
			
		||||
 | 
			
		||||
[][koding]
 | 
			
		||||
[koding]: https://koding.com/Teamwork?import=https://github.com/gogits/gogs/archive/master.zip&c=git1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								templates/mail/notify/collaborator.tmpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								templates/mail/notify/collaborator.tmpl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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>
 | 
			
		||||
							
								
								
									
										16
									
								
								templates/mail/notify/mention.tmpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								templates/mail/notify/mention.tmpl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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>
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue