Skip to content

Commit 216c227

Browse files
committed
Add review pending filter on pull request overview #13682
fix formatting
1 parent e7b47c5 commit 216c227

File tree

7 files changed

+95
-32
lines changed

7 files changed

+95
-32
lines changed

models/issue.go

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,7 @@ type IssuesOptions struct {
10901090
AssigneeID int64
10911091
PosterID int64
10921092
MentionedID int64
1093+
ReviewPendingID int64
10931094
MilestoneIDs []int64
10941095
ProjectID int64
10951096
ProjectBoardID int64
@@ -1176,6 +1177,12 @@ func (opts *IssuesOptions) setupSession(sess *xorm.Session) {
11761177
And("issue_user.uid = ?", opts.MentionedID)
11771178
}
11781179

1180+
if opts.ReviewPendingID > 0 {
1181+
sess.Join("INNER", []string{"review", "r"}, "issue.id = r.issue_id").
1182+
And("r.reviewer_id = ?", opts.ReviewPendingID).
1183+
And("r.type = ?", ReviewTypePending)
1184+
}
1185+
11791186
if len(opts.MilestoneIDs) > 0 {
11801187
sess.In("issue.milestone_id", opts.MilestoneIDs)
11811188
}
@@ -1359,6 +1366,7 @@ type IssueStats struct {
13591366
AssignCount int64
13601367
CreateCount int64
13611368
MentionCount int64
1369+
ReviewPendingCount int64
13621370
}
13631371

13641372
// Filter modes.
@@ -1367,6 +1375,7 @@ const (
13671375
FilterModeAssign
13681376
FilterModeCreate
13691377
FilterModeMention
1378+
FilterModeReviewPending
13701379
)
13711380

13721381
func parseCountResult(results []map[string][]byte) int64 {
@@ -1381,14 +1390,15 @@ func parseCountResult(results []map[string][]byte) int64 {
13811390

13821391
// IssueStatsOptions contains parameters accepted by GetIssueStats.
13831392
type IssueStatsOptions struct {
1384-
RepoID int64
1385-
Labels string
1386-
MilestoneID int64
1387-
AssigneeID int64
1388-
MentionedID int64
1389-
PosterID int64
1390-
IsPull util.OptionalBool
1391-
IssueIDs []int64
1393+
RepoID int64
1394+
Labels string
1395+
MilestoneID int64
1396+
AssigneeID int64
1397+
MentionedID int64
1398+
PosterID int64
1399+
ReviewPendingID int64
1400+
IsPull util.OptionalBool
1401+
IssueIDs []int64
13921402
}
13931403

13941404
// GetIssueStats returns issue statistic information by given conditions.
@@ -1417,6 +1427,7 @@ func GetIssueStats(opts *IssueStatsOptions) (*IssueStats, error) {
14171427
accum.AssignCount += stats.AssignCount
14181428
accum.CreateCount += stats.CreateCount
14191429
accum.OpenCount += stats.MentionCount
1430+
accum.ReviewPendingCount += stats.ReviewPendingCount
14201431
i = chunk
14211432
}
14221433
return accum, nil
@@ -1468,6 +1479,12 @@ func getIssueStatsChunk(opts *IssueStatsOptions, issueIDs []int64) (*IssueStats,
14681479
And("issue_user.is_mentioned = ?", true)
14691480
}
14701481

1482+
if opts.ReviewPendingID > 0 {
1483+
sess.Join("INNER", []string{"review", "r"}, "issue.id = r.issue_id").
1484+
And("r.reviewer_id = ?", opts.ReviewPendingID).
1485+
And("r.type = ?", ReviewTypePending)
1486+
}
1487+
14711488
switch opts.IsPull {
14721489
case util.OptionalBoolTrue:
14731490
sess.And("issue.is_pull=?", true)
@@ -1573,6 +1590,23 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
15731590
if err != nil {
15741591
return nil, err
15751592
}
1593+
case FilterModeReviewPending:
1594+
stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
1595+
Join("INNER", []string{"review", "r"}, "issue.id = r.issue_id").
1596+
And("r.reviewer_id = ?", opts.UserID).
1597+
And("r.type = ?", ReviewTypePending).
1598+
Count(new(Issue))
1599+
if err != nil {
1600+
return nil, err
1601+
}
1602+
stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
1603+
Join("INNER", []string{"review", "r"}, "issue.id = r.issue_id").
1604+
And("r.reviewer_id = ?", opts.UserID).
1605+
And("r.type = ?", ReviewTypePending).
1606+
Count(new(Issue))
1607+
if err != nil {
1608+
return nil, err
1609+
}
15761610
}
15771611

15781612
cond = cond.And(builder.Eq{"issue.is_closed": opts.IsClosed})
@@ -1606,6 +1640,15 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
16061640
return nil, err
16071641
}
16081642

1643+
stats.ReviewPendingCount, err = x.Where(cond).
1644+
Join("INNER", []string{"review", "r"}, "issue.id = r.issue_id").
1645+
And("r.reviewer_id = ?", opts.UserID).
1646+
And("r.type = ?", ReviewTypePending).
1647+
Count(new(Issue))
1648+
if err != nil {
1649+
return nil, err
1650+
}
1651+
16091652
return stats, nil
16101653
}
16111654

options/locale/locale_en-US.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,7 @@ issues.filter_type.all_issues = All issues
10181018
issues.filter_type.assigned_to_you = Assigned to you
10191019
issues.filter_type.created_by_you = Created by you
10201020
issues.filter_type.mentioning_you = Mentioning you
1021+
issues.filter_type.review_pending = Review pending
10211022
issues.filter_sort = Sort
10221023
issues.filter_sort.latest = Newest
10231024
issues.filter_sort.oldest = Oldest

routers/repo/issue.go

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,17 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
113113
var err error
114114
viewType := ctx.Query("type")
115115
sortType := ctx.Query("sort")
116-
types := []string{"all", "your_repositories", "assigned", "created_by", "mentioned"}
116+
types := []string{"all", "your_repositories", "assigned", "created_by", "mentioned", "review_pending"}
117117
if !com.IsSliceContainsStr(types, viewType) {
118118
viewType = "all"
119119
}
120120

121121
var (
122-
assigneeID = ctx.QueryInt64("assignee")
123-
posterID int64
124-
mentionedID int64
125-
forceEmpty bool
122+
assigneeID = ctx.QueryInt64("assignee")
123+
posterID int64
124+
mentionedID int64
125+
reviewPendingID int64
126+
forceEmpty bool
126127
)
127128

128129
if ctx.IsSigned {
@@ -133,6 +134,8 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
133134
mentionedID = ctx.User.ID
134135
case "assigned":
135136
assigneeID = ctx.User.ID
137+
case "review_pending":
138+
reviewPendingID = ctx.User.ID
136139
}
137140
}
138141

