@@ -1500,6 +1500,7 @@ type UserIssueStatsOptions struct {
15001500 IsPull bool
15011501 IsClosed bool
15021502 IssueIDs []int64
1503+ LabelIDs []int64
15031504}
15041505
15051506// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
@@ -1516,57 +1517,66 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
15161517 cond = cond .And (builder .In ("issue.id" , opts .IssueIDs ))
15171518 }
15181519
1520+ sess := func (cond builder.Cond ) * xorm.Session {
1521+ s := x .Where (cond )
1522+ if len (opts .LabelIDs ) > 0 {
1523+ s .Join ("INNER" , "issue_label" , "issue_label.issue_id = issue.id" ).
1524+ In ("issue_label.label_id" , opts .LabelIDs )
1525+ }
1526+ return s
1527+ }
1528+
15191529 switch opts .FilterMode {
15201530 case FilterModeAll :
1521- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1531+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
15221532 And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
15231533 Count (new (Issue ))
15241534 if err != nil {
15251535 return nil , err
15261536 }
1527- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1537+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
15281538 And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
15291539 Count (new (Issue ))
15301540 if err != nil {
15311541 return nil , err
15321542 }
15331543 case FilterModeAssign :
1534- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1544+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
15351545 Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
15361546 And ("issue_assignees.assignee_id = ?" , opts .UserID ).
15371547 Count (new (Issue ))
15381548 if err != nil {
15391549 return nil , err
15401550 }
1541- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1551+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
15421552 Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
15431553 And ("issue_assignees.assignee_id = ?" , opts .UserID ).
15441554 Count (new (Issue ))
15451555 if err != nil {
15461556 return nil , err
15471557 }
15481558 case FilterModeCreate :
1549- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1559+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
15501560 And ("issue.poster_id = ?" , opts .UserID ).
15511561 Count (new (Issue ))
15521562 if err != nil {
15531563 return nil , err
15541564 }
1555- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1565+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
15561566 And ("issue.poster_id = ?" , opts .UserID ).
15571567 Count (new (Issue ))
15581568 if err != nil {
15591569 return nil , err
15601570 }
15611571 case FilterModeMention :
1562- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1572+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
15631573 Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
15641574 And ("issue_user.uid = ?" , opts .UserID ).
15651575 Count (new (Issue ))
15661576 if err != nil {
15671577 return nil , err
15681578 }
1569- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1579+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
15701580 Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
15711581 And ("issue_user.uid = ?" , opts .UserID ).
15721582 Count (new (Issue ))
@@ -1576,30 +1586,30 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
15761586 }
15771587
15781588 cond = cond .And (builder.Eq {"issue.is_closed" : opts .IsClosed })
1579- stats .AssignCount , err = x . Where (cond ).
1589+ stats .AssignCount , err = sess (cond ).
15801590 Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
15811591 And ("issue_assignees.assignee_id = ?" , opts .UserID ).
15821592 Count (new (Issue ))
15831593 if err != nil {
15841594 return nil , err
15851595 }
15861596
1587- stats .CreateCount , err = x . Where (cond ).
1597+ stats .CreateCount , err = sess (cond ).
15881598 And ("poster_id = ?" , opts .UserID ).
15891599 Count (new (Issue ))
15901600 if err != nil {
15911601 return nil , err
15921602 }
15931603
1594- stats .MentionCount , err = x . Where (cond ).
1604+ stats .MentionCount , err = sess (cond ).
15951605 Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
15961606 And ("issue_user.uid = ?" , opts .UserID ).
15971607 Count (new (Issue ))
15981608 if err != nil {
15991609 return nil , err
16001610 }
16011611
1602- stats .YourRepositoriesCount , err = x . Where (cond ).
1612+ stats .YourRepositoriesCount , err = sess (cond ).
16031613 And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
16041614 Count (new (Issue ))
16051615 if err != nil {
0 commit comments