Added repository search ordered by stars or forks. Forks column in admin repo list. (#3969)
* Added repository search order by stars or forks. Added Forks column to admin repository list. Signed-off-by: Alexey Terentyev <axifnx@gmail.com> * Renamed search repo template Signed-off-by: Alexey Terentyev <axifnx@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								ea2a938e8a
							
						
					
				
			
			
				commit
				
					
						b908ac9fab
					
				
			
		
					 11 changed files with 99 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -152,6 +152,10 @@ const (
 | 
			
		|||
	SearchOrderBySizeReverse                         = "size DESC"
 | 
			
		||||
	SearchOrderByID                                  = "id ASC"
 | 
			
		||||
	SearchOrderByIDReverse                           = "id DESC"
 | 
			
		||||
	SearchOrderByStars                               = "num_stars ASC"
 | 
			
		||||
	SearchOrderByStarsReverse                        = "num_stars DESC"
 | 
			
		||||
	SearchOrderByForks                               = "num_forks ASC"
 | 
			
		||||
	SearchOrderByForksReverse                        = "num_forks DESC"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// SearchRepositoryByName takes keyword and part of repository name to search,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1272,7 +1272,7 @@ func GetUser(user *User) (bool, error) {
 | 
			
		|||
type SearchUserOptions struct {
 | 
			
		||||
	Keyword       string
 | 
			
		||||
	Type          UserType
 | 
			
		||||
	OrderBy       string
 | 
			
		||||
	OrderBy       SearchOrderBy
 | 
			
		||||
	Page          int
 | 
			
		||||
	PageSize      int // Can be smaller than or equal to setting.UI.ExplorePagingNum
 | 
			
		||||
	IsActive      util.OptionalBool
 | 
			
		||||
| 
						 | 
				
			
			@ -1322,7 +1322,7 @@ func SearchUsers(opts *SearchUserOptions) (users []*User, _ int64, _ error) {
 | 
			
		|||
	users = make([]*User, 0, opts.PageSize)
 | 
			
		||||
	return users, count, x.Where(cond).
 | 
			
		||||
		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
 | 
			
		||||
		OrderBy(opts.OrderBy).
 | 
			
		||||
		OrderBy(opts.OrderBy.String()).
 | 
			
		||||
		Find(&users)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -693,6 +693,10 @@ issues.filter_sort.recentupdate = Recently updated
 | 
			
		|||
issues.filter_sort.leastupdate = Least recently updated
 | 
			
		||||
issues.filter_sort.mostcomment = Most commented
 | 
			
		||||
issues.filter_sort.leastcomment = Least commented
 | 
			
		||||
issues.filter_sort.moststars = Most stars
 | 
			
		||||
issues.filter_sort.feweststars = Fewest stars
 | 
			
		||||
issues.filter_sort.mostforks = Most forks
 | 
			
		||||
issues.filter_sort.fewestforks = Fewest forks
 | 
			
		||||
issues.action_open = Open
 | 
			
		||||
issues.action_close = Close
 | 
			
		||||
issues.action_label = Label
 | 
			
		||||
| 
						 | 
				
			
			@ -1359,6 +1363,7 @@ repos.name = Name
 | 
			
		|||
repos.private = Private
 | 
			
		||||
repos.watches = Watches
 | 
			
		||||
repos.stars = Stars
 | 
			
		||||
repos.forks = Forks
 | 
			
		||||
repos.issues = Issues
 | 
			
		||||
repos.size = Size
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,6 +104,14 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 | 
			
		|||
		orderBy = models.SearchOrderBySizeReverse
 | 
			
		||||
	case "size":
 | 
			
		||||
		orderBy = models.SearchOrderBySize
 | 
			
		||||
	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
 | 
			
		||||
| 
						 | 
				
			
			@ -164,26 +172,26 @@ func RenderUserSearch(ctx *context.Context, opts *models.SearchUserOptions, tplN
 | 
			
		|||
		users   []*models.User
 | 
			
		||||
		count   int64
 | 
			
		||||
		err     error
 | 
			
		||||
		orderBy string
 | 
			
		||||
		orderBy models.SearchOrderBy
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	ctx.Data["SortType"] = ctx.Query("sort")
 | 
			
		||||
	switch ctx.Query("sort") {
 | 
			
		||||
	case "newest":
 | 
			
		||||
		orderBy = "id DESC"
 | 
			
		||||
		orderBy = models.SearchOrderByIDReverse
 | 
			
		||||
	case "oldest":
 | 
			
		||||
		orderBy = "id ASC"
 | 
			
		||||
		orderBy = models.SearchOrderByID
 | 
			
		||||
	case "recentupdate":
 | 
			
		||||
		orderBy = "updated_unix DESC"
 | 
			
		||||
		orderBy = models.SearchOrderByRecentUpdated
 | 
			
		||||
	case "leastupdate":
 | 
			
		||||
		orderBy = "updated_unix ASC"
 | 
			
		||||
		orderBy = models.SearchOrderByLeastUpdated
 | 
			
		||||
	case "reversealphabetically":
 | 
			
		||||
		orderBy = "name DESC"
 | 
			
		||||
		orderBy = models.SearchOrderByAlphabeticallyReverse
 | 
			
		||||
	case "alphabetically":
 | 
			
		||||
		orderBy = "name ASC"
 | 
			
		||||
		orderBy = models.SearchOrderByAlphabetically
 | 
			
		||||
	default:
 | 
			
		||||
		ctx.Data["SortType"] = "alphabetically"
 | 
			
		||||
		orderBy = "name ASC"
 | 
			
		||||
		orderBy = models.SearchOrderByAlphabetically
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	opts.Keyword = strings.Trim(ctx.Query("q"), " ")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,6 +125,14 @@ func Profile(ctx *context.Context) {
 | 
			
		|||
		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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,8 +12,6 @@
 | 
			
		|||
			<a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "size"}}active{{end}} item" href="{{$.Link}}?sort=size&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.by_size"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "reversesize"}}active{{end}} item" href="{{$.Link}}?sort=reversesize&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_by_size"}}</a>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
			{{.i18n.Tr "admin.repos.repo_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
 | 
			
		||||
		</h4>
 | 
			
		||||
		<div class="ui attached segment">
 | 
			
		||||
			{{template "admin/base/search" .}}
 | 
			
		||||
			{{template "admin/repo/search" .}}
 | 
			
		||||
		</div>
 | 
			
		||||
		<div class="ui attached table segment">
 | 
			
		||||
			<table class="ui very basic striped table">
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@
 | 
			
		|||
						<th>{{.i18n.Tr "admin.repos.private"}}</th>
 | 
			
		||||
						<th>{{.i18n.Tr "admin.repos.watches"}}</th>
 | 
			
		||||
						<th>{{.i18n.Tr "admin.repos.stars"}}</th>
 | 
			
		||||
						<th>{{.i18n.Tr "admin.repos.forks"}}</th>
 | 
			
		||||
						<th>{{.i18n.Tr "admin.repos.issues"}}</th>
 | 
			
		||||
						<th>{{.i18n.Tr "admin.repos.size"}}</th>
 | 
			
		||||
						<th>{{.i18n.Tr "admin.users.created"}}</th>
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +35,7 @@
 | 
			
		|||
							<td><i class="fa fa{{if .IsPrivate}}-check{{end}}-square-o"></i></td>
 | 
			
		||||
							<td>{{.NumWatches}}</td>
 | 
			
		||||
							<td>{{.NumStars}}</td>
 | 
			
		||||
							<td>{{.NumForks}}</td>
 | 
			
		||||
							<td>{{.NumIssues}}</td>
 | 
			
		||||
							<td>{{SizeFmt .Size}}</td>
 | 
			
		||||
							<td><span title="{{.CreatedUnix.FormatLong}}">{{.CreatedUnix.FormatShort}}</span></td>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										29
									
								
								templates/admin/repo/search.tmpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								templates/admin/repo/search.tmpl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
<div class="ui right floated secondary filter menu">
 | 
			
		||||
	<!-- Sort -->
 | 
			
		||||
	<div class="ui dropdown type jump item">
 | 
			
		||||
		<span class="text">
 | 
			
		||||
			{{.i18n.Tr "repo.issues.filter_sort"}}
 | 
			
		||||
				<i class="dropdown icon"></i>
 | 
			
		||||
		</span>
 | 
			
		||||
		<div class="menu">
 | 
			
		||||
			<a class="{{if or (eq .SortType "oldest") (not .SortType)}}active{{end}} item" href="{{$.Link}}?sort=oldest&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "newest"}}active{{end}} item" href="{{$.Link}}?sort=newest&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "alphabetically"}}active{{end}} item" href="{{$.Link}}?sort=alphabetically&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.alphabetically"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "moststars"}}active{{end}} item" href="{{$.Link}}?sort=moststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.moststars"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "feweststars"}}active{{end}} item" href="{{$.Link}}?sort=feweststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.feweststars"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "mostforks"}}active{{end}} item" href="{{$.Link}}?sort=mostforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.mostforks"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "fewestforks"}}active{{end}} item" href="{{$.Link}}?sort=fewestforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.fewestforks"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "size"}}active{{end}} item" href="{{$.Link}}?sort=size&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.by_size"}}</a>
 | 
			
		||||
			<a class="{{if eq .SortType "reversesize"}}active{{end}} item" href="{{$.Link}}?sort=reversesize&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_by_size"}}</a>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
