summaryrefslogtreecommitdiffstats
path: root/routers/web/admin
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2021-10-13 02:11:35 +0800
committerGitHub <noreply@github.com>2021-10-12 20:11:35 +0200
commit7bcbdd07072d375eb9f24a64a047879ae2aa7aed (patch)
tree39ec57de914d4ccb05395ee991b94f6bca90dedb /routers/web/admin
parentd0a681fbc3fb626adcddbbb13f8c96c0bbd72c02 (diff)
downloadgitea-7bcbdd07072d375eb9f24a64a047879ae2aa7aed.tar.gz
gitea-7bcbdd07072d375eb9f24a64a047879ae2aa7aed.zip
Add user status filter to admin user management page (#16770)
It makes Admin's life easier to filter users by various status. * introduce window.config.PageData to pass template data to javascript module and small refactor move legacy window.ActivityTopAuthors to window.config.PageData.ActivityTopAuthors make HTML structure more IDE-friendly in footer.tmpl and head.tmpl remove incorrect <style class="list-search-style"></style> in head.tmpl use log.Error instead of log.Critical in admin user search * use LEFT JOIN instead of SubQuery when admin filters users by 2fa. revert non-en locale. * use OptionalBool instead of status map * refactor SearchUserOptions.toConds to SearchUserOptions.toSearchQueryBase * add unit test for user search * only allow admin to use filters to search users
Diffstat (limited to 'routers/web/admin')
-rw-r--r--routers/web/admin/users.go23
1 files changed, 22 insertions, 1 deletions
diff --git a/routers/web/admin/users.go b/routers/web/admin/users.go
index ea666ab4d4..0041f3d07c 100644
--- a/routers/web/admin/users.go
+++ b/routers/web/admin/users.go
@@ -19,6 +19,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/password"
"code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/routers/web/explore"
router_user_setting "code.gitea.io/gitea/routers/web/user/setting"
@@ -38,13 +39,33 @@ func Users(ctx *context.Context) {
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminUsers"] = true
+ statusFilterKeys := []string{"is_active", "is_admin", "is_restricted", "is_2fa_enabled", "is_prohibit_login"}
+ statusFilterMap := map[string]string{}
+ for _, filterKey := range statusFilterKeys {
+ statusFilterMap[filterKey] = ctx.FormString("status_filter[" + filterKey + "]")
+ }
+
+ sortType := ctx.FormString("sort")
+ if sortType == "" {
+ sortType = explore.UserSearchDefaultSortType
+ }
+ ctx.PageData["adminUserListSearchForm"] = map[string]interface{}{
+ "StatusFilterMap": statusFilterMap,
+ "SortType": sortType,
+ }
+
explore.RenderUserSearch(ctx, &models.SearchUserOptions{
Actor: ctx.User,
Type: models.UserTypeIndividual,
ListOptions: db.ListOptions{
PageSize: setting.UI.Admin.UserPagingNum,
},
- SearchByEmail: true,
+ SearchByEmail: true,
+ IsActive: util.OptionalBoolParse(statusFilterMap["is_active"]),
+ IsAdmin: util.OptionalBoolParse(statusFilterMap["is_admin"]),
+ IsRestricted: util.OptionalBoolParse(statusFilterMap["is_restricted"]),
+ IsTwoFactorEnabled: util.OptionalBoolParse(statusFilterMap["is_2fa_enabled"]),
+ IsProhibitLogin: util.OptionalBoolParse(statusFilterMap["is_prohibit_login"]),
}, tplUsers)
}