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:
parent
f29458bd3a
commit
7e0654bd9e
12 changed files with 336 additions and 97 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue