mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-06 10:19:11 +01:00
parent
7fb09f035a
commit
ba91214633
4 changed files with 71 additions and 9 deletions
|
@ -620,6 +620,7 @@ type AccessibleReposEnvironment interface {
|
||||||
RepoIDs(page, pageSize int) ([]int64, error)
|
RepoIDs(page, pageSize int) ([]int64, error)
|
||||||
Repos(page, pageSize int) ([]*Repository, error)
|
Repos(page, pageSize int) ([]*Repository, error)
|
||||||
MirrorRepos() ([]*Repository, error)
|
MirrorRepos() ([]*Repository, error)
|
||||||
|
AddKeyword(keyword string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type accessibleReposEnv struct {
|
type accessibleReposEnv struct {
|
||||||
|
@ -627,6 +628,7 @@ type accessibleReposEnv struct {
|
||||||
userID int64
|
userID int64
|
||||||
teamIDs []int64
|
teamIDs []int64
|
||||||
e Engine
|
e Engine
|
||||||
|
keyword string
|
||||||
}
|
}
|
||||||
|
|
||||||
// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
|
// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
|
||||||
|
@ -656,6 +658,9 @@ func (env *accessibleReposEnv) cond() builder.Cond {
|
||||||
if len(env.teamIDs) > 0 {
|
if len(env.teamIDs) > 0 {
|
||||||
cond = cond.Or(builder.In("team_repo.team_id", env.teamIDs))
|
cond = cond.Or(builder.In("team_repo.team_id", env.teamIDs))
|
||||||
}
|
}
|
||||||
|
if env.keyword != "" {
|
||||||
|
cond = cond.And(builder.Like{"`repository`.lower_name", strings.ToLower(env.keyword)})
|
||||||
|
}
|
||||||
return cond
|
return cond
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,3 +736,7 @@ func (env *accessibleReposEnv) MirrorRepos() ([]*Repository, error) {
|
||||||
In("`repository`.id", repoIDs).
|
In("`repository`.id", repoIDs).
|
||||||
Find(&repos)
|
Find(&repos)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (env *accessibleReposEnv) AddKeyword(keyword string) {
|
||||||
|
env.keyword = keyword
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// Copyright 2014 The Gogs Authors. All rights reserved.
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a MIT-style
|
// Use of this source code is governed by a MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
@ -387,6 +388,37 @@ func showOrgProfile(ctx *context.Context) {
|
||||||
org := ctx.Org.Organization
|
org := ctx.Org.Organization
|
||||||
ctx.Data["Title"] = org.DisplayName()
|
ctx.Data["Title"] = org.DisplayName()
|
||||||
|
|
||||||
|
var orderBy models.SearchOrderBy
|
||||||
|
ctx.Data["SortType"] = ctx.Query("sort")
|
||||||
|
switch ctx.Query("sort") {
|
||||||
|
case "newest":
|
||||||
|
orderBy = models.SearchOrderByNewest
|
||||||
|
case "oldest":
|
||||||
|
orderBy = models.SearchOrderByOldest
|
||||||
|
case "recentupdate":
|
||||||
|
orderBy = models.SearchOrderByRecentUpdated
|
||||||
|
case "leastupdate":
|
||||||
|
orderBy = models.SearchOrderByLeastUpdated
|
||||||
|
case "reversealphabetically":
|
||||||
|
orderBy = models.SearchOrderByAlphabeticallyReverse
|
||||||
|
case "alphabetically":
|
||||||
|
orderBy = models.SearchOrderByAlphabetically
|
||||||
|
case "moststars":
|
||||||
|
orderBy = models.SearchOrderByStarsReverse
|
||||||
|
case "feweststars":
|
||||||
|
orderBy = models.SearchOrderByStars
|
||||||
|
case "mostforks":
|
||||||
|
orderBy = models.SearchOrderByForksReverse
|
||||||
|
case "fewestforks":
|
||||||
|
orderBy = models.SearchOrderByForks
|
||||||
|
default:
|
||||||
|
ctx.Data["SortType"] = "recentupdate"
|
||||||
|
orderBy = models.SearchOrderByRecentUpdated
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword := strings.Trim(ctx.Query("q"), " ")
|
||||||
|
ctx.Data["Keyword"] = keyword
|
||||||
|
|
||||||
page := ctx.QueryInt("page")
|
page := ctx.QueryInt("page")
|
||||||
if page <= 0 {
|
if page <= 0 {
|
||||||
page = 1
|
page = 1
|
||||||
|
@ -403,6 +435,9 @@ func showOrgProfile(ctx *context.Context) {
|
||||||
ctx.ServerError("AccessibleReposEnv", err)
|
ctx.ServerError("AccessibleReposEnv", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if len(keyword) != 0 {
|
||||||
|
env.AddKeyword(keyword)
|
||||||
|
}
|
||||||
repos, err = env.Repos(page, setting.UI.User.RepoPagingNum)
|
repos, err = env.Repos(page, setting.UI.User.RepoPagingNum)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("env.Repos", err)
|
ctx.ServerError("env.Repos", err)
|
||||||
|
@ -413,25 +448,41 @@ func showOrgProfile(ctx *context.Context) {
|
||||||
ctx.ServerError("env.CountRepos", err)
|
ctx.ServerError("env.CountRepos", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Repos"] = repos
|
|
||||||
} else {
|
} else {
|
||||||
showPrivate := ctx.IsSigned && ctx.User.IsAdmin
|
showPrivate := ctx.IsSigned && ctx.User.IsAdmin
|
||||||
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, "")
|
if len(keyword) == 0 {
|
||||||
|
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("GetRepositories", err)
|
ctx.ServerError("GetRepositories", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Repos"] = repos
|
|
||||||
count = models.CountUserRepositories(org.ID, showPrivate)
|
count = models.CountUserRepositories(org.ID, showPrivate)
|
||||||
|
} else {
|
||||||
|
repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
|
||||||
|
Keyword: keyword,
|
||||||
|
OwnerID: org.ID,
|
||||||
|
OrderBy: orderBy,
|
||||||
|
Private: showPrivate,
|
||||||
|
Page: page,
|
||||||
|
IsProfile: true,
|
||||||
|
PageSize: setting.UI.User.RepoPagingNum,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("SearchRepositoryByName", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
|
|
||||||
|
|
||||||
if err := org.GetMembers(); err != nil {
|
if err := org.GetMembers(); err != nil {
|
||||||
ctx.ServerError("GetMembers", err)
|
ctx.ServerError("GetMembers", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Members"] = org.Members
|
|
||||||
|
|
||||||
|
ctx.Data["Repos"] = repos
|
||||||
|
ctx.Data["Total"] = count
|
||||||
|
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
|
||||||
|
ctx.Data["Members"] = org.Members
|
||||||
ctx.Data["Teams"] = org.Teams
|
ctx.Data["Teams"] = org.Teams
|
||||||
|
|
||||||
ctx.HTML(200, tplOrgHome)
|
ctx.HTML(200, tplOrgHome)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
<div class="ui fluid action input">
|
<div class="ui fluid action input">
|
||||||
<input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus>
|
<input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus>
|
||||||
<input type="hidden" name="tab" value="{{$.TabName}}">
|
<input type="hidden" name="tab" value="{{$.TabName}}">
|
||||||
|
<input type="hidden" name="sort" value="{{$.SortType}}">
|
||||||
<button class="ui blue button">{{.i18n.Tr "explore.search"}}</button>
|
<button class="ui blue button">{{.i18n.Tr "explore.search"}}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="ui divider"></div>
|
<div class="ui divider"></div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{template "explore/repo_search" .}}
|
||||||
{{template "explore/repo_list" .}}
|
{{template "explore/repo_list" .}}
|
||||||
{{template "base/paginate" .}}
|
{{template "base/paginate" .}}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue