@@ -7,8 +7,10 @@ import (
77	"context" 
88
99	"code.gitea.io/gitea/models/db" 
10+ 	org_model "code.gitea.io/gitea/models/organization" 
1011	project_model "code.gitea.io/gitea/models/project" 
1112	user_model "code.gitea.io/gitea/models/user" 
13+ 	"code.gitea.io/gitea/modules/optional" 
1214	"code.gitea.io/gitea/modules/util" 
1315)
1416
@@ -48,22 +50,29 @@ func (issue *Issue) ProjectColumnID(ctx context.Context) int64 {
4850}
4951
5052// LoadIssuesFromColumn load issues assigned to this column 
51- func  LoadIssuesFromColumn (ctx  context.Context , b  * project_model.Column ) (IssueList , error ) {
52- 	issueList ,  err   :=   Issues ( ctx ,  & IssuesOptions {
53+ func  LoadIssuesFromColumn (ctx  context.Context , b  * project_model.Column ,  doer   * user_model. User ,  org   * org_model. Organization ,  isClosed  optional. Option [ bool ] ) (IssueList , error ) {
54+ 	issueOpts   :=  & IssuesOptions {
5355		ProjectColumnID : b .ID ,
5456		ProjectID :       b .ProjectID ,
5557		SortType :        "project-column-sorting" ,
56- 	})
58+ 		IsClosed :        isClosed ,
59+ 	}
60+ 	if  doer  !=  nil  {
61+ 		issueOpts .User  =  doer 
62+ 		issueOpts .Org  =  org 
63+ 	} else  {
64+ 		issueOpts .AllPublic  =  true 
65+ 	}
66+ 
67+ 	issueList , err  :=  Issues (ctx , issueOpts )
5768	if  err  !=  nil  {
5869		return  nil , err 
5970	}
6071
6172	if  b .Default  {
62- 		issues , err  :=  Issues (ctx , & IssuesOptions {
63- 			ProjectColumnID : db .NoConditionID ,
64- 			ProjectID :       b .ProjectID ,
65- 			SortType :        "project-column-sorting" ,
66- 		})
73+ 		issueOpts .ProjectColumnID  =  db .NoConditionID 
74+ 
75+ 		issues , err  :=  Issues (ctx , issueOpts )
6776		if  err  !=  nil  {
6877			return  nil , err 
6978		}
@@ -78,10 +87,10 @@ func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column) (IssueLi
7887}
7988
8089// LoadIssuesFromColumnList load issues assigned to the columns 
81- func  LoadIssuesFromColumnList (ctx  context.Context , bs  project_model.ColumnList ) (map [int64 ]IssueList , error ) {
90+ func  LoadIssuesFromColumnList (ctx  context.Context , bs  project_model.ColumnList ,  doer   * user_model. User ,  org   * org_model. Organization ,  isClosed  optional. Option [ bool ] ) (map [int64 ]IssueList , error ) {
8291	issuesMap  :=  make (map [int64 ]IssueList , len (bs ))
8392	for  i  :=  range  bs  {
84- 		il , err  :=  LoadIssuesFromColumn (ctx , bs [i ])
93+ 		il , err  :=  LoadIssuesFromColumn (ctx , bs [i ],  doer ,  org ,  isClosed )
8594		if  err  !=  nil  {
8695			return  nil , err 
8796		}
@@ -160,3 +169,36 @@ func IssueAssignOrRemoveProject(ctx context.Context, issue *Issue, doer *user_mo
160169		})
161170	})
162171}
172+ 
173+ // NumIssuesInProjects returns the amount of issues assigned to one of the project 
174+ // in the list which the doer can access. 
175+ func  NumIssuesInProjects (ctx  context.Context , pl  []* project_model.Project , doer  * user_model.User , org  * org_model.Organization , isClosed  optional.Option [bool ]) (map [int64 ]int , error ) {
176+ 	numMap  :=  make (map [int64 ]int , len (pl ))
177+ 	for  _ , p  :=  range  pl  {
178+ 		num , err  :=  NumIssuesInProject (ctx , p , doer , org , isClosed )
179+ 		if  err  !=  nil  {
180+ 			return  nil , err 
181+ 		}
182+ 		numMap [p .ID ] =  num 
183+ 	}
184+ 
185+ 	return  numMap , nil 
186+ }
187+ 
188+ // NumIssuesInProject returns the amount of issues assigned to the project which 
189+ // the doer can access. 
190+ func  NumIssuesInProject (ctx  context.Context , p  * project_model.Project , doer  * user_model.User , org  * org_model.Organization , isClosed  optional.Option [bool ]) (int , error ) {
191+ 	numIssuesInProject  :=  int (0 )
192+ 	bs , err  :=  p .GetColumns (ctx )
193+ 	if  err  !=  nil  {
194+ 		return  0 , err 
195+ 	}
196+ 	im , err  :=  LoadIssuesFromColumnList (ctx , bs , doer , org , isClosed )
197+ 	if  err  !=  nil  {
198+ 		return  0 , err 
199+ 	}
200+ 	for  _ , il  :=  range  im  {
201+ 		numIssuesInProject  +=  len (il )
202+ 	}
203+ 	return  numIssuesInProject , nil 
204+ }
0 commit comments