@@ -61,10 +61,11 @@ func Projects(ctx *context.Context) {
6161 isShowClosed := strings .ToLower (ctx .FormTrim ("state" )) == "closed"
6262 keyword := ctx .FormTrim ("q" )
6363 repo := ctx .Repo .Repository
64- page := max (ctx .FormInt ("page" ), 1 )
65-
66- ctx .Data ["OpenCount" ] = repo .NumOpenProjects
67- ctx .Data ["ClosedCount" ] = repo .NumClosedProjects
64+ page := ctx .FormInt ("page" )
65+ ownerID := repo .OwnerID
66+ if page <= 1 {
67+ page = 1
68+ }
6869
6970 var total int
7071 if ! isShowClosed {
@@ -73,7 +74,9 @@ func Projects(ctx *context.Context) {
7374 total = repo .NumClosedProjects
7475 }
7576
76- projects , count , err := db .FindAndCount [project_model.Project ](ctx , project_model.SearchOptions {
77+ projects := make ([]* project_model.Project , 0 , total )
78+
79+ repoProjects , count , err := db .FindAndCount [project_model.Project ](ctx , project_model.SearchOptions {
7780 ListOptions : db.ListOptions {
7881 PageSize : setting .UI .IssuePagingNum ,
7982 Page : page ,
@@ -85,10 +88,59 @@ func Projects(ctx *context.Context) {
8588 Title : keyword ,
8689 })
8790 if err != nil {
88- ctx .ServerError ("GetProjects" , err )
91+ ctx .ServerError ("GetRepoProjects" , err )
92+ return
93+ }
94+
95+ projects = append (projects , repoProjects ... )
96+
97+ openOrgProjects , openCountForOrgProjects , err := db .FindAndCount [project_model.Project ](ctx , project_model.SearchOptions {
98+ ListOptions : db.ListOptions {
99+ PageSize : setting .UI .IssuePagingNum ,
100+ Page : page ,
101+ },
102+ OwnerID : ownerID ,
103+ IsClosed : optional .Some (false ),
104+ OrderBy : project_model .GetSearchOrderByBySortType (sortType ),
105+ Type : project_model .TypeOrganization ,
106+ Title : keyword ,
107+ })
108+ if err != nil {
109+ ctx .ServerError ("GetOrgProjects" , err )
89110 return
90111 }
91112
113+ closeOrgProjects , closeCountForOrgProjects , err := db .FindAndCount [project_model.Project ](ctx , project_model.SearchOptions {
114+ ListOptions : db.ListOptions {
115+ PageSize : setting .UI .IssuePagingNum ,
116+ Page : page ,
117+ },
118+ OwnerID : ownerID ,
119+ IsClosed : optional .Some (true ),
120+ OrderBy : project_model .GetSearchOrderByBySortType (sortType ),
121+ Type : project_model .TypeOrganization ,
122+ Title : keyword ,
123+ })
124+ if err != nil {
125+ ctx .ServerError ("GetOrgProjects" , err )
126+ return
127+ }
128+
129+ if isShowClosed {
130+ count += closeCountForOrgProjects
131+ total += int (closeCountForOrgProjects )
132+ projects = append (projects , closeOrgProjects ... )
133+ } else {
134+ count += openCountForOrgProjects
135+ total += int (openCountForOrgProjects )
136+ projects = append (projects , openOrgProjects ... )
137+ }
138+
139+ totalOpenCount := repo .NumOpenProjects + int (openCountForOrgProjects )
140+ totalCloseCount := repo .NumClosedProjects + int (closeCountForOrgProjects )
141+ ctx .Data ["OpenCount" ] = totalOpenCount
142+ ctx .Data ["ClosedCount" ] = totalCloseCount
143+
92144 if err := project_service .LoadIssueNumbersForProjects (ctx , projects , ctx .Doer ); err != nil {
93145 ctx .ServerError ("LoadIssueNumbersForProjects" , err )
94146 return
0 commit comments