diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2021-10-13 02:11:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 20:11:35 +0200 |
commit | 7bcbdd07072d375eb9f24a64a047879ae2aa7aed (patch) | |
tree | 39ec57de914d4ccb05395ee991b94f6bca90dedb /routers/web/admin | |
parent | d0a681fbc3fb626adcddbbb13f8c96c0bbd72c02 (diff) | |
download | gitea-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.go | 23 |
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) } |