Skip to content

Commit 45b0108

Browse files
richmahnGogs
authored andcommitted
Feature - go-gitea#3031 - search for org repos (go-gitea#5986)
1 parent 4876976 commit 45b0108

File tree

4 files changed

+71
-9
lines changed

4 files changed

+71
-9
lines changed

models/org.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,13 +616,15 @@ type AccessibleReposEnvironment interface {
616616
RepoIDs(page, pageSize int) ([]int64, error)
617617
Repos(page, pageSize int) ([]*Repository, error)
618618
MirrorRepos() ([]*Repository, error)
619+
AddKeyword(keyword string)
619620
}
620621

621622
type accessibleReposEnv struct {
622623
org *User
623624
userID int64
624625
teamIDs []int64
625626
e Engine
627+
keyword string
626628
}
627629

628630
// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
@@ -652,6 +654,9 @@ func (env *accessibleReposEnv) cond() builder.Cond {
652654
if len(env.teamIDs) > 0 {
653655
cond = cond.Or(builder.In("team_repo.team_id", env.teamIDs))
654656
}
657+
if env.keyword != "" {
658+
cond = cond.And(builder.Like{"`repository`.lower_name", strings.ToLower(env.keyword)})
659+
}
655660
return cond
656661
}
657662

@@ -727,3 +732,7 @@ func (env *accessibleReposEnv) MirrorRepos() ([]*Repository, error) {
727732
In("`repository`.id", repoIDs).
728733
Find(&repos)
729734
}
735+
736+
func (env *accessibleReposEnv) AddKeyword(keyword string) {
737+
env.keyword = keyword
738+
}

routers/user/home.go

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Copyright 2014 The Gogs Authors. All rights reserved.
2+
// Copyright 2019 The Gitea Authors. All rights reserved.
23
// Use of this source code is governed by a MIT-style
34
// license that can be found in the LICENSE file.
45

@@ -374,6 +375,37 @@ func showOrgProfile(ctx *context.Context) {
374375
org := ctx.Org.Organization
375376
ctx.Data["Title"] = org.DisplayName()
376377

378+
var orderBy models.SearchOrderBy
379+
ctx.Data["SortType"] = ctx.Query("sort")
380+
switch ctx.Query("sort") {
381+
case "newest":
382+
orderBy = models.SearchOrderByNewest
383+
case "oldest":
384+
orderBy = models.SearchOrderByOldest
385+
case "recentupdate":
386+
orderBy = models.SearchOrderByRecentUpdated
387+
case "leastupdate":
388+
orderBy = models.SearchOrderByLeastUpdated
389+
case "reversealphabetically":
390+
orderBy = models.SearchOrderByAlphabeticallyReverse
391+
case "alphabetically":
392+
orderBy = models.SearchOrderByAlphabetically
393+
case "moststars":
394+
orderBy = models.SearchOrderByStarsReverse
395+
case "feweststars":
396+
orderBy = models.SearchOrderByStars
397+
case "mostforks":
398+
orderBy = models.SearchOrderByForksReverse
399+
case "fewestforks":
400+
orderBy = models.SearchOrderByForks
401+
default:
402+
ctx.Data["SortType"] = "recentupdate"
403+
orderBy = models.SearchOrderByRecentUpdated
404+
}
405+
406+
keyword := strings.Trim(ctx.Query("q"), " ")
407+
ctx.Data["Keyword"] = keyword
408+
377409
page := ctx.QueryInt("page")
378410
if page <= 0 {
379411
page = 1
@@ -390,6 +422,9 @@ func showOrgProfile(ctx *context.Context) {
390422
ctx.ServerError("AccessibleReposEnv", err)
391423
return
392424
}
425+
if len(keyword) != 0 {
426+
env.AddKeyword(keyword)
427+
}
393428
repos, err = env.Repos(page, setting.UI.User.RepoPagingNum)
394429
if err != nil {
395430
ctx.ServerError("env.Repos", err)
@@ -400,25 +435,41 @@ func showOrgProfile(ctx *context.Context) {
400435
ctx.ServerError("env.CountRepos", err)
401436
return
402437
}
403-
ctx.Data["Repos"] = repos
404438
} else {
405439
showPrivate := ctx.IsSigned && ctx.User.IsAdmin
406-
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, "")
407-
if err != nil {
408-
ctx.ServerError("GetRepositories", err)
409-
return
440+
if len(keyword) == 0 {
441+
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
442+
if err != nil {
443+
ctx.ServerError("GetRepositories", err)
444+
return
445+
}
446+
count = models.CountUserRepositories(org.ID, showPrivate)
447+
} else {
448+
repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
449+
Keyword: keyword,
450+
OwnerID: org.ID,
451+
OrderBy: orderBy,
452+
Private: showPrivate,
453+
Page: page,
454+
IsProfile: true,
455+
PageSize: setting.UI.User.RepoPagingNum,
456+
})
457+
if err != nil {
458+
ctx.ServerError("SearchRepositoryByName", err)
459+
return
460+
}
410461
}
411-
ctx.Data["Repos"] = repos
412-
count = models.CountUserRepositories(org.ID, showPrivate)
413462
}
414-
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
415463

416464
if err := org.GetMembers(); err != nil {
417465
ctx.ServerError("GetMembers", err)
418466
return
419467
}
420-
ctx.Data["Members"] = org.Members
421468

469+
ctx.Data["Repos"] = repos
470+
ctx.Data["Total"] = count
471+
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
472+
ctx.Data["Members"] = org.Members
422473
ctx.Data["Teams"] = org.Teams
423474

424475
ctx.HTML(200, tplOrgHome)

templates/explore/repo_search.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<div class="ui fluid action input">
2424
<input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus>
2525
<input type="hidden" name="tab" value="{{$.TabName}}">
26+
<input type="hidden" name="sort" value="{{$.SortType}}">
2627
<button class="ui blue button">{{.i18n.Tr "explore.search"}}</button>
2728
{{template "explore/info_icon" .}}
2829
</div>

templates/org/home.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
</div>
2929
<div class="ui divider"></div>
3030
{{end}}
31+
{{template "explore/repo_search" .}}
3132
{{template "explore/repo_list" .}}
3233
{{template "base/paginate" .}}
3334
</div>

0 commit comments

Comments
 (0)