Paging function for users and repositories
This commit is contained in:
		
							parent
							
								
									7ffdabb28f
								
							
						
					
					
						commit
						63cc14062a
					
				
					 9 changed files with 71 additions and 7 deletions
				
			
		
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							|  | @ -17,7 +17,7 @@ import ( | |||
| 	"github.com/gogits/gogs/modules/setting" | ||||
| ) | ||||
| 
 | ||||
| const APP_VER = "0.4.5.0706 Alpha" | ||||
| const APP_VER = "0.4.5.0707 Alpha" | ||||
| 
 | ||||
| func init() { | ||||
| 	runtime.GOMAXPROCS(runtime.NumCPU()) | ||||
|  |  | |||
|  | @ -148,9 +148,9 @@ type Statistic struct { | |||
| } | ||||
| 
 | ||||
| func GetStatistic() (stats Statistic) { | ||||
| 	stats.Counter.User, _ = x.Count(new(User)) | ||||
| 	stats.Counter.User = CountUsers() | ||||
| 	stats.Counter.Repo = CountRepositories() | ||||
| 	stats.Counter.PublicKey, _ = x.Count(new(PublicKey)) | ||||
| 	stats.Counter.Repo, _ = x.Count(new(Repository)) | ||||
| 	stats.Counter.Watch, _ = x.Count(new(Watch)) | ||||
| 	stats.Counter.Action, _ = x.Count(new(Action)) | ||||
| 	stats.Counter.Access, _ = x.Count(new(Access)) | ||||
|  |  | |||
|  | @ -589,6 +589,12 @@ func CreateRepository(u *User, name, desc, lang, license string, private, mirror | |||
| 	return repo, nil | ||||
| } | ||||
| 
 | ||||
| // CountRepositories returns number of repositories.
 | ||||
| func CountRepositories() int64 { | ||||
| 	count, _ := x.Count(new(Repository)) | ||||
| 	return count | ||||
| } | ||||
| 
 | ||||
| // GetRepositoriesWithUsers returns given number of repository objects with offset.
 | ||||
| // It also auto-gets corresponding users.
 | ||||
| func GetRepositoriesWithUsers(num, offset int) ([]*Repository, error) { | ||||
|  |  | |||
|  | @ -212,6 +212,12 @@ func CreateUser(u *User) (*User, error) { | |||
| 	return u, err | ||||
| } | ||||
| 
 | ||||
| // CountUsers returns number of users.
 | ||||
| func CountUsers() int64 { | ||||
| 	count, _ := x.Where("type=0").Count(new(User)) | ||||
| 	return count | ||||
| } | ||||
| 
 | ||||
| // GetUsers returns given number of user objects with offset.
 | ||||
| func GetUsers(num, offset int) ([]User, error) { | ||||
| 	users := make([]User, 0, num) | ||||
|  |  | |||
|  | @ -458,6 +458,16 @@ func (f StrTo) Int64() (int64, error) { | |||
| 	return int64(v), err | ||||
| } | ||||
| 
 | ||||
| func (f StrTo) MustInt() int { | ||||
| 	v, _ := f.Int() | ||||
| 	return v | ||||
| } | ||||
| 
 | ||||
| func (f StrTo) MustInt64() int64 { | ||||
| 	v, _ := f.Int64() | ||||
| 	return v | ||||
| } | ||||
| 
 | ||||
| func (f StrTo) String() string { | ||||
| 	if f.Exist() { | ||||
| 		return string(f) | ||||
|  |  | |||
|  | @ -30,7 +30,9 @@ const ( | |||
| 	MONITOR_CRON    base.TplName = "admin/monitor/cron" | ||||
| ) | ||||
| 
 | ||||
| var startTime = time.Now() | ||||
| var ( | ||||
| 	startTime = time.Now() | ||||
| ) | ||||
| 
 | ||||
| var sysStatus struct { | ||||
| 	Uptime       string | ||||
|  | @ -157,8 +159,24 @@ func Users(ctx *middleware.Context) { | |||
| 	ctx.Data["Title"] = "User Management" | ||||
| 	ctx.Data["PageIsUsers"] = true | ||||
| 
 | ||||
| 	p := base.StrTo(ctx.Query("p")).MustInt() | ||||
| 	if p < 1 { | ||||
| 		p = 1 | ||||
| 	} | ||||
| 	pageNum := 100 | ||||
| 	count := models.CountUsers() | ||||
| 	curCount := int64((p-1)*pageNum + pageNum) | ||||
| 	if curCount > count { | ||||
| 		p = int(count) / pageNum | ||||
| 	} else if count > curCount { | ||||
| 		ctx.Data["NextPageNum"] = p + 1 | ||||
| 	} | ||||
| 	if p > 1 { | ||||
| 		ctx.Data["LastPageNum"] = p - 1 | ||||
| 	} | ||||
| 
 | ||||
| 	var err error | ||||
| 	ctx.Data["Users"], err = models.GetUsers(200, 0) | ||||
| 	ctx.Data["Users"], err = models.GetUsers(pageNum, (p-1)*pageNum) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "admin.Users(GetUsers)", err) | ||||
| 		return | ||||
|  | @ -170,8 +188,24 @@ func Repositories(ctx *middleware.Context) { | |||
| 	ctx.Data["Title"] = "Repository Management" | ||||
| 	ctx.Data["PageIsRepos"] = true | ||||
| 
 | ||||
| 	p := base.StrTo(ctx.Query("p")).MustInt() | ||||
| 	if p < 1 { | ||||
| 		p = 1 | ||||
| 	} | ||||
| 	pageNum := 2 | ||||
| 	count := models.CountRepositories() | ||||
| 	curCount := int64((p-1)*pageNum + pageNum) | ||||
| 	if curCount > count { | ||||
| 		p = int(count) / pageNum | ||||
| 	} else if count > curCount { | ||||
| 		ctx.Data["NextPageNum"] = p + 1 | ||||
| 	} | ||||
| 	if p > 1 { | ||||
| 		ctx.Data["LastPageNum"] = p - 1 | ||||
| 	} | ||||
| 
 | ||||
| 	var err error | ||||
| 	ctx.Data["Repos"], err = models.GetRepositoriesWithUsers(200, 0) | ||||
| 	ctx.Data["Repos"], err = models.GetRepositoriesWithUsers(pageNum, (p-1)*pageNum) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "admin.Repositories", err) | ||||
| 		return | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| 0.4.5.0706 Alpha | ||||
| 0.4.5.0707 Alpha | ||||
|  | @ -37,6 +37,10 @@ | |||
|                         {{end}} | ||||
|                     </tbody> | ||||
|                 </table> | ||||
|                 <ul class="pagination"> | ||||
|                     {{if .LastPageNum}}<li><a href="/admin/repos?p={{.LastPageNum}}">« Prev.</a></li>{{end}} | ||||
|                     {{if .NextPageNum}}<li><a href="/admin/repos?p={{.NextPageNum}}">» Next</a></li>{{end}} | ||||
|                 </ul> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  |  | |||
|  | @ -38,6 +38,10 @@ | |||
|                         {{end}} | ||||
|                     </tbody> | ||||
|                 </table> | ||||
|                 <ul class="pagination"> | ||||
|                     {{if .LastPageNum}}<li><a href="/admin/users?p={{.LastPageNum}}">« Prev.</a></li>{{end}} | ||||
|                     {{if .NextPageNum}}<li><a href="/admin/users?p={{.NextPageNum}}">» Next</a></li>{{end}} | ||||
|                 </ul> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue