Compare commits

...

3 Commits

View File

@ -62,6 +62,7 @@ func Projects(ctx *context.Context) {
keyword := ctx.FormTrim("q") keyword := ctx.FormTrim("q")
repo := ctx.Repo.Repository repo := ctx.Repo.Repository
page := max(ctx.FormInt("page"), 1) page := max(ctx.FormInt("page"), 1)
ownerID := repo.OwnerID
ctx.Data["OpenCount"] = repo.NumOpenProjects ctx.Data["OpenCount"] = repo.NumOpenProjects
ctx.Data["ClosedCount"] = repo.NumClosedProjects ctx.Data["ClosedCount"] = repo.NumClosedProjects
@ -73,21 +74,70 @@ func Projects(ctx *context.Context) {
total = repo.NumClosedProjects total = repo.NumClosedProjects
} }
projects, count, err := db.FindAndCount[project_model.Project](ctx, project_model.SearchOptions{ projects := make([]*project_model.Project, 0, total)
repoProjects, count, err := db.FindAndCount[project_model.Project](ctx, project_model.SearchOptions{
ListOptions: db.ListOptions{ ListOptions: db.ListOptions{
PageSize: setting.UI.IssuePagingNum, PageSize: setting.UI.IssuePagingNum,
Page: page, Page: page,
}, },
RepoID: repo.ID,
IsClosed: optional.Some(isShowClosed), IsClosed: optional.Some(isShowClosed),
OrderBy: project_model.GetSearchOrderByBySortType(sortType), OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: project_model.TypeRepository, Type: project_model.TypeRepository,
Title: keyword, Title: keyword,
}) })
if err != nil { if err != nil {
ctx.ServerError("GetProjects", err) ctx.ServerError("GetRepoProjects", err)
return return
} }
projects = append(projects, repoProjects...)
openOrgProjects, openCountForOrgProjects, err := db.FindAndCount[project_model.Project](ctx, project_model.SearchOptions{
ListOptions: db.ListOptions{
PageSize: setting.UI.IssuePagingNum,
Page: page,
},
OwnerID: ownerID,
IsClosed: optional.Some(false),
OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: project_model.TypeOrganization,
Title: keyword,
})
if err != nil {
ctx.ServerError("GetOrgProjects", err)
return
}
closeOrgProjects, closeCountForOrgProjects, err := db.FindAndCount[project_model.Project](ctx, project_model.SearchOptions{
ListOptions: db.ListOptions{
PageSize: setting.UI.IssuePagingNum,
Page: page,
},
OwnerID: ownerID,
IsClosed: optional.Some(true),
OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: project_model.TypeOrganization,
Title: keyword,
})
if err != nil {
ctx.ServerError("GetOrgProjects", err)
return
}
if isShowClosed {
count += closeCountForOrgProjects
total += int(closeCountForOrgProjects)
projects = append(projects, closeOrgProjects...)
} else {
count += openCountForOrgProjects
total += int(openCountForOrgProjects)
projects = append(projects, openOrgProjects...)
}
totalOpenCount := repo.NumOpenProjects + int(openCountForOrgProjects)
totalCloseCount := repo.NumClosedProjects + int(closeCountForOrgProjects)
ctx.Data["OpenCount"] = totalOpenCount
ctx.Data["ClosedCount"] = totalCloseCount
if err := project_service.LoadIssueNumbersForProjects(ctx, projects, ctx.Doer); err != nil { if err := project_service.LoadIssueNumbersForProjects(ctx, projects, ctx.Doer); err != nil {
ctx.ServerError("LoadIssueNumbersForProjects", err) ctx.ServerError("LoadIssueNumbersForProjects", err)