#1525 Triggere mailer for admin created accounts
This commit is contained in:
		
					parent
					
						
							
								986447335d
							
						
					
				
			
			
				commit
				
					
						21e13cb51e
					
				
			
		
					 11 changed files with 213 additions and 191 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue