@@ -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