summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Mahn <richmahn@users.noreply.github.com>2019-02-08 09:45:43 -0700
committertechknowlogick <matti@mdranta.net>2019-02-08 11:45:43 -0500
commitba91214633280313a7b97205b9a7cb6e43001680 (patch)
tree2392f593b9ffb8898de0b3edd596262fb10bf427
parent7fb09f035ac8b10191c154ed4395a8e02d3c5e8d (diff)
downloadgitea-ba91214633280313a7b97205b9a7cb6e43001680.tar.gz
gitea-ba91214633280313a7b97205b9a7cb6e43001680.zip
Feature - #3031 - search for org repos (#5986)
-rw-r--r--models/org.go9
-rw-r--r--routers/user/home.go69
-rw-r--r--templates/explore/repo_search.tmpl1
-rw-r--r--templates/org/home.tmpl1
4 files changed, 71 insertions, 9 deletions
diff --git a/models/org.go b/models/org.go
index 3f17e3641f..daff110cf5 100644
--- a/models/org.go
+++ b/models/org.go
@@ -620,6 +620,7 @@ type AccessibleReposEnvironment interface {
RepoIDs(page, pageSize int) ([]int64, error)
Repos(page, pageSize int) ([]*Repository, error)
MirrorRepos() ([]*Repository, error)
+ AddKeyword(keyword string)
}
type accessibleReposEnv struct {
@@ -627,6 +628,7 @@ type accessibleReposEnv struct {
userID int64
teamIDs []int64
e Engine
+ keyword string
}
// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
@@ -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
}
@@ -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
+}
diff --git a/routers/user/home.go b/routers/user/home.go
index 99c747e12c..67a882af9c 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -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.
@@ -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
@@ -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)
@@ -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)
diff --git a/templates/explore/repo_search.tmpl b/templates/explore/repo_search.tmpl
index de0b63e077..62bb5ea3c2 100644
--- a/templates/explore/repo_search.tmpl
+++ b/templates/explore/repo_search.tmpl
@@ -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>
diff --git a/templates/org/home.tmpl b/templates/org/home.tmpl
index 13b557bd7a..03bb525276 100644
--- a/templates/org/home.tmpl
+++ b/templates/org/home.tmpl
@@ -28,6 +28,7 @@
</div>
<div class="ui divider"></div>
{{end}}
+ {{template "explore/repo_search" .}}
{{template "explore/repo_list" .}}
{{template "base/paginate" .}}
</div>