Skip to content
Merged
5 changes: 5 additions & 0 deletions modules/context/form.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,8 @@ func (ctx *Context) FormOptionalBool(key string) util.OptionalBool {
v = v || strings.EqualFold(s, "on")
return util.OptionalBoolOf(v)
}

func (ctx *Context) SetFormString(key, value string) {
_ = ctx.Req.FormValue(key) // force parse form
ctx.Req.Form.Set(key, value)
}
4 changes: 4 additions & 0 deletions routers/web/admin/orgs.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ func Organizations(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.organizations")
ctx.Data["PageIsAdminOrganizations"] = true

if ctx.FormString("sort") == "" {
ctx.SetFormString("sort", explore.UserSearchDefaultAdminSort)
}

explore.RenderUserSearch(ctx, &user_model.SearchUserOptions{
Actor: ctx.Doer,
Type: user_model.UserTypeOrganization,
Expand Down
3 changes: 2 additions & 1 deletion routers/web/admin/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ func Users(ctx *context.Context) {

sortType := ctx.FormString("sort")
if sortType == "" {
sortType = explore.UserSearchDefaultSortType
sortType = explore.UserSearchDefaultAdminSort
ctx.SetFormString("sort", sortType)
}
ctx.PageData["adminUserListSearchForm"] = map[string]interface{}{
"StatusFilterMap": statusFilterMap,
Expand Down
4 changes: 4 additions & 0 deletions routers/web/explore/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ func Organizations(ctx *context.Context) {
visibleTypes = append(visibleTypes, structs.VisibleTypeLimited, structs.VisibleTypePrivate)
}

if ctx.FormString("sort") == "" {
ctx.SetFormString("sort", UserSearchDefaultSortType)
}

RenderUserSearch(ctx, &user_model.SearchUserOptions{
Actor: ctx.Doer,
Type: user_model.UserTypeOrganization,
Expand Down
22 changes: 16 additions & 6 deletions routers/web/explore/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ const (
)

// UserSearchDefaultSortType is the default sort type for user search
const UserSearchDefaultSortType = "alphabetically"
const (
UserSearchDefaultSortType = "recentupdate"
UserSearchDefaultAdminSort = "alphabetically"
)

var nullByte = []byte{0x00}

Expand Down Expand Up @@ -56,14 +59,13 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions,
)

// we can not set orderBy to `models.SearchOrderByXxx`, because there may be a JOIN in the statement, different tables may have the same name columns

ctx.Data["SortType"] = ctx.FormString("sort")
switch ctx.FormString("sort") {
case "newest":
orderBy = "`user`.id DESC"
case "oldest":
orderBy = "`user`.id ASC"
case "recentupdate":
orderBy = "`user`.updated_unix DESC"
case "leastupdate":
orderBy = "`user`.updated_unix ASC"
case "reversealphabetically":
Expand All @@ -72,10 +74,14 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions,
orderBy = "`user`.last_login_unix ASC"
case "reverselastlogin":
orderBy = "`user`.last_login_unix DESC"
case UserSearchDefaultSortType: // "alphabetically"
default:
case "alphabetically":
orderBy = "`user`.name ASC"
ctx.Data["SortType"] = UserSearchDefaultSortType
case "recentupdate":
fallthrough
default:
// in case the sortType is not valid, we set it to recentupdate
ctx.Data["SortType"] = "recentupdate"
orderBy = "`user`.updated_unix DESC"
}

opts.Keyword = ctx.FormTrim("q")
Expand Down Expand Up @@ -127,6 +133,10 @@ func Users(ctx *context.Context) {
ctx.Data["PageIsExploreUsers"] = true
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled

if ctx.FormString("sort") == "" {
ctx.SetFormString("sort", UserSearchDefaultSortType)
}

RenderUserSearch(ctx, &user_model.SearchUserOptions{
Actor: ctx.Doer,
Type: user_model.UserTypeIndividual,
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/setting_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestSettingShowUserEmailExplore(t *testing.T) {
setting.UI.ShowUserEmail = true

session := loginUser(t, "user2")
req := NewRequest(t, "GET", "/explore/users")
req := NewRequest(t, "GET", "/explore/users?sort=alphabetically")
resp := session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body)
assert.Contains(t,
Expand All @@ -30,7 +30,7 @@ func TestSettingShowUserEmailExplore(t *testing.T) {

setting.UI.ShowUserEmail = false

req = NewRequest(t, "GET", "/explore/users")
req = NewRequest(t, "GET", "/explore/users?sort=alphabetically")
resp = session.MakeRequest(t, req, http.StatusOK)
htmlDoc = NewHTMLParser(t, resp.Body)
assert.NotContains(t,
Expand Down