@@ -169,14 +172,15 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
169172
issueStats = &models.IssueStats{}
170173
} else {
171174
issueStats, err = models.GetIssueStats(&models.IssueStatsOptions{
172-
RepoID: repo.ID,
173-
Labels: selectLabels,
174-
MilestoneID: milestoneID,
175-
AssigneeID: assigneeID,
176-
MentionedID: mentionedID,
177-
PosterID: posterID,
178-
IsPull: isPullOption,
179-
IssueIDs: issueIDs,
175+
RepoID: repo.ID,
176+
Labels: selectLabels,
177+
MilestoneID: milestoneID,
178+
AssigneeID: assigneeID,
179+
MentionedID: mentionedID,
180+
PosterID: posterID,
181+
ReviewPendingID: reviewPendingID,
182+
IsPull: isPullOption,
183+
IssueIDs: issueIDs,
180184
})
181185
if err != nil {
182186
ctx.ServerError("GetIssueStats", err)
@@ -217,17 +221,18 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
217221
Page: pager.Paginater.Current(),
218222
PageSize: setting.UI.IssuePagingNum,
219223
},
220-
RepoIDs: []int64{repo.ID},
221-
AssigneeID: assigneeID,
222-
PosterID: posterID,
223-
MentionedID: mentionedID,
224-
MilestoneIDs: mileIDs,
225-
ProjectID: projectID,
226-
IsClosed: util.OptionalBoolOf(isShowClosed),
227-
IsPull: isPullOption,
228-
LabelIDs: labelIDs,
229-
SortType: sortType,
230-
IssueIDs: issueIDs,
224+
RepoIDs: []int64{repo.ID},
225+
AssigneeID: assigneeID,
226+
PosterID: posterID,
227+
MentionedID: mentionedID,
228+
ReviewPendingID: reviewPendingID,
229+
MilestoneIDs: mileIDs,
230+
ProjectID: projectID,
231+
IsClosed: util.OptionalBoolOf(isShowClosed),
232+
IsPull: isPullOption,
233+
LabelIDs: labelIDs,
234+
SortType: sortType,
235+
IssueIDs: issueIDs,
231236
})
232237
if err != nil {
233238
ctx.ServerError("Issues", err)

routers/user/home.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,8 @@ func Issues(ctx *context.Context) {
374374
filterMode = models.FilterModeCreate
375375
case "mentioned":
376376
filterMode = models.FilterModeMention
377+
case "review_pending":
378+
filterMode = models.FilterModeReviewPending
377379
case "your_repositories": // filterMode already set to All
378380
default:
379381
viewType = "your_repositories"
@@ -452,6 +454,8 @@ func Issues(ctx *context.Context) {
452454
opts.PosterID = ctxUser.ID
453455
case models.FilterModeMention:
454456
opts.MentionedID = ctxUser.ID
457+
case models.FilterModeReviewPending:
458+
opts.ReviewPendingID = ctxUser.ID
455459
}
456460

457461
var forceEmpty bool

templates/repo/issue/list.tmpl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@
9696
<a class="{{if eq .ViewType "assigned"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.assigned_to_you"}}</a>
9797
<a class="{{if eq .ViewType "created_by"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.created_by_you"}}</a>
9898
<a class="{{if eq .ViewType "mentioned"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=mentioned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}</a>
99+
{{if .PageIsPullList}}
100+
<a class="{{if eq .ViewType "review_pending"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=review_pending&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.review_pending"}}</a>
101+
{{end}}
99102
</div>
100103
</div>
101104
{{end}}

