@@ -1491,6 +1491,7 @@ type UserIssueStatsOptions struct {
1491
1491
IsPull bool
1492
1492
IsClosed bool
1493
1493
IssueIDs []int64
1494
+ LabelIDs []int64
1494
1495
}
1495
1496
1496
1497
// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
@@ -1507,57 +1508,66 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
1507
1508
cond = cond .And (builder .In ("issue.id" , opts .IssueIDs ))
1508
1509
}
1509
1510
1511
+ sess := func (cond builder.Cond ) * xorm.Session {
1512
+ s := x .Where (cond )
1513
+ if len (opts .LabelIDs ) > 0 {
1514
+ s .Join ("INNER" , "issue_label" , "issue_label.issue_id = issue.id" ).
1515
+ In ("issue_label.label_id" , opts .LabelIDs )
1516
+ }
1517
+ return s
1518
+ }
1519
+
1510
1520
switch opts .FilterMode {
1511
1521
case FilterModeAll :
1512
- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1522
+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
1513
1523
And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
1514
1524
Count (new (Issue ))
1515
1525
if err != nil {
1516
1526
return nil , err
1517
1527
}
1518
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1528
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1519
1529
And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
1520
1530
Count (new (Issue ))
1521
1531
if err != nil {
1522
1532
return nil , err
1523
1533
}
1524
1534
case FilterModeAssign :
1525
- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1535
+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
1526
1536
Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
1527
1537
And ("issue_assignees.assignee_id = ?" , opts .UserID ).
1528
1538
Count (new (Issue ))
1529
1539
if err != nil {
1530
1540
return nil , err
1531
1541
}
1532
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1542
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1533
1543
Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
1534
1544
And ("issue_assignees.assignee_id = ?" , opts .UserID ).
1535
1545
Count (new (Issue ))
1536
1546
if err != nil {
1537
1547
return nil , err
1538
1548
}
1539
1549
case FilterModeCreate :
1540
- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1550
+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
1541
1551
And ("issue.poster_id = ?" , opts .UserID ).
1542
1552
Count (new (Issue ))
1543
1553
if err != nil {
1544
1554
return nil , err
1545
1555
}
1546
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1556
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1547
1557
And ("issue.poster_id = ?" , opts .UserID ).
1548
1558
Count (new (Issue ))
1549
1559
if err != nil {
1550
1560
return nil , err
1551
1561
}
1552
1562
case FilterModeMention :
1553
- stats .OpenCount , err = x . Where (cond ).And ("issue.is_closed = ?" , false ).
1563
+ stats .OpenCount , err = sess (cond ).And ("issue.is_closed = ?" , false ).
1554
1564
Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
1555
1565
And ("issue_user.uid = ?" , opts .UserID ).
1556
1566
Count (new (Issue ))
1557
1567
if err != nil {
1558
1568
return nil , err
1559
1569
}
1560
- stats .ClosedCount , err = x . Where (cond ).And ("issue.is_closed = ?" , true ).
1570
+ stats .ClosedCount , err = sess (cond ).And ("issue.is_closed = ?" , true ).
1561
1571
Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
1562
1572
And ("issue_user.uid = ?" , opts .UserID ).
1563
1573
Count (new (Issue ))
@@ -1567,30 +1577,30 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
1567
1577
}
1568
1578
1569
1579
cond = cond .And (builder.Eq {"issue.is_closed" : opts .IsClosed })
1570
- stats .AssignCount , err = x . Where (cond ).
1580
+ stats .AssignCount , err = sess (cond ).
1571
1581
Join ("INNER" , "issue_assignees" , "issue.id = issue_assignees.issue_id" ).
1572
1582
And ("issue_assignees.assignee_id = ?" , opts .UserID ).
1573
1583
Count (new (Issue ))
1574
1584
if err != nil {
1575
1585
return nil , err
1576
1586
}
1577
1587
1578
- stats .CreateCount , err = x . Where (cond ).
1588
+ stats .CreateCount , err = sess (cond ).
1579
1589
And ("poster_id = ?" , opts .UserID ).
1580
1590
Count (new (Issue ))
1581
1591
if err != nil {
1582
1592
return nil , err
1583
1593
}
1584
1594
1585
- stats .MentionCount , err = x . Where (cond ).
1595
+ stats .MentionCount , err = sess (cond ).
1586
1596
Join ("INNER" , "issue_user" , "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?" , true ).
1587
1597
And ("issue_user.uid = ?" , opts .UserID ).
1588
1598
Count (new (Issue ))
1589
1599
if err != nil {
1590
1600
return nil , err
1591
1601
}
1592
1602
1593
- stats .YourRepositoriesCount , err = x . Where (cond ).
1603
+ stats .YourRepositoriesCount , err = sess (cond ).
1594
1604
And (builder .In ("issue.repo_id" , opts .UserRepoIDs )).
1595
1605
Count (new (Issue ))
1596
1606
if err != nil {
0 commit comments