<form class="ui form ignore-dirty"  style="max-width: 90%">
 | 
			
		||||
	<div class="ui fluid action input">
 | 
			
		||||
		<input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus>
 | 
			
		||||
		<button class="ui blue button">{{.i18n.Tr "explore.search"}}</button>
 | 
			
		||||
	</div>
 | 
			
		||||
</form>
 | 
			
		||||
							
								
								
									
										29
									
								
								templates/explore/repo_search.tmpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								templates/explore/repo_search.tmpl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
<div class="ui right floated secondary filter menu">
 | 
			
		||||
    <!-- Sort -->
 | 
			
		||||
    <div class="ui right dropdown type jump item">
 | 
			
		||||
		<span class="text">
 | 
			
		||||
			{{.i18n.Tr "repo.issues.filter_sort"}}
 | 
			
		||||
                <i class="dropdown icon"></i>
 | 
			
		||||
		</span>
 | 
			
		||||
        <div class="menu">
 | 
			
		||||
            <a class="{{if eq .SortType "newest"}}active{{end}} item" href="{{$.Link}}?sort=newest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "oldest"}}active{{end}} item" href="{{$.Link}}?sort=oldest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "alphabetically"}}active{{end}} item" href="{{$.Link}}?sort=alphabetically&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.label.filter_sort.alphabetically"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "moststars"}}active{{end}} item" href="{{$.Link}}?sort=moststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.moststars"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "feweststars"}}active{{end}} item" href="{{$.Link}}?sort=feweststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.feweststars"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "mostforks"}}active{{end}} item" href="{{$.Link}}?sort=mostforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.mostforks"}}</a>
 | 
			
		||||
            <a class="{{if eq .SortType "fewestforks"}}active{{end}} item" href="{{$.Link}}?sort=fewestforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.fewestforks"}}</a>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
