@@ -1500,6 +1500,7 @@ type UserIssueStatsOptions struct {
1500
1500
IsPull bool
1501
1501
IsClosed bool
1502
1502
IssueIDs []int64
1503
+ LabelIDs []int64
1503
1504
}
1504
1505
1505
1506
// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
@@ -1516,57 +1517,66 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
1516
1517
cond = cond .And (builder .In ("issue.id" , opts .IssueIDs ))
1517
1518
}
1518
1519
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
+
1519
1529
switch opts .FilterMode {
1520
1530
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 ).
1522
1532
And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
1523
1533
Count (new (Issue ))
1524
1534
if err != nil {
1525
1535
return nil , err
1526
1536
}
1527
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1537
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1528
1538
And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
1529
1539
Count (new (Issue ))
1530
1540
if err != nil {
1531
1541
return nil , err
1532
1542
}
1533
1543
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 ).
1535
1545
Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
1536
1546
And ("issue_assignees.assignee_id = ?" , opts .UserID ).
1537
1547
Count (new (Issue ))
1538
1548
if err != nil {
1539
1549
return nil , err
1540
1550
}
1541
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1551
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1542
1552
Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
1543
1553
And ("issue_assignees.assignee_id = ?" , opts .UserID ).
1544
1554
Count (new (Issue ))
1545
1555
if err != nil {
1546
1556
return nil , err
1547
1557
}
1548
1558
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 ).
1550
1560
And ("issue.poster_id = ?" , opts .UserID ).
1551
1561
Count (new (Issue ))
1552
1562
if err != nil {
1553
1563
return nil , err
1554
1564
}
1555
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1565
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1556
1566
And ("issue.poster_id = ?" , opts .UserID ).
1557
1567
Count (new (Issue ))
1558
1568
if err != nil {
1559
1569
return nil , err
1560
1570
}
1561
1571
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 ).
1563
1573
Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
1564
1574
And ("issue_user.uid = ?" , opts .UserID ).
1565
1575
Count (new (Issue ))
1566
1576
if err != nil {
1567
1577
return nil , err
1568
1578
}
1569
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1579
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1570
1580
Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
1571
1581
And ("issue_user.uid = ?" , opts .UserID ).
1572
1582
Count (new (Issue ))
@@ -1576,30 +1586,30 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
1576
1586
}
1577
1587
1578
1588
cond = cond .And (builder.Eq {"issue.is_closed" : opts .IsClosed })
1579
- stats .AssignCount , err = x . Where (cond ).
1589
+ stats .AssignCount , err = sess (cond ).
1580
1590
Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
1581
1591
And ("issue_assignees.assignee_id = ?" , opts .UserID ).
1582
1592
Count (new (Issue ))
1583
1593
if err != nil {
1584
1594
return nil , err
1585
1595
}
1586
1596
1587
- stats .CreateCount , err = x . Where (cond ).
1597
+ stats .CreateCount , err = sess (cond ).
1588
1598
And ("poster_id = ?" , opts .UserID ).
1589
1599
Count (new (Issue ))
1590
1600
if err != nil {
1591
1601
return nil , err
1592
1602
}
1593
1603
1594
- stats .MentionCount , err = x . Where (cond ).
1604
+ stats .MentionCount , err = sess (cond ).
1595
1605
Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
1596
1606
And ("issue_user.uid = ?" , opts .UserID ).
1597
1607
Count (new (Issue ))
1598
1608
if err != nil {
1599
1609
return nil , err
1600
1610
}
1601
1611
1602
- stats .YourRepositoriesCount , err = x . Where (cond ).
1612
+ stats .YourRepositoriesCount , err = sess (cond ).
1603
1613
And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
1604
1614
Count (new (Issue ))
1605
1615
if err != nil {
0 commit comments