Skip to content

Commit ba91214

Browse files
richmahntechknowlogick
authored andcommitted
Feature - #3031 - search for org repos (#5986)
1 parent 7fb09f0 commit ba91214

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
@@ -620,13 +620,15 @@ type AccessibleReposEnvironment interface {
620620
RepoIDs(page, pageSize int) ([]int64, error)
621621
Repos(page, pageSize int) ([]*Repository, error)
622622
MirrorRepos() ([]*Repository, error)
623+
AddKeyword(keyword string)
623624
}
624625

625626
type accessibleReposEnv struct {
626627
org *User
627628
userID int64
628629
teamIDs []int64
629630
e Engine
631+
keyword string
630632
}
631633

632634
// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
@@ -656,6 +658,9 @@ func (env *accessibleReposEnv) cond() builder.Cond {
656658
if len(env.teamIDs) > 0 {
657659
cond = cond.Or(builder.In("team_repo.team_id", env.teamIDs))
658660
}
661+
if env.keyword != "" {
662+
cond = cond.And(builder.Like{"`repository`.lower_name", strings.ToLower(env.keyword)})
663+
}
659664
return cond
660665
}
661666

@@ -731,3 +736,7 @@ func (env *accessibleReposEnv) MirrorRepos() ([]*Repository, error) {
731736
In("`repository`.id", repoIDs).
732737
Find(&repos)
733738
}
739+
740+
func (env *accessibleReposEnv) AddKeyword(keyword string) {
741+
env.keyword = keyword
742+
}

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

@@ -387,6 +388,37 @@ func showOrgProfile(ctx *context.Context) {
387388
org := ctx.Org.Organization
388389
ctx.Data["Title"] = org.DisplayName()
389390

391+
var orderBy models.SearchOrderBy
392+
ctx.Data["SortType"] = ctx.Query("sort")
393+
switch ctx.Query("sort") {
394+
case "newest":
395+
orderBy = models.SearchOrderByNewest
396+
case "oldest":
397+
orderBy = models.SearchOrderByOldest
398+
case "recentupdate":
399+
orderBy = models.SearchOrderByRecentUpdated
400+
case "leastupdate":
401+
orderBy = models.SearchOrderByLeastUpdated
402+
case "reversealphabetically":
403+
orderBy = models.SearchOrderByAlphabeticallyReverse
404+
case "alphabetically":
405+
orderBy = models.SearchOrderByAlphabetically
406+
case "moststars":
407+
orderBy = models.SearchOrderByStarsReverse
408+
case "feweststars":
409+
orderBy = models.SearchOrderByStars
410+
case "mostforks":
411+
orderBy = models.SearchOrderByForksReverse
412+
case "fewestforks":
413+
orderBy = models.SearchOrderByForks
414+
default:
415+
ctx.Data["SortType"] = "recentupdate"
416+
orderBy = models.SearchOrderByRecentUpdated
417+
}
418+
419+
keyword := strings.Trim(ctx.Query("q"), " ")
420+
ctx.Data["Keyword"] = keyword
421+
390422
page := ctx.QueryInt("page")
391423
if page <= 0 {
392424
page = 1
@@ -403,6 +435,9 @@ func showOrgProfile(ctx *context.Context) {
403435
ctx.ServerError("AccessibleReposEnv", err)
404436
return
405437
}
438+
if len(keyword) != 0 {
439+
env.AddKeyword(keyword)
440+
}
406441
repos, err = env.Repos(page, setting.UI.User.RepoPagingNum)
407442
if err != nil {
408443
ctx.ServerError("env.Repos", err)
@@ -413,25 +448,41 @@ func showOrgProfile(ctx *context.Context) {
413448
ctx.ServerError("env.CountRepos", err)
414449
return
415450
}
416-
ctx.Data["Repos"] = repos
417451
} else {
418452
showPrivate := ctx.IsSigned && ctx.User.IsAdmin
419-
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, "")
420-
if err != nil {
421-
ctx.ServerError("GetRepositories", err)
422-
return
453+
if len(keyword) == 0 {
454+
repos, err = models.GetUserRepositories(org.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
455+
if err != nil {
456+
ctx.ServerError("GetRepositories", err)
457+
return
458+
}
459+
count = models.CountUserRepositories(org.ID, showPrivate)
460+
} else {
461+
repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
462+
Keyword: keyword,
463+
OwnerID: org.ID,
464+
OrderBy: orderBy,
465+
Private: showPrivate,
466+
Page: page,
467+
IsProfile: true,
468+
PageSize: setting.UI.User.RepoPagingNum,
469+
})
470+
if err != nil {
471+
ctx.ServerError("SearchRepositoryByName", err)
472+
return
473+
}
423474
}
424-
ctx.Data["Repos"] = repos
425-
count = models.CountUserRepositories(org.ID, showPrivate)
426475
}
427-
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
428476

429477
if err := org.GetMembers(); err != nil {
430478
ctx.ServerError("GetMembers", err)
431479
return
432480
}
433-
ctx.Data["Members"] = org.Members
434481

482+
ctx.Data["Repos"] = repos
483+
ctx.Data["Total"] = count
484+
ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
485+
ctx.Data["Members"] = org.Members
435486
ctx.Data["Teams"] = org.Teams
436487

437488
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
</div>
2829
</form>

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)