<form class="ui form ignore-dirty" style="max-width: 90%">
 | 
			
		||||
    <div class="ui fluid action input">
 | 
			
		||||
        <input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus>
 | 
			
		||||
        <input type="hidden" name="tab" value="{{$.TabName}}">
 | 
			
		||||
        <button class="ui blue button">{{.i18n.Tr "explore.search"}}</button>
 | 
			
		||||
    </div>
 | 
			
		||||
</form>
 | 
			
		||||
<div class="ui divider"></div>
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
<div class="explore repositories">
 | 
			
		||||
	{{template "explore/navbar" .}}
 | 
			
		||||
	<div class="ui container">
 | 
			
		||||
		{{template "explore/search" .}}
 | 
			
		||||
		{{template "explore/repo_search" .}}
 | 
			
		||||
		{{template "explore/repo_list" .}}
 | 
			
		||||
		{{template "base/paginate" .}}
 | 
			
		||||
	</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,12 +100,12 @@
 | 
			
		|||
					</div>
 | 
			
		||||
				{{else if eq .TabName "stars"}}
 | 
			
		||||
					<div class="stars">
 | 
			
		||||
						{{template "explore/search" .}}
 | 
			
		||||
						{{template "explore/repo_search" .}}
 | 
			
		||||
						{{template "explore/repo_list" .}}
 | 
			
		||||
						{{template "base/paginate" .}}
 | 
			
		||||
					</div>
 | 
			
		||||
				{{else}}
 | 
			
		||||
					{{template "explore/search" .}}
 | 
			
		||||
					{{template "explore/repo_search" .}}
 | 
			
		||||
					{{template "explore/repo_list" .}}
 | 
			
		||||
					{{template "base/paginate" .}}
 | 
			
		||||
				{{end}}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue