mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-20 07:38:28 +00:00
#1525 Triggere mailer for admin created accounts
This commit is contained in:
parent
986447335d
commit
21e13cb51e
|
@ -788,6 +788,7 @@ users.activated = Activated
|
||||||
users.admin = Admin
|
users.admin = Admin
|
||||||
users.repos = Repos
|
users.repos = Repos
|
||||||
users.created = Created
|
users.created = Created
|
||||||
|
users.send_register_notify = Send Registration Notification To User
|
||||||
users.new_success = New account '%s' has been created successfully.
|
users.new_success = New account '%s' has been created successfully.
|
||||||
users.edit = Edit
|
users.edit = Edit
|
||||||
users.auth_source = Authentication Source
|
users.auth_source = Authentication Source
|
||||||
|
|
|
@ -11,11 +11,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type AdminCrateUserForm struct {
|
type AdminCrateUserForm struct {
|
||||||
LoginType string `binding:"Required"`
|
LoginType string `binding:"Required"`
|
||||||
LoginName string
|
LoginName string
|
||||||
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
|
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
|
||||||
Email string `binding:"Required;Email;MaxSize(254)"`
|
Email string `binding:"Required;Email;MaxSize(254)"`
|
||||||
Password string `binding:"MaxSize(255)"`
|
Password string `binding:"MaxSize(255)"`
|
||||||
|
SendNotify bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
|
func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -17,10 +17,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
AUTH_ACTIVATE base.TplName = "mail/auth/activate"
|
AUTH_ACTIVATE base.TplName = "mail/auth/activate"
|
||||||
AUTH_ACTIVATE_EMAIL base.TplName = "mail/auth/activate_email"
|
AUTH_ACTIVATE_EMAIL base.TplName = "mail/auth/activate_email"
|
||||||
AUTH_RESET_PASSWORD base.TplName = "mail/auth/reset_passwd"
|
AUTH_REGISTER_NOTIFY base.TplName = "mail/auth/register_notify"
|
||||||
AUTH_REGISTER_SUCCESS base.TplName = "mail/auth/register_success"
|
AUTH_RESET_PASSWORD base.TplName = "mail/auth/reset_passwd"
|
||||||
|
|
||||||
NOTIFY_COLLABORATOR base.TplName = "mail/notify/collaborator"
|
NOTIFY_COLLABORATOR base.TplName = "mail/notify/collaborator"
|
||||||
NOTIFY_MENTION base.TplName = "mail/notify/mention"
|
NOTIFY_MENTION base.TplName = "mail/notify/mention"
|
||||||
|
@ -64,6 +64,20 @@ func SendResetPasswordMail(c *macaron.Context, u *models.User) {
|
||||||
SendUserMail(c, u, AUTH_RESET_PASSWORD, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password")
|
SendUserMail(c, u, AUTH_RESET_PASSWORD, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendRegisterNotifyMail triggers a notify e-mail by admin created a account.
|
||||||
|
func SendRegisterNotifyMail(c *macaron.Context, u *models.User) {
|
||||||
|
body, err := c.HTMLString(string(AUTH_REGISTER_NOTIFY), ComposeTplData(u))
|
||||||
|
if err != nil {
|
||||||
|
log.Error(4, "HTMLString: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := NewMessage([]string{u.Email}, c.Tr("mail.register_notify"), body)
|
||||||
|
msg.Info = fmt.Sprintf("UID: %d, registration notify", u.Id)
|
||||||
|
|
||||||
|
SendAsync(msg)
|
||||||
|
}
|
||||||
|
|
||||||
// SendActivateAccountMail sends confirmation e-mail.
|
// SendActivateAccountMail sends confirmation e-mail.
|
||||||
func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.EmailAddress) {
|
func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.EmailAddress) {
|
||||||
data := ComposeTplData(u)
|
data := ComposeTplData(u)
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/gogits/gogs/modules/auth"
|
"github.com/gogits/gogs/modules/auth"
|
||||||
"github.com/gogits/gogs/modules/base"
|
"github.com/gogits/gogs/modules/base"
|
||||||
"github.com/gogits/gogs/modules/log"
|
"github.com/gogits/gogs/modules/log"
|
||||||
|
"github.com/gogits/gogs/modules/mailer"
|
||||||
"github.com/gogits/gogs/modules/middleware"
|
"github.com/gogits/gogs/modules/middleware"
|
||||||
"github.com/gogits/gogs/modules/setting"
|
"github.com/gogits/gogs/modules/setting"
|
||||||
)
|
)
|
||||||
|
@ -60,6 +61,8 @@ func NewUser(ctx *middleware.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Sources"] = sources
|
ctx.Data["Sources"] = sources
|
||||||
|
|
||||||
|
ctx.Data["CanSendEmail"] = setting.MailService != nil
|
||||||
ctx.HTML(200, USER_NEW)
|
ctx.HTML(200, USER_NEW)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,6 +78,8 @@ func NewUserPost(ctx *middleware.Context, form auth.AdminCrateUserForm) {
|
||||||
}
|
}
|
||||||
ctx.Data["Sources"] = sources
|
ctx.Data["Sources"] = sources
|
||||||
|
|
||||||
|
ctx.Data["CanSendEmail"] = setting.MailService != nil
|
||||||
|
|
||||||
if ctx.HasError() {
|
if ctx.HasError() {
|
||||||
ctx.HTML(200, USER_NEW)
|
ctx.HTML(200, USER_NEW)
|
||||||
return
|
return
|
||||||
|
@ -118,6 +123,11 @@ func NewUserPost(ctx *middleware.Context, form auth.AdminCrateUserForm) {
|
||||||
}
|
}
|
||||||
log.Trace("Account created by admin(%s): %s", ctx.User.Name, u.Name)
|
log.Trace("Account created by admin(%s): %s", ctx.User.Name, u.Name)
|
||||||
|
|
||||||
|
// Send e-mail notification.
|
||||||
|
if form.SendNotify && setting.MailService != nil {
|
||||||
|
mailer.SendRegisterNotifyMail(ctx.Context, u)
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Flash.Success(ctx.Tr("admin.users.new_success", u.Name))
|
ctx.Flash.Success(ctx.Tr("admin.users.new_success", u.Name))
|
||||||
ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id))
|
ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id))
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,43 +20,42 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{{range .Notices}}
|
{{range .Notices}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{.Id}}</td>
|
<td>{{.Id}}</td>
|
||||||
<td>{{$.i18n.Tr .TrStr}}</td>
|
<td>{{$.i18n.Tr .TrStr}}</td>
|
||||||
<td><span>{{.Description}}</span></td>
|
<td><span>{{.Description}}</span></td>
|
||||||
<td>{{.Created}}</td>
|
<td>{{.Created}}</td>
|
||||||
<td><a href="{{AppSubUrl}}/admin/notices/{{.Id}}/delete"><i class="fa fa-trash-o text-red"></i></a></td>
|
<td><a href="{{AppSubUrl}}/admin/notices/{{.Id}}/delete"><i class="fa fa-trash-o text-red"></i></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
|
|
||||||
{{with .Page}}
|
|
||||||
{{if gt .TotalPages 1}}
|
|
||||||
<div class="center page buttons">
|
|
||||||
<div class="ui borderless pagination menu">
|
|
||||||
<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
|
|
||||||
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
|
|
||||||
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
|
|
||||||
</a>
|
|
||||||
{{range .Pages}}
|
|
||||||
{{if eq .Num -1}}
|
|
||||||
<a class="disabled item">...</a>
|
|
||||||
{{else}}
|
|
||||||
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
|
|
||||||
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
|
|
||||||
</a>
|
|
||||||
<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
|
{{with .Page}}
|
||||||
|
{{if gt .TotalPages 1}}
|
||||||
|
<div class="center page buttons">
|
||||||
|
<div class="ui borderless pagination menu">
|
||||||
|
<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
|
||||||
|
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
|
||||||
|
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
|
||||||
|
</a>
|
||||||
|
{{range .Pages}}
|
||||||
|
{{if eq .Num -1}}
|
||||||
|
<a class="disabled item">...</a>
|
||||||
|
{{else}}
|
||||||
|
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
|
||||||
|
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
|
||||||
|
</a>
|
||||||
|
<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,65 +2,62 @@
|
||||||
<div class="admin user">
|
<div class="admin user">
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="ui grid">
|
<div class="ui grid">
|
||||||
{{template "admin/navbar" .}}
|
{{template "admin/navbar" .}}
|
||||||
<div class="twelve wide column content">
|
<div class="twelve wide column content">
|
||||||
{{template "base/alert" .}}
|
{{template "base/alert" .}}
|
||||||
<h4 class="ui top attached header">
|
<h4 class="ui top attached header">
|
||||||
{{.i18n.Tr "admin.orgs.org_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
|
{{.i18n.Tr "admin.orgs.org_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
|
||||||
</h4>
|
</h4>
|
||||||
<div class="ui attached table segment">
|
<div class="ui attached table segment">
|
||||||
<table class="ui very basic striped table">
|
<table class="ui very basic striped table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th>{{.i18n.Tr "admin.orgs.name"}}</th>
|
<th>{{.i18n.Tr "admin.orgs.name"}}</th>
|
||||||
<th>{{.i18n.Tr "email"}}</th>
|
<th>{{.i18n.Tr "admin.orgs.teams"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.orgs.teams"}}</th>
|
<th>{{.i18n.Tr "admin.orgs.members"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.orgs.members"}}</th>
|
<th>{{.i18n.Tr "admin.users.repos"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.users.repos"}}</th>
|
<th>{{.i18n.Tr "admin.users.created"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.users.created"}}</th>
|
</tr>
|
||||||
</tr>
|
</thead>
|
||||||
</thead>
|
<tbody>
|
||||||
<tbody>
|
{{range .Orgs}}
|
||||||
{{range .Orgs}}
|
<tr>
|
||||||
<tr>
|
<td>{{.Id}}</td>
|
||||||
<td>{{.Id}}</td>
|
<td><a href="{{AppSubUrl}}/org/{{.Name}}">{{.Name}}</a></td>
|
||||||
<td><a href="{{AppSubUrl}}/org/{{.Name}}">{{.Name}}</a></td>
|
<td>{{.NumTeams}}</td>
|
||||||
<td>{{.Email}}</td>
|
<td>{{.NumMembers}}</td>
|
||||||
<td>{{.NumTeams}}</td>
|
<td>{{.NumRepos}}</td>
|
||||||
<td>{{.NumMembers}}</td>
|
<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
|
||||||
<td>{{.NumRepos}}</td>
|
</tr>
|
||||||
<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
|
{{end}}
|
||||||
</tr>
|
</tbody>
|
||||||
{{end}}
|
</table>
|
||||||
</tbody>
|
</div>
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{with .Page}}
|
|
||||||
{{if gt .TotalPages 1}}
|
|
||||||
<div class="center page buttons">
|
|
||||||
<div class="ui borderless pagination menu">
|
|
||||||
<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
|
|
||||||
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
|
|
||||||
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
|
|
||||||
</a>
|
|
||||||
{{range .Pages}}
|
|
||||||
{{if eq .Num -1}}
|
|
||||||
<a class="disabled item">...</a>
|
|
||||||
{{else}}
|
|
||||||
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
|
|
||||||
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
|
|
||||||
</a>
|
|
||||||
<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
|
{{with .Page}}
|
||||||
|
{{if gt .TotalPages 1}}
|
||||||
|
<div class="center page buttons">
|
||||||
|
<div class="ui borderless pagination menu">
|
||||||
|
<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
|
||||||
|
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
|
||||||
|
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
|
||||||
|
</a>
|
||||||
|
{{range .Pages}}
|
||||||
|
{{if eq .Num -1}}
|
||||||
|
<a class="disabled item">...</a>
|
||||||
|
{{else}}
|
||||||
|
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
|
||||||
|
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
|
||||||
|
</a>
|
||||||
|
<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,70 +1,69 @@
|
||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div class="admin user">
|
<div class="admin user">
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="ui grid">
|
<div class="ui grid">
|
||||||
{{template "admin/navbar" .}}
|
{{template "admin/navbar" .}}
|
||||||
<div class="twelve wide column content">
|
<div class="twelve wide column content">
|
||||||
{{template "base/alert" .}}
|
{{template "base/alert" .}}
|
||||||
<h4 class="ui top attached header">
|
<h4 class="ui top attached header">
|
||||||
{{.i18n.Tr "admin.repos.repo_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
|
{{.i18n.Tr "admin.repos.repo_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
|
||||||
</h4>
|
</h4>
|
||||||
<div class="ui attached table segment">
|
<div class="ui attached table segment">
|
||||||
<table class="ui very basic striped table">
|
<table class="ui very basic striped table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th>{{.i18n.Tr "admin.repos.owner"}}</th>
|
<th>{{.i18n.Tr "admin.repos.owner"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.repos.name"}}</th>
|
<th>{{.i18n.Tr "admin.repos.name"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.repos.private"}}</th>
|
<th>{{.i18n.Tr "admin.repos.private"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.repos.watches"}}</th>
|
<th>{{.i18n.Tr "admin.repos.watches"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.repos.stars"}}</th>
|
<th>{{.i18n.Tr "admin.repos.stars"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.repos.issues"}}</th>
|
<th>{{.i18n.Tr "admin.repos.issues"}}</th>
|
||||||
<th>{{.i18n.Tr "admin.users.created"}}</th>
|
<th>{{.i18n.Tr "admin.users.created"}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{{range .Repos}}
|
{{range .Repos}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{.ID}}</td>
|
<td>{{.ID}}</td>
|
||||||
<td><a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a></td>
|
<td><a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a></td>
|
||||||
<td><a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}">{{.Name}}</a></td>
|
<td><a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}">{{.Name}}</a></td>
|
||||||
<td><i class="fa fa{{if .IsPrivate}}-check{{end}}-square-o"></i></td>
|
<td><i class="fa fa{{if .IsPrivate}}-check{{end}}-square-o"></i></td>
|
||||||
<td>{{.NumWatches}}</td>
|
<td>{{.NumWatches}}</td>
|
||||||
<td>{{.NumStars}}</td>
|
<td>{{.NumStars}}</td>
|
||||||
<td>{{.NumIssues}}</td>
|
<td>{{.NumIssues}}</td>
|
||||||
<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
|
<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{with .Page}}
|
||||||
|
{{if gt .TotalPages 1}}
|
||||||
|
<div class="center page buttons">
|
||||||
|
<div class="ui borderless pagination menu">
|
||||||
|
<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
|
||||||
|
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
|
||||||
|
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
|
||||||
|
</a>
|
||||||
|
{{range .Pages}}
|
||||||
|
{{if eq .Num -1}}
|
||||||
|
<a class="disabled item">...</a>
|
||||||
|
{{else}}
|
||||||
|
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
|
||||||
|
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
|
||||||
|
</a>
|
||||||
|
<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{with .Page}}
|
|
||||||
{{if gt .TotalPages 1}}
|
|
||||||
<div class="center page buttons">
|
|
||||||
<div class="ui borderless pagination menu">
|
|
||||||
<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
|
|
||||||
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
|
|
||||||
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
|
|
||||||
</a>
|
|
||||||
{{range .Pages}}
|
|
||||||
{{if eq .Num -1}}
|
|
||||||
<a class="disabled item">...</a>
|
|
||||||
{{else}}
|
|
||||||
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
|
|
||||||
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
|
|
||||||
</a>
|
|
||||||
<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{{template "base/footer" .}}
|
{{template "base/footer" .}}
|
|
@ -44,6 +44,16 @@
|
||||||
<input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}>
|
<input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Send register notify e-mail -->
|
||||||
|
{{if .CanSendEmail}}
|
||||||
|
<div class="inline field">
|
||||||
|
<div class="ui checkbox">
|
||||||
|
<label><strong>{{.i18n.Tr "admin.users.send_register_notify"}}</strong></label>
|
||||||
|
<input name="send_notify" type="checkbox" {{if .send_notify}}checked{{end}}>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<button class="ui green button">{{.i18n.Tr "admin.users.new_account"}}</button>
|
<button class="ui green button">{{.i18n.Tr "admin.users.new_account"}}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
13
templates/mail/auth/register_notify.tmpl
Normal file
13
templates/mail/auth/register_notify.tmpl
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>{{.User.Name}}, welcome to {{.AppName}}</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<p>Hi <b>{{.User.Name}}</b>, this is your registration confirmation email for {{.AppName}}!</p>
|
||||||
|
<p>You can now login via username: {{.User.Name}}.</p>
|
||||||
|
<p>© 2015 <a target="_blank" href="http://gogs.io">Gogs: Go Git Service</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,22 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>{{.User.Name}}, welcome to {{.AppName}}</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="mail register success">
|
|
||||||
<div class="ui segment">
|
|
||||||
<div class="ui header">
|
|
||||||
<img class="ui image" src="{{.AppUrl}}/img/favicon.png">
|
|
||||||
{{.AppName}}
|
|
||||||
</div>
|
|
||||||
<div class="ui divider"></div>
|
|
||||||
<p>Hi <b>{{.User.Name}}</b>, this is your registration email for {{.AppName}}!</p>
|
|
||||||
<p>Please click the following link to verify your e-mail address within <b>{{.ActiveCodeLives}} hours</b>:</p>
|
|
||||||
<p><a href="{{.AppUrl}}user/activate?code={{.Code}}">{{.AppUrl}}user/activate?code={{.Code}}</a></p>
|
|
||||||
<p>Not working? Try copying and pasting it to your browser.</p>
|
|
||||||
</div>
|
|
||||||
<p class="copyright text grey">© 2015 <a target="_blank" href="http://gogs.io">Gogs: Go Git Service</a></p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in a new issue