Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature - #3031 - search for org repos #5986

Merged
9 changes: 9 additions & 0 deletions models/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -620,13 +620,15 @@ type AccessibleReposEnvironment interface {
RepoIDs(page, pageSize int) ([]int64, error)
Repos(page, pageSize int) ([]*Repository, error)
MirrorRepos() ([]*Repository, error)
AddKeyword(keyword string)
}

type accessibleReposEnv struct {
org *User
userID int64
teamIDs []int64
e Engine
keyword string
}

// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
Expand Down Expand Up @@ -656,6 +658,9 @@ func (env *accessibleReposEnv) cond() builder.Cond {
if len(env.teamIDs) > 0 {
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
}

Expand Down Expand Up @@ -731,3 +736,7 @@ func (env *accessibleReposEnv) MirrorRepos() ([]*Repository, error) {
In("`repository`.id", repoIDs).
Find(&repos)
}

func (env *accessibleReposEnv) AddKeyword(keyword string) {
env.keyword = keyword
}
69 changes: 60 additions & 9 deletions routers/user/home.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// 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
// license that can be found in the LICENSE file.

Expand Down Expand Up @@ -387,6 +388,37 @@ func showOrgProfile(ctx *context.Context) {
org := ctx.Org.Organization
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")
if page <= 0 {
page = 1
Expand All @@ -403,6 +435,9 @@ func showOrgProfile(ctx *context.Context) {
ctx.ServerError("AccessibleReposEnv", err)
return
}
if len(keyword) != 0 {
env.AddKeyword(keyword)
}
repos, err = env.Repos(page, setting.UI.User.RepoPagingNum)
if err != nil {
ctx.ServerError("env.Repos", err)
Expand All @@ -413,25 +448,41 @@ func showOrgProfile(ctx *context.Context) {
ctx.ServerError("env.CountRepos", err)
return
}
ctx.Data["Repos"] = repos
} else {
showPrivate := ctx.IsSigned && ctx.User.IsAdmin
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, "")
if err != nil {
ctx.ServerError("GetRepositories", err)
return
if len(keyword) == 0 {
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
if err != nil {
ctx.ServerError("GetRepositories", err)
return
}
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["Repos"] = repos
count = models.CountUserRepositories(org.ID, showPrivate)
}
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)

if err := org.GetMembers(); err != nil {
ctx.ServerError("GetMembers", err)
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.HTML(200, tplOrgHome)
Expand Down
1 change: 1 addition & 0 deletions templates/explore/repo_search.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<div class="ui fluid action input">
<input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus>
<input type="hidden" name="tab" value="{{$.TabName}}">
<input type="hidden" name="sort" value="{{$.SortType}}">
<button class="ui blue button">{{.i18n.Tr "explore.search"}}</button>
</div>
</form>
Expand Down
1 change: 1 addition & 0 deletions templates/org/home.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
</div>
<div class="ui divider"></div>
{{end}}
{{template "explore/repo_search" .}}
{{template "explore/repo_list" .}}
{{template "base/paginate" .}}
</div>
Expand Down