templates/repo/issue/milestone_issues.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
<a class="{{if eq .ViewType "assigned"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.assigned_to_you"}}</a>
9595
<a class="{{if eq .ViewType "created_by"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.created_by_you"}}</a>
9696
<a class="{{if eq .ViewType "mentioned"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=mentioned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}</a>
97+
<a class="{{if eq .ViewType "review_pending"}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type=review_pending&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.review_pending"}}</a>
9798
</div>
9899
</div>
99100
{{end}}

templates/user/dashboard/issues.tmpl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}
2323
<strong class="ui right">{{CountFmt .IssueStats.MentionCount}}</strong>
2424
</a>
25+
{{if .PageIsPulls}}
26+
<a class="{{if eq .ViewType "review_pending"}}ui basic blue button{{end}} item" href="{{.Link}}?type=review_pending&repos=[{{range $.RepoIDs}}{{.}}%2C{{end}}]&sort={{$.SortType}}&state={{.State}}">
27+
{{.i18n.Tr "repo.issues.filter_type.review_pending"}}
28+
<strong class="ui right">{{CountFmt .IssueStats.ReviewPendingCount}}</strong>
29+
</a>
30+
{{end}}
2531
{{end}}
2632
<div class="ui divider"></div>
2733
<a class="{{if not $.RepoIDs}}ui basic blue button{{end}} repo name item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&q={{$.Keyword}}">

0 commit comments

Comments
 (0)