diff --git a/README.md b/README.md index 205d1a3a0f5..aaa7fa85fb6 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](public/img/gogs-large-resize.png) -##### Current version: 0.6.12 Beta +##### Current version: 0.6.13 Beta diff --git a/gogs.go b/gogs.go index ebe37b1d5dd..e2b32d0dfb2 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.6.12.0916 Beta" +const APP_VER = "0.6.13.0917 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/modules/mailer/mail.go b/modules/mailer/mail.go index 3e44bc6dfd0..2ecb8ffe7bc 100644 --- a/modules/mailer/mail.go +++ b/modules/mailer/mail.go @@ -5,7 +5,6 @@ package mailer import ( - "errors" "fmt" "path" @@ -34,27 +33,37 @@ func ComposeTplData(u *models.User) map[interface{}]interface{} { data["AppUrl"] = setting.AppUrl data["ActiveCodeLives"] = setting.Service.ActiveCodeLives / 60 data["ResetPwdCodeLives"] = setting.Service.ResetPwdCodeLives / 60 + if u != nil { data["User"] = u } return data } -func SendActivateAccountMail(c *macaron.Context, u *models.User) { +func SendUserMail(c *macaron.Context, u *models.User, tpl base.TplName, code, subject, info string) { data := ComposeTplData(u) - data["Code"] = u.GenerateActivateCode() - body, err := c.HTMLString(string(AUTH_ACTIVATE), data) + data["Code"] = code + body, err := c.HTMLString(string(tpl), data) if err != nil { log.Error(4, "HTMLString: %v", err) return } - msg := NewMessage([]string{u.Email}, c.Tr("mail.activate_account"), body) - msg.Info = fmt.Sprintf("UID: %d, activate account", u.Id) + msg := NewMessage([]string{u.Email}, subject, body) + msg.Info = fmt.Sprintf("UID: %d, %s", u.Id, info) SendAsync(msg) } +func SendActivateAccountMail(c *macaron.Context, u *models.User) { + SendUserMail(c, u, AUTH_ACTIVATE, u.GenerateActivateCode(), c.Tr("mail.activate_account"), "activate account") +} + +// SendResetPasswordMail sends reset password e-mail. +func SendResetPasswordMail(c *macaron.Context, u *models.User) { + SendUserMail(c, u, AUTH_RESET_PASSWORD, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password") +} + // SendActivateAccountMail sends confirmation e-mail. func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.EmailAddress) { data := ComposeTplData(u) @@ -72,27 +81,11 @@ func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.Ema SendAsync(msg) } -// SendResetPasswordMail sends reset password e-mail. -func SendResetPasswordMail(c *macaron.Context, u *models.User) { - data := ComposeTplData(u) - data["Code"] = u.GenerateActivateCode() - body, err := c.HTMLString(string(AUTH_RESET_PASSWORD), data) - if err != nil { - log.Error(4, "HTMLString: %v", err) - return - } - - msg := NewMessage([]string{u.Email}, c.Tr("mail.reset_password"), body) - msg.Info = fmt.Sprintf("UID: %d, reset password", u.Id) - - SendAsync(msg) -} - // SendIssueNotifyMail sends mail notification of all watchers of repository. func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue *models.Issue) ([]string, error) { ws, err := models.GetWatchers(repo.ID) if err != nil { - return nil, errors.New("mail.NotifyWatchers(GetWatchers): " + err.Error()) + return nil, fmt.Errorf("GetWatchers[%d]: %v", repo.ID, err) } tos := make([]string, 0, len(ws)) @@ -101,11 +94,15 @@ func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue * if u.Id == uid { continue } - u, err := models.GetUserByID(uid) + to, err := models.GetUserByID(uid) if err != nil { - return nil, errors.New("mail.NotifyWatchers(GetUserById): " + err.Error()) + return nil, fmt.Errorf("GetUserByID: %v", err) + } + if to.IsOrganization() { + continue } - tos = append(tos, u.Email) + + tos = append(tos, to.Email) } if len(tos) == 0 { @@ -117,7 +114,8 @@ func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue * base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name), setting.AppUrl, owner.Name, repo.Name, issue.Index) msg := NewMessage(tos, subject, content) - msg.Info = fmt.Sprintf("Subject: %s, send issue notify emails", subject) + msg.Info = fmt.Sprintf("Subject: %s, issue notify", subject) + SendAsync(msg) return tos, nil } @@ -135,35 +133,36 @@ func SendIssueMentionMail(r macaron.Render, u, owner *models.User, data := ComposeTplData(nil) data["IssueLink"] = fmt.Sprintf("%s/%s/issues/%d", owner.Name, repo.Name, issue.Index) data["Subject"] = subject + data["ActUserName"] = u.DisplayName() + data["Content"] = string(base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name)) body, err := r.HTMLString(string(NOTIFY_MENTION), data) if err != nil { - return fmt.Errorf("mail.SendIssueMentionMail(fail to render): %v", err) + return fmt.Errorf("HTMLString: %v", err) } msg := NewMessage(tos, subject, body) - msg.Info = fmt.Sprintf("Subject: %s, send issue mention emails", subject) + msg.Info = fmt.Sprintf("Subject: %s, issue mention", subject) + SendAsync(msg) return nil } // SendCollaboratorMail sends mail notification to new collaborator. -func SendCollaboratorMail(r macaron.Render, u, owner *models.User, - repo *models.Repository) error { - - subject := fmt.Sprintf("%s added you to %s", owner.Name, repo.Name) +func SendCollaboratorMail(r macaron.Render, u, doer *models.User, repo *models.Repository) error { + subject := fmt.Sprintf("%s added you to %s/%s", doer.Name, repo.Owner.Name, repo.Name) data := ComposeTplData(nil) - data["RepoLink"] = path.Join(owner.Name, repo.Name) + data["RepoLink"] = path.Join(repo.Owner.Name, repo.Name) data["Subject"] = subject body, err := r.HTMLString(string(NOTIFY_COLLABORATOR), data) if err != nil { - return fmt.Errorf("mail.SendCollaboratorMail(fail to render): %v", err) + return fmt.Errorf("HTMLString: %v", err) } msg := NewMessage([]string{u.Email}, subject, body) - msg.Info = fmt.Sprintf("UID: %d, send register mail", u.Id) + msg.Info = fmt.Sprintf("UID: %d, add collaborator", u.Id) SendAsync(msg) return nil diff --git a/routers/repo/issue.go b/routers/repo/issue.go index f9a560827aa..cc344bd0806 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -367,7 +367,7 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) { mentions := base.MentionPattern.FindAllString(issue.Content, -1) if len(mentions) > 0 { for i := range mentions { - mentions[i] = mentions[i][1:] + mentions[i] = strings.TrimSpace(mentions[i])[1:] } if err := models.UpdateMentions(mentions, issue.ID); err != nil { diff --git a/templates/.VERSION b/templates/.VERSION index b2b7e63fda6..23802365493 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.6.12.0916 Beta \ No newline at end of file +0.6.13.0917 Beta \ No newline at end of file diff --git a/templates/mail/notify/collaborator.tmpl b/templates/mail/notify/collaborator.tmpl index 36a3149daa9..9b7e76edb73 100644 --- a/templates/mail/notify/collaborator.tmpl +++ b/templates/mail/notify/collaborator.tmpl @@ -1,18 +1,16 @@ - - {{.Subject}} + + {{.Subject}} -

You can now push to this repository.

-

- --- -
- View it on Gogs: -
- {{.AppUrl}}{{.RepoLink}} -

+

You are now a collaborator of this repository.

+

+ --- +
+ View it on Gogs: {{.RepoLink}} +

diff --git a/templates/mail/notify/mention.tmpl b/templates/mail/notify/mention.tmpl index be022d0dd7d..6c6fba32c56 100644 --- a/templates/mail/notify/mention.tmpl +++ b/templates/mail/notify/mention.tmpl @@ -1,16 +1,17 @@ - - {{.Subject}} + + {{.Subject}} -

{{.ActUserName}} mentioned you.

-

- --- -
- View it on Gogs. -

+

@{{.ActUserName}} mentioned you:

+

{{.Content | Str2html}}

+

+ --- +
+ View it on Gogs. +