diff --git a/README.md b/README.md
index 78f8c40ca..0d9e73384 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Gogs(Go Git Service) is a painless self-hosted Git Service written in Go.
![Demo](http://gowalker.org/public/gogs_demo.gif)
-##### Current version: 0.4.7 Beta
+##### Current version: 0.4.8 Beta
### NOTICES
diff --git a/README_ZH.md b/README_ZH.md
index fd78922ab..3bf67f38d 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务。
![Demo](http://gowalker.org/public/gogs_demo.gif)
-##### 当前版本:0.4.7 Beta
+##### 当前版本:0.4.8 Beta
## 开发目的
diff --git a/cmd/web.go b/cmd/web.go
index de1aa03cc..2bc9be457 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -192,28 +192,36 @@ func runWeb(*cli.Context) {
adminReq := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true, AdminRequire: true})
- m.Get("/admin", adminReq, admin.Dashboard)
m.Group("/admin", func(r *macaron.Router) {
- r.Get("/users", admin.Users)
- r.Get("/repos", admin.Repositories)
- r.Get("/auths", admin.Auths)
+ m.Get("", adminReq, admin.Dashboard)
r.Get("/config", admin.Config)
r.Get("/monitor", admin.Monitor)
- }, adminReq)
- m.Group("/admin/users", func(r *macaron.Router) {
- r.Get("/new", admin.NewUser)
- r.Post("/new", bindIgnErr(auth.RegisterForm{}), admin.NewUserPost)
- r.Get("/:userid", admin.EditUser)
- r.Post("/:userid", bindIgnErr(auth.AdminEditUserForm{}), admin.EditUserPost)
- r.Post("/:userid/delete", admin.DeleteUser)
- }, adminReq)
- m.Group("/admin/auths", func(r *macaron.Router) {
- r.Get("/new", admin.NewAuthSource)
- r.Post("/new", bindIgnErr(auth.AuthenticationForm{}), admin.NewAuthSourcePost)
- r.Get("/:authid", admin.EditAuthSource)
- r.Post("/:authid", bindIgnErr(auth.AuthenticationForm{}), admin.EditAuthSourcePost)
- r.Get("/:authid/delete", admin.DeleteAuthSource)
+ m.Group("/users", func(r *macaron.Router) {
+ r.Get("", admin.Users)
+ r.Get("/new", admin.NewUser)
+ r.Post("/new", bindIgnErr(auth.RegisterForm{}), admin.NewUserPost)
+ r.Get("/:userid", admin.EditUser)
+ r.Post("/:userid", bindIgnErr(auth.AdminEditUserForm{}), admin.EditUserPost)
+ r.Post("/:userid/delete", admin.DeleteUser)
+ })
+
+ m.Group("/orgs", func(r *macaron.Router) {
+ r.Get("", admin.Organizations)
+ })
+
+ m.Group("/repos", func(r *macaron.Router) {
+ r.Get("", admin.Repositories)
+ })
+
+ m.Group("/auths", func(r *macaron.Router) {
+ r.Get("", admin.Authentications)
+ r.Get("/new", admin.NewAuthSource)
+ r.Post("/new", bindIgnErr(auth.AuthenticationForm{}), admin.NewAuthSourcePost)
+ r.Get("/:authid", admin.EditAuthSource)
+ r.Post("/:authid", bindIgnErr(auth.AuthenticationForm{}), admin.EditAuthSourcePost)
+ r.Post("/:authid/delete", admin.DeleteAuthSource)
+ })
}, adminReq)
m.Get("/:username", ignSignIn, user.Profile)
diff --git a/conf/locale/locale_en-US.ini b/conf/locale/locale_en-US.ini
index 106e765cb..8fbf42ca8 100644
--- a/conf/locale/locale_en-US.ini
+++ b/conf/locale/locale_en-US.ini
@@ -80,6 +80,7 @@ SSHTitle = SSH key name
HttpsUrl = HTTPS URL
PayloadUrl = Payload URL
TeamName = Team name
+AuthName = Authorization name
require_error = ` cannot be empty.`
alpha_dash_error = ` must be valid alpha or numeric or dash(-_) characters.`
@@ -115,6 +116,8 @@ auth_failed = Authentication failed: %v
still_own_repo = Your account still have ownership of repository, you have to delete or transfer them first.
org_still_own_repo = This organization still have ownership of repository, you have to delete or transfer them first.
+still_own_user = This authentication still has used by some users, you should move them and then delete again.
+
[settings]
profile = Profile
password = Password
@@ -300,6 +303,8 @@ repositories = Repositories
authentication = Authentications
config = Configuration
monitor = Monitoring
+prev = Prev.
+next = Next
dashboard.statistic = Statistic
dashboard.operations = Operations
@@ -343,15 +348,14 @@ dashboard.gc_times = GC Times
users.user_manage_panel = User Manage Panel
users.new_account = Create New Account
users.name = Name
-users.email = E-mail
users.activated = Activated
users.admin = Admin
users.repos = Repos
users.created = Created
users.edit = Edit
-users.auth_source = Auth Source
+users.auth_source = Authorization Source
users.local = Local
-users.auth_login_name = Auth Login Name
+users.auth_login_name = Authorization Login Name
users.update_profile_success = Account profile has been successfully updated.
users.edit_account = Edit Account
users.is_activated = This account is activated
@@ -360,6 +364,46 @@ users.update_profile = Update Account Profile
users.delete_account = Delete This Account
users.still_own_repo = This account still have ownership of repository, you have to delete or transfer them first.
+orgs.org_manage_panel = Organization Manage Panel
+orgs.name = Name
+orgs.teams = Teams
+orgs.members = Members
+
+repos.repo_manage_panel = Repository Manage Panel
+repos.owner = Owner
+repos.name = Name
+repos.private = Private
+repos.watches = Watches
+repos.stars = Stars
+repos.issues = Issues
+
+auths.auth_manage_panel = Authorization Manage Panel
+auths.new = Add New Authorization Source
+auths.name = Name
+auths.type = Type
+auths.enabled = Enabled
+auths.updated = Updated
+auths.auth_type = Authorization Type
+auths.auth_name = Authorization Name
+auths.domain = Domain
+auths.host = Host
+auths.port = Port
+auths.base_dn = Base DN
+auths.attributes = Search Attributes
+auths.filter = Search Filter
+auths.ms_ad_sa = Ms Ad SA
+auths.smtp_auth = SMTP Authorization Type
+auths.smtphost = SMTP Host
+auths.smtpport = SMTP Port
+auths.enable_tls = Enable TLS Encryption
+auths.enable_auto_register = Enable Auto Registration
+auths.tips = Tips
+auths.edit = Edit Authorization Setting
+auths.activated = This authentication has activated
+auths.update_success = Authorization setting has been successfully updated.
+auths.update = Update Authorization Setting
+auths.delete = Delete This Authorization
+
[action]
create_repo = created repository %s
commit_repo = pushed to %s at %s
diff --git a/conf/locale/locale_zh-CN.ini b/conf/locale/locale_zh-CN.ini
index 2254f370b..310bc8c96 100644
--- a/conf/locale/locale_zh-CN.ini
+++ b/conf/locale/locale_zh-CN.ini
@@ -80,6 +80,7 @@ SSHTitle = SSH 密钥名称
HttpsUrl = HTTPS URL 地址
PayloadUrl = 推送地址
TeamName = 团队名称
+AuthName = 认证名称
require_error = 不能为空。
alpha_dash_error = 必须为英文字母、阿拉伯数字或横线(-_)。
@@ -115,6 +116,8 @@ auth_failed = 授权验证失败:%v
still_own_repo = 您的帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!
org_still_own_repo = 该组织仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除组织操作!
+still_own_user = 该授权认证依旧被部分用户使用,请先删除该部分用户后再试!
+
[settings]
profile = 个人信息
password = 修改密码
@@ -129,7 +132,7 @@ full_name = 自定义名称
website = 个人网站
location = 所在地区
update_profile = 更新信息
-update_profile_success = 您的个人信息已经更新成功!
+update_profile_success = 您的个人信息更新成功!
change_password = 修改密码
old_password = 当前密码
@@ -284,7 +287,7 @@ teams.members = 团队成员
teams.update_settings = 更新团队设置
teams.delete_team = 删除当前团队
teams.add_team_member = 添加团队成员
-teams.delete_team_success = 指定团队已经被成功删除!
+teams.delete_team_success = 指定团队删除成功!
teams.read_permission_desc = 该团队拥有对所属仓库的 读取 权限,团队成员可以进行查看和克隆等只读操作。
teams.write_permission_desc = 该团队拥有对所属仓库的 读取 和 写入 的权限。
teams.admin_permission_desc = 该团队拥有一定的 管理 权限,团队成员可以读取、克隆、推送以及添加其它仓库协作者。
@@ -297,9 +300,11 @@ dashboard = 控制面板
users = 用户管理
organizations = 组织管理
repositories = 仓库管理
-authentication = 权限认证管理
+authentication = 授权认证管理
config = 应用配置管理
monitor = 应用监控面板
+prev = 上一页
+next = 下一页
dashboard.statistic = 应用统计数据
dashboard.operations = 管理员操作
@@ -343,7 +348,6 @@ dashboard.gc_times = GC 执行次数
users.user_manage_panel = 用户管理面板
users.new_account = 创建新的帐户
users.name = 用户名
-users.email = 邮箱
users.activated = 已激活
users.admin = 管理员
users.repos = 仓库数
@@ -352,13 +356,53 @@ users.edit = 编辑
users.auth_source = 认证源
users.local = 本地
users.auth_login_name = 认证登录名
-users.update_profile_success = 该用户信息已经更新成功!
+users.update_profile_success = 该用户信息更新成功!
users.edit_account = 编辑用户信息
users.is_activated = 该用户已被激活
users.is_admin = 该用户具有管理员权限
users.update_profile = 更新用户信息
users.delete_account = 删除该用户
+orgs.org_manage_panel = 组织管理面板
+orgs.name = 组织名称
+orgs.teams = 团队数
+orgs.members = 成员数
+
+repos.repo_manage_panel = 仓库管理界面
+repos.owner = 所有者
+repos.name = 仓库名称
+repos.private = 私有库
+repos.watches = 关注数
+repos.stars = 点赞数
+repos.issues = 工单数
+
+auths.auth_manage_panel = 授权认证管理面板
+auths.new = 添加新的认证源
+auths.name = 认证名称
+auths.type = 认证类型
+auths.enabled = 已启用
+auths.updated = 最后更新时间
+auths.auth_type = 授权类型
+auths.auth_name = 授权名称
+auths.domain = 域名
+auths.host = 主机地址
+auths.port = 主机端口
+auths.base_dn = Base DN
+auths.attributes = Search Attributes
+auths.filter = Search Filter
+auths.ms_ad_sa = Ms Ad SA
+auths.smtp_auth = SMTP 授权类型
+auths.smtphost = SMTP 主机地址
+auths.smtpport = SMTP 主机端口
+auths.enable_tls = 启用 TLS 加密
+auths.enable_auto_register = 允许授权用户自动注册
+auths.tips = 帮助提示
+auths.edit = 修改授权认证设置
+auths.activated = 该授权认证已经启用
+auths.update_success = 授权认证设置更新成功!
+auths.update = 更新授权认证信息
+auths.delete = 删除该授权认证
+
[action]
create_repo = 创建了仓库 %s
commit_repo = 推送了 %s 分支的代码到 %s
diff --git a/gogs.go b/gogs.go
index bd1ea621f..2e23ecfc4 100644
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.4.7.0829 Alpha"
+const APP_VER = "0.4.8.0829 Alpha"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/models/org.go b/models/org.go
index 18ed68e6f..ce5067058 100644
--- a/models/org.go
+++ b/models/org.go
@@ -165,6 +165,13 @@ func CountOrganizations() int64 {
return count
}
+// GetOrganizations returns given number of organizations with offset.
+func GetOrganizations(num, offset int) ([]*User, error) {
+ orgs := make([]*User, 0, num)
+ err := x.Limit(num, offset).Where("type=1").Asc("id").Find(&orgs)
+ return orgs, err
+}
+
// TODO: need some kind of mechanism to record failure.
// DeleteOrganization completely and permanently deletes everything of organization.
func DeleteOrganization(org *User) (err error) {
diff --git a/models/user.go b/models/user.go
index 661fb1c22..96881ea35 100644
--- a/models/user.go
+++ b/models/user.go
@@ -248,8 +248,8 @@ func CountUsers() int64 {
}
// GetUsers returns given number of user objects with offset.
-func GetUsers(num, offset int) ([]User, error) {
- users := make([]User, 0, num)
+func GetUsers(num, offset int) ([]*User, error) {
+ users := make([]*User, 0, num)
err := x.Limit(num, offset).Where("type=0").Asc("id").Find(&users)
return users, err
}
diff --git a/public/ng/css/gogs.css b/public/ng/css/gogs.css
index 34d71028e..d81d6f314 100644
--- a/public/ng/css/gogs.css
+++ b/public/ng/css/gogs.css
@@ -1400,31 +1400,37 @@ The register and sign-in page style
.setting-content {
margin-left: 32px;
}
+#auth-setting-form,
#org-setting-form,
#repo-setting-form,
#user-profile-form {
background-color: #FFF;
padding: 30px 0;
}
+#auth-setting-form textarea,
#org-setting-form textarea,
#repo-setting-form textarea,
#user-profile-form textarea {
margin-left: 4px;
height: 100px;
}
+#auth-setting-form label,
#org-setting-form label,
#repo-setting-form label,
#user-profile-form label,
+#auth-setting-form .form-label,
#org-setting-form .form-label,
#repo-setting-form .form-label,
#user-profile-form .form-label {
width: 240px;
}
+#auth-setting-form .ipt,
#org-setting-form .ipt,
#repo-setting-form .ipt,
#user-profile-form .ipt {
width: 360px;
}
+#auth-setting-form .field,
#org-setting-form .field,
#repo-setting-form .field,
#user-profile-form .field {
diff --git a/public/ng/js/gogs.js b/public/ng/js/gogs.js
index 69ac380fd..9fe065552 100644
--- a/public/ng/js/gogs.js
+++ b/public/ng/js/gogs.js
@@ -429,13 +429,13 @@ function initTeamRepositoriesList() {
function initAdmin() {
// Create account.
- $('#login-type').on("change",function(){
+ $('#login-type').on("change", function () {
var v = $(this).val();
- if(v.indexOf("0-")+1){
+ if (v.indexOf("0-") + 1) {
$('.auth-name').toggleHide();
- $(".pwd").find("input").attr("required","required")
+ $(".pwd").find("input").attr("required", "required")
.end().toggleShow();
- }else{
+ } else {
$(".pwd").find("input").removeAttr("required")
.end().toggleHide();
$('.auth-name').toggleShow();
@@ -450,6 +450,27 @@ function initAdmin() {
var $form = $('user-profile-form');
$form.attr('action', $form.data('delete-url'));
});
+ // Create authorization.
+ $('#auth-type').on("change", function () {
+ var v = $(this).val();
+ if (v == 2) {
+ $('.ldap').toggleShow();
+ $('.smtp').toggleHide();
+ }
+ if (v == 3) {
+ $('.smtp').toggleShow();
+ $('.ldap').toggleHide();
+ }
+ });
+ // Delete authorization.
+ $('#auth-delete').click(function (e) {
+ if (!confirm('This authorization is going to be deleted, do you want to continue?')) {
+ e.preventDefault();
+ return true;
+ }
+ var $form = $('auth-setting-form');
+ $form.attr('action', $form.data('delete-url'));
+ });
}
$(document).ready(function () {
diff --git a/public/ng/less/gogs/settings.less b/public/ng/less/gogs/settings.less
index cc922e3ff..b246a947e 100644
--- a/public/ng/less/gogs/settings.less
+++ b/public/ng/less/gogs/settings.less
@@ -31,6 +31,7 @@
margin-left: 32px;
}
+#auth-setting-form,
#org-setting-form,
#repo-setting-form,
#user-profile-form {
diff --git a/routers/admin/admin.go b/routers/admin/admin.go
index 75dbf2712..b2c932c98 100644
--- a/routers/admin/admin.go
+++ b/routers/admin/admin.go
@@ -23,8 +23,6 @@ import (
const (
DASHBOARD base.TplName = "admin/dashboard"
- REPOS base.TplName = "admin/repos"
- AUTHS base.TplName = "admin/auths"
CONFIG base.TplName = "admin/config"
MONITOR_PROCESS base.TplName = "admin/monitor/process"
MONITOR_CRON base.TplName = "admin/monitor/cron"
@@ -156,48 +154,6 @@ func Dashboard(ctx *middleware.Context) {
ctx.HTML(200, DASHBOARD)
}
-func Repositories(ctx *middleware.Context) {
- ctx.Data["Title"] = "Repository Management"
- ctx.Data["PageIsRepos"] = true
-
- p := com.StrTo(ctx.Query("p")).MustInt()
- if p < 1 {
- p = 1
- }
- pageNum := 50
- count := models.CountRepositories()
- curCount := int64((p-1)*pageNum + pageNum)
- if curCount > count {
- p = int(count) / pageNum
- } else if count > curCount {
- ctx.Data["NextPageNum"] = p + 1
- }
- if p > 1 {
- ctx.Data["LastPageNum"] = p - 1
- }
-
- var err error
- ctx.Data["Repos"], err = models.GetRepositoriesWithUsers(pageNum, (p-1)*pageNum)
- if err != nil {
- ctx.Handle(500, "admin.Repositories", err)
- return
- }
- ctx.HTML(200, REPOS)
-}
-
-func Auths(ctx *middleware.Context) {
- ctx.Data["Title"] = "Auth Sources"
- ctx.Data["PageIsAuths"] = true
-
- var err error
- ctx.Data["Sources"], err = models.GetAuths()
- if err != nil {
- ctx.Handle(500, "admin.Auths", err)
- return
- }
- ctx.HTML(200, AUTHS)
-}
-
func Config(ctx *middleware.Context) {
ctx.Data["Title"] = "Server Configuration"
ctx.Data["PageIsConfig"] = true
diff --git a/routers/admin/auth.go b/routers/admin/auths.go
similarity index 68%
rename from routers/admin/auth.go
rename to routers/admin/auths.go
index 44af96275..6fbeab354 100644
--- a/routers/admin/auth.go
+++ b/routers/admin/auths.go
@@ -5,8 +5,6 @@
package admin
import (
- "strings"
-
"github.com/Unknwon/com"
"github.com/go-xorm/core"
@@ -19,21 +17,38 @@ import (
)
const (
+ AUTHS base.TplName = "admin/auth/list"
AUTH_NEW base.TplName = "admin/auth/new"
AUTH_EDIT base.TplName = "admin/auth/edit"
)
+func Authentications(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("admin.authentication")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminAuthentications"] = true
+
+ var err error
+ ctx.Data["Sources"], err = models.GetAuths()
+ if err != nil {
+ ctx.Handle(500, "GetAuths", err)
+ return
+ }
+ ctx.HTML(200, AUTHS)
+}
+
func NewAuthSource(ctx *middleware.Context) {
- ctx.Data["Title"] = "New Authentication"
- ctx.Data["PageIsAuths"] = true
+ ctx.Data["Title"] = ctx.Tr("admin.auths.new")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminAuthentications"] = true
ctx.Data["LoginTypes"] = models.LoginTypes
ctx.Data["SMTPAuths"] = models.SMTPAuths
ctx.HTML(200, AUTH_NEW)
}
func NewAuthSourcePost(ctx *middleware.Context, form auth.AuthenticationForm) {
- ctx.Data["Title"] = "New Authentication"
- ctx.Data["PageIsAuths"] = true
+ ctx.Data["Title"] = ctx.Tr("admin.auths.new")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminAuthentications"] = true
ctx.Data["LoginTypes"] = models.LoginTypes
ctx.Data["SMTPAuths"] = models.SMTPAuths
@@ -79,30 +94,29 @@ func NewAuthSourcePost(ctx *middleware.Context, form auth.AuthenticationForm) {
}
if err := models.CreateSource(source); err != nil {
- ctx.Handle(500, "admin.auths.NewAuth(CreateSource)", err)
+ ctx.Handle(500, "CreateSource", err)
return
}
- log.Trace("%s Authentication created by admin(%s): %s", ctx.Req.RequestURI,
- ctx.User.LowerName, strings.ToLower(form.AuthName))
-
+ log.Trace("Authentication created by admin(%s): %s", ctx.User.Name, form.AuthName)
ctx.Redirect("/admin/auths")
}
func EditAuthSource(ctx *middleware.Context) {
- ctx.Data["Title"] = "Edit Authentication"
- ctx.Data["PageIsAuths"] = true
+ ctx.Data["Title"] = ctx.Tr("admin.auths.edit")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminAuthentications"] = true
ctx.Data["LoginTypes"] = models.LoginTypes
ctx.Data["SMTPAuths"] = models.SMTPAuths
- id, err := com.StrTo(ctx.Params(":authid")).Int64()
- if err != nil {
- ctx.Handle(404, "admin.auths.EditAuthSource", err)
+ id := com.StrTo(ctx.Params(":authid")).MustInt64()
+ if id == 0 {
+ ctx.Handle(404, "EditAuthSource", nil)
return
}
u, err := models.GetLoginSourceById(id)
if err != nil {
- ctx.Handle(500, "admin.user.EditUser(GetLoginSourceById)", err)
+ ctx.Handle(500, "GetLoginSourceById", err)
return
}
ctx.Data["Source"] = u
@@ -110,7 +124,9 @@ func EditAuthSource(ctx *middleware.Context) {
}
func EditAuthSourcePost(ctx *middleware.Context, form auth.AuthenticationForm) {
- ctx.Data["Title"] = "Edit Authentication"
+ ctx.Data["Title"] = ctx.Tr("admin.auths.edit")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminAuthentications"] = true
ctx.Data["PageIsAuths"] = true
ctx.Data["LoginTypes"] = models.LoginTypes
ctx.Data["SMTPAuths"] = models.SMTPAuths
@@ -158,44 +174,38 @@ func EditAuthSourcePost(ctx *middleware.Context, form auth.AuthenticationForm) {
}
if err := models.UpdateSource(&u); err != nil {
- ctx.Handle(500, "admin.auths.EditAuth(UpdateSource)", err)
+ ctx.Handle(500, "UpdateSource", err)
return
}
- log.Trace("%s Authentication changed by admin(%s): %s", ctx.Req.RequestURI,
- ctx.User.LowerName, form.AuthName)
-
- ctx.Redirect("/admin/auths")
+ log.Trace("Authentication changed by admin(%s): %s", ctx.User.Name, form.AuthName)
+ ctx.Flash.Success(ctx.Tr("admin.auths.update_success"))
+ ctx.Redirect("/admin/auths/" + ctx.Params(":authid"))
}
func DeleteAuthSource(ctx *middleware.Context) {
- ctx.Data["Title"] = "Delete Authentication"
- ctx.Data["PageIsAuths"] = true
-
- id, err := com.StrTo(ctx.Params(":authid")).Int64()
- if err != nil {
- ctx.Handle(404, "admin.auths.DeleteAuth", err)
+ id := com.StrTo(ctx.Params(":authid")).MustInt64()
+ if id == 0 {
+ ctx.Handle(404, "DeleteAuthSource", nil)
return
}
a, err := models.GetLoginSourceById(id)
if err != nil {
- ctx.Handle(500, "admin.auths.DeleteAuth(GetLoginSourceById)", err)
+ ctx.Handle(500, "GetLoginSourceById", err)
return
}
if err = models.DelLoginSource(a); err != nil {
switch err {
case models.ErrAuthenticationUserUsed:
- ctx.Flash.Error("This authentication still has used by some users, you should move them and then delete again.")
+ ctx.Flash.Error("form.still_own_user")
ctx.Redirect("/admin/auths/" + ctx.Params(":authid"))
default:
- ctx.Handle(500, "admin.auths.DeleteAuth(DelLoginSource)", err)
+ ctx.Handle(500, "DelLoginSource", err)
}
return
}
- log.Trace("%s Authentication deleted by admin(%s): %s", ctx.Req.RequestURI,
- ctx.User.LowerName, ctx.User.LowerName)
-
+ log.Trace("Authentication deleted by admin(%s): %s", ctx.User.Name, a.Name)
ctx.Redirect("/admin/auths")
}
diff --git a/routers/admin/orgs.go b/routers/admin/orgs.go
new file mode 100644
index 000000000..e813e4742
--- /dev/null
+++ b/routers/admin/orgs.go
@@ -0,0 +1,32 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package admin
+
+import (
+ "github.com/gogits/gogs/models"
+ "github.com/gogits/gogs/modules/base"
+ "github.com/gogits/gogs/modules/middleware"
+)
+
+const (
+ ORGS base.TplName = "admin/org/list"
+)
+
+func Organizations(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("admin.orgs")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminOrganizations"] = true
+
+ pageNum := 50
+ p := pagination(ctx, models.CountOrganizations(), pageNum)
+
+ var err error
+ ctx.Data["Orgs"], err = models.GetOrganizations(pageNum, (p-1)*pageNum)
+ if err != nil {
+ ctx.Handle(500, "GetUsers", err)
+ return
+ }
+ ctx.HTML(200, ORGS)
+}
diff --git a/routers/admin/repos.go b/routers/admin/repos.go
new file mode 100644
index 000000000..6d9169f94
--- /dev/null
+++ b/routers/admin/repos.go
@@ -0,0 +1,32 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package admin
+
+import (
+ "github.com/gogits/gogs/models"
+ "github.com/gogits/gogs/modules/base"
+ "github.com/gogits/gogs/modules/middleware"
+)
+
+const (
+ REPOS base.TplName = "admin/repo/list"
+)
+
+func Repositories(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("admin.repositories")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminRepositories"] = true
+
+ pageNum := 50
+ p := pagination(ctx, models.CountRepositories(), pageNum)
+
+ var err error
+ ctx.Data["Repos"], err = models.GetRepositoriesWithUsers(pageNum, (p-1)*pageNum)
+ if err != nil {
+ ctx.Handle(500, "GetRepositoriesWithUsers", err)
+ return
+ }
+ ctx.HTML(200, REPOS)
+}
diff --git a/routers/admin/users.go b/routers/admin/users.go
index 5f98a64be..3f14e48f0 100644
--- a/routers/admin/users.go
+++ b/routers/admin/users.go
@@ -22,17 +22,11 @@ const (
USER_EDIT base.TplName = "admin/user/edit"
)
-func Users(ctx *middleware.Context) {
- ctx.Data["Title"] = ctx.Tr("admin.users")
- ctx.Data["PageIsAdmin"] = true
- ctx.Data["PageIsAdminUsers"] = true
-
+func pagination(ctx *middleware.Context, count int64, pageNum int) int {
p := com.StrTo(ctx.Query("p")).MustInt()
if p < 1 {
p = 1
}
- pageNum := 50
- count := models.CountUsers()
curCount := int64((p-1)*pageNum + pageNum)
if curCount > count {
p = int(count) / pageNum
@@ -42,11 +36,21 @@ func Users(ctx *middleware.Context) {
if p > 1 {
ctx.Data["LastPageNum"] = p - 1
}
+ return p
+}
+
+func Users(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("admin.users")
+ ctx.Data["PageIsAdmin"] = true
+ ctx.Data["PageIsAdminUsers"] = true
+
+ pageNum := 50
+ p := pagination(ctx, models.CountUsers(), pageNum)
var err error
ctx.Data["Users"], err = models.GetUsers(pageNum, (p-1)*pageNum)
if err != nil {
- ctx.Handle(500, "admin.Users(GetUsers)", err)
+ ctx.Handle(500, "GetUsers", err)
return
}
ctx.HTML(200, USERS)
diff --git a/templates/.VERSION b/templates/.VERSION
index 102c74296..6b8f7aafd 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.4.7.0829 Alpha
\ No newline at end of file
+0.4.8.0829 Alpha
\ No newline at end of file
diff --git a/templates/admin/auth/edit.tmpl b/templates/admin/auth/edit.tmpl
index a2c2ddc69..400a4cebe 100644
--- a/templates/admin/auth/edit.tmpl
+++ b/templates/admin/auth/edit.tmpl
@@ -1,165 +1,113 @@
-{{template "base/head" .}}
-{{template "base/navbar" .}}
-
- {{template "admin/nav" .}}
-
-
-
- Edit Authentication
-
+{{template "ng/base/head" .}}
+{{template "ng/base/header" .}}
+
+
+
+ {{template "admin/nav" .}}
+
+
+ {{template "ng/base/alert" .}}
+
-
-{{template "base/footer" .}}
+{{template "ng/base/footer" .}}
diff --git a/templates/admin/auth/list.tmpl b/templates/admin/auth/list.tmpl
new file mode 100644
index 000000000..591d2ed4c
--- /dev/null
+++ b/templates/admin/auth/list.tmpl
@@ -0,0 +1,59 @@
+{{template "ng/base/head" .}}
+{{template "ng/base/header" .}}
+
+
+
+ {{template "admin/nav" .}}
+
+
+ {{template "ng/base/alert" .}}
+
+
+
+
+
{{.i18n.Tr "admin.auths.new"}}
+
+
+
+
+ Id |
+ {{.i18n.Tr "admin.auths.name"}} |
+ {{.i18n.Tr "admin.auths.type"}} |
+ {{.i18n.Tr "admin.auths.enabled"}} |
+ {{.i18n.Tr "admin.auths.updated"}} |
+ {{.i18n.Tr "admin.users.created"}} |
+ {{.i18n.Tr "admin.users.edit"}} |
+
+
+
+ {{range .Sources}}
+
+ {{.Id}} |
+ {{.Name}} |
+ {{.TypeString}} |
+ |
+ {{DateFormat .Updated "M d, Y"}} |
+ {{DateFormat .Created "M d, Y"}} |
+ |
+
+ {{end}}
+
+
+ {{if or .LastPageNum .NextPageNum}}
+
+ {{end}}
+
+
+
+
+
+
+
+
+
+{{template "ng/base/footer" .}}
\ No newline at end of file
diff --git a/templates/admin/auth/new.tmpl b/templates/admin/auth/new.tmpl
index abb88043e..12d47d286 100644
--- a/templates/admin/auth/new.tmpl
+++ b/templates/admin/auth/new.tmpl
@@ -1,178 +1,110 @@
-{{template "base/head" .}}
-{{template "base/navbar" .}}
-
- {{template "admin/nav" .}}
-
-
-
- New Authentication
-
-
-
-
-