1
0
Fork 0
forked from forgejo/forgejo

Fix counts on issues dashboard (#2215)

* Fix counts on issues dashboard

* setupSess -> setupSession

* Unit test

* Load repo owners for issues
This commit is contained in:
Ethan Koenig 2017-08-02 22:09:16 -07:00 committed by Lunny Xiao
parent f29458bd3a
commit 7e0654bd9e
12 changed files with 336 additions and 97 deletions

View file

@ -270,94 +270,77 @@ func Issues(ctx *context.Context) {
userRepoIDs = []int64{-1}
}
var issues []*models.Issue
switch filterMode {
case models.FilterModeAll:
// Get all issues from repositories from this user.
issues, err = models.Issues(&models.IssuesOptions{
RepoIDs: userRepoIDs,
RepoID: repoID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
IsPull: util.OptionalBoolOf(isPullList),
SortType: sortType,
})
case models.FilterModeAssign:
// Get all issues assigned to this user.
issues, err = models.Issues(&models.IssuesOptions{
RepoID: repoID,
AssigneeID: ctxUser.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
IsPull: util.OptionalBoolOf(isPullList),
SortType: sortType,
})
case models.FilterModeCreate:
// Get all issues created by this user.
issues, err = models.Issues(&models.IssuesOptions{
RepoID: repoID,
PosterID: ctxUser.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
IsPull: util.OptionalBoolOf(isPullList),
SortType: sortType,
})
case models.FilterModeMention:
// Get all issues created by this user.
issues, err = models.Issues(&models.IssuesOptions{
RepoID: repoID,
MentionedID: ctxUser.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
IsPull: util.OptionalBoolOf(isPullList),
SortType: sortType,
})
opts := &models.IssuesOptions{
RepoID: repoID,
IsClosed: util.OptionalBoolOf(isShowClosed),
IsPull: util.OptionalBoolOf(isPullList),
SortType: sortType,
}
switch filterMode {
case models.FilterModeAll:
opts.RepoIDs = userRepoIDs
case models.FilterModeAssign:
opts.AssigneeID = ctxUser.ID
case models.FilterModeCreate:
opts.PosterID = ctxUser.ID
case models.FilterModeMention:
opts.MentionedID = ctxUser.ID
}
counts, err := models.CountIssuesByRepo(opts)
if err != nil {
ctx.Handle(500, "CountIssuesByRepo", err)
return
}
opts.Page = page
opts.PageSize = setting.UI.IssuePagingNum
issues, err := models.Issues(opts)
if err != nil {
ctx.Handle(500, "Issues", err)
return
}
showRepos, err := models.IssueList(issues).LoadRepositories()
if err != nil {
ctx.Handle(500, "LoadRepositories", fmt.Errorf("%v", err))
return
showReposMap := make(map[int64]*models.Repository, len(counts))
for repoID := range counts {
repo, err := models.GetRepositoryByID(repoID)
if err != nil {
ctx.Handle(500, "GetRepositoryByID", err)
return
}
showReposMap[repoID] = repo
}
if repoID > 0 {
var theRepo *models.Repository
for _, repo := range showRepos {
if repo.ID == repoID {
theRepo = repo
break
}
}
if theRepo == nil {
theRepo, err = models.GetRepositoryByID(repoID)
if _, ok := showReposMap[repoID]; !ok {
repo, err := models.GetRepositoryByID(repoID)
if err != nil {
ctx.Handle(500, "GetRepositoryByID", fmt.Errorf("[#%d]%v", repoID, err))
ctx.Handle(500, "GetRepositoryByID", fmt.Errorf("[%d]%v", repoID, err))
return
}
showRepos = append(showRepos, theRepo)
showReposMap[repoID] = repo
}
repo := showReposMap[repoID]
// Check if user has access to given repository.
if !theRepo.IsOwnedBy(ctxUser.ID) && !theRepo.HasAccess(ctxUser) {
ctx.Handle(404, "Issues", fmt.Errorf("#%d", repoID))
if !repo.IsOwnedBy(ctxUser.ID) && !repo.HasAccess(ctxUser) {
ctx.Status(404)
return
}
}
err = models.RepositoryList(showRepos).LoadAttributes()
if err != nil {
showRepos := models.RepositoryListOfMap(showReposMap)
if err = showRepos.LoadAttributes(); err != nil {
ctx.Handle(500, "LoadAttributes", fmt.Errorf("%v", err))
return
}
for _, issue := range issues {
issue.Repo = showReposMap[issue.RepoID]
}
issueStats := models.GetUserIssueStats(repoID, ctxUser.ID, userRepoIDs, filterMode, isPullList)
var total int
@ -369,6 +352,7 @@ func Issues(ctx *context.Context) {
ctx.Data["Issues"] = issues
ctx.Data["Repos"] = showRepos
ctx.Data["Counts"] = counts
ctx.Data["Page"] = paginater.New(total, setting.UI.IssuePagingNum, page, 5)
ctx.Data["IssueStats"] = issueStats
ctx.Data["ViewType"] = viewType