[v10.0/forgejo] fix: set explore pages to configurable default sort (#6749)

**Backport:** https://codeberg.org/forgejo/forgejo/pulls/6708

- Currently, the explore/organizations page always defaults to using "newest" as its sort. Instead, use the pre-existing config option (`setting.UI.ExploreDefaultSort`) so server administrators can change the default sort order.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests

(Sorry, not sure how to add a test for this change)

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

I don't mind either way.

- [ ] I do not want this change to show in the release notes.
- [x] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Co-authored-by: John Moon <john.moon@vts-i.com>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6749
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
This commit is contained in:
forgejo-backport-action 2025-01-31 11:12:01 +00:00 committed by Gusted
parent 1b00bf2d26
commit 27276ff26e
4 changed files with 65 additions and 3 deletions

View file

@ -39,7 +39,11 @@ func Organizations(ctx *context.Context) {
)
sortOrder := ctx.FormString("sort")
if sortOrder == "" {
sortOrder = "newest"
if supportedSortOrders.Contains(setting.UI.ExploreDefaultSort) {
sortOrder = setting.UI.ExploreDefaultSort
} else {
sortOrder = "newest"
}
ctx.SetFormString("sort", sortOrder)
}

View file

@ -149,7 +149,11 @@ func Users(ctx *context.Context) {
)
sortOrder := ctx.FormString("sort")
if sortOrder == "" {
sortOrder = "newest"
if supportedSortOrders.Contains(setting.UI.ExploreDefaultSort) {
sortOrder = setting.UI.ExploreDefaultSort
} else {
sortOrder = "newest"
}
ctx.SetFormString("sort", sortOrder)
}

View file

@ -0,0 +1,49 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package integration
import (
"net/http"
"testing"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestExploreOrg(t *testing.T) {
defer tests.PrepareTestEnv(t)()
// Set the default sort order
defer test.MockVariableValue(&setting.UI.ExploreDefaultSort, "alphabetically")()
cases := []struct{ sortOrder, expected string }{
{"", "?sort=" + setting.UI.ExploreDefaultSort + "&q="},
{"newest", "?sort=newest&q="},
{"oldest", "?sort=oldest&q="},
{"alphabetically", "?sort=alphabetically&q="},
{"reversealphabetically", "?sort=reversealphabetically&q="},
}
for _, c := range cases {
req := NewRequest(t, "GET", "/explore/organizations?sort="+c.sortOrder)
resp := MakeRequest(t, req, http.StatusOK)
h := NewHTMLParser(t, resp.Body)
href, _ := h.Find(`.ui.dropdown .menu a.active.item[href^="?sort="]`).Attr("href")
assert.Equal(t, c.expected, href)
}
// these sort orders shouldn't be supported, to avoid leaking user activity
cases404 := []string{
"/explore/organizations?sort=mostMembers",
"/explore/organizations?sort=leastGroups",
"/explore/organizations?sort=leastupdate",
"/explore/organizations?sort=reverseleastupdate",
}
for _, c := range cases404 {
req := NewRequest(t, "GET", c).SetHeader("Accept", "text/html")
MakeRequest(t, req, http.StatusNotFound)
}
}

View file

@ -7,6 +7,8 @@ import (
"net/http"
"testing"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
@ -15,8 +17,11 @@ import (
func TestExploreUser(t *testing.T) {
defer tests.PrepareTestEnv(t)()
// Set the default sort order
defer test.MockVariableValue(&setting.UI.ExploreDefaultSort, "reversealphabetically")()
cases := []struct{ sortOrder, expected string }{
{"", "?sort=newest&q="},
{"", "?sort=" + setting.UI.ExploreDefaultSort + "&q="},
{"newest", "?sort=newest&q="},
{"oldest", "?sort=oldest&q="},
{"alphabetically", "?sort=alphabetically&q="},