|
|
|
@ -198,46 +198,43 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var issueStats *issues_model.IssueStats
|
|
|
|
|
{
|
|
|
|
|
statsOpts := &issues_model.IssuesOptions{
|
|
|
|
|
RepoIDs: []int64{repo.ID},
|
|
|
|
|
LabelIDs: labelIDs,
|
|
|
|
|
MilestoneIDs: mileIDs,
|
|
|
|
|
ProjectID: projectID,
|
|
|
|
|
AssigneeID: assigneeID,
|
|
|
|
|
MentionedID: mentionedID,
|
|
|
|
|
PosterID: posterID,
|
|
|
|
|
ReviewRequestedID: reviewRequestedID,
|
|
|
|
|
ReviewedID: reviewedID,
|
|
|
|
|
IsPull: isPullOption,
|
|
|
|
|
IssueIDs: nil,
|
|
|
|
|
}
|
|
|
|
|
if keyword != "" {
|
|
|
|
|
allIssueIDs, err := issueIDsFromSearch(ctx, keyword, statsOpts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if issue_indexer.IsAvailable(ctx) {
|
|
|
|
|
ctx.ServerError("issueIDsFromSearch", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ctx.Data["IssueIndexerUnavailable"] = true
|
|
|
|
|
statsOpts := &issues_model.IssuesOptions{
|
|
|
|
|
RepoIDs: []int64{repo.ID},
|
|
|
|
|
LabelIDs: labelIDs,
|
|
|
|
|
MilestoneIDs: mileIDs,
|
|
|
|
|
ProjectID: projectID,
|
|
|
|
|
AssigneeID: assigneeID,
|
|
|
|
|
MentionedID: mentionedID,
|
|
|
|
|
PosterID: posterID,
|
|
|
|
|
ReviewRequestedID: reviewRequestedID,
|
|
|
|
|
ReviewedID: reviewedID,
|
|
|
|
|
IsPull: isPullOption,
|
|
|
|
|
IssueIDs: nil,
|
|
|
|
|
}
|
|
|
|
|
if keyword != "" {
|
|
|
|
|
allIssueIDs, err := issueIDsFromSearch(ctx, keyword, statsOpts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if issue_indexer.IsAvailable(ctx) {
|
|
|
|
|
ctx.ServerError("issueIDsFromSearch", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
statsOpts.IssueIDs = allIssueIDs
|
|
|
|
|
ctx.Data["IssueIndexerUnavailable"] = true
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if keyword != "" && len(statsOpts.IssueIDs) == 0 {
|
|
|
|
|
// So it did search with the keyword, but no issue found.
|
|
|
|
|
// Just set issueStats to empty.
|
|
|
|
|
issueStats = &issues_model.IssueStats{}
|
|
|
|
|
} else {
|
|
|
|
|
// So it did search with the keyword, and found some issues. It needs to get issueStats of these issues.
|
|
|
|
|
// Or the keyword is empty, so it doesn't need issueIDs as filter, just get issueStats with statsOpts.
|
|
|
|
|
issueStats, err = issues_model.GetIssueStats(ctx, statsOpts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.ServerError("GetIssueStats", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
statsOpts.IssueIDs = allIssueIDs
|
|
|
|
|
}
|
|
|
|
|
if keyword != "" && len(statsOpts.IssueIDs) == 0 {
|
|
|
|
|
// So it did search with the keyword, but no issue found.
|
|
|
|
|
// Just set issueStats to empty.
|
|
|
|
|
issueStats = &issues_model.IssueStats{}
|
|
|
|
|
} else {
|
|
|
|
|
// So it did search with the keyword, and found some issues. It needs to get issueStats of these issues.
|
|
|
|
|
// Or the keyword is empty, so it doesn't need issueIDs as filter, just get issueStats with statsOpts.
|
|
|
|
|
issueStats, err = issues_model.GetIssueStats(ctx, statsOpts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.ServerError("GetIssueStats", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
isShowClosed := ctx.FormString("state") == "closed"
|
|
|
|
@ -246,6 +243,15 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
|
|
|
|
|
isShowClosed = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if repo.IsTimetrackerEnabled(ctx) {
|
|
|
|
|
totalTrackedTime, err := issues_model.GetIssueTotalTrackedTime(ctx, statsOpts, isShowClosed)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.ServerError("GetIssueTotalTrackedTime", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ctx.Data["TotalTrackedTime"] = totalTrackedTime
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
archived := ctx.FormBool("archived")
|
|
|
|
|
|
|
|
|
|
page := ctx.FormInt("page")
|
|
|
|
|