summaryrefslogtreecommitdiffstats
path: root/routers/user/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/user/user.go')
-rw-r--r--routers/user/user.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/routers/user/user.go b/routers/user/user.go
index d3ef96211e..b0fc583978 100644
--- a/routers/user/user.go
+++ b/routers/user/user.go
@@ -286,6 +286,85 @@ func Feeds(ctx *middleware.Context, form auth.FeedsForm) {
func Issues(ctx *middleware.Context) {
ctx.Data["Title"] = "Your Issues"
+ ctx.Data["ViewType"] = "all"
+
+ page, _ := base.StrTo(ctx.Query("page")).Int()
+ repoId, _ := base.StrTo(ctx.Query("repoid")).Int64()
+
+ ctx.Data["RepoId"] = repoId
+
+ var posterId int64 = 0
+ if ctx.Query("type") == "created_by" {
+ posterId = ctx.User.Id
+ ctx.Data["ViewType"] = "created_by"
+ }
+
+ // Get all repositories.
+ repos, err := models.GetRepositories(ctx.User)
+ if err != nil {
+ ctx.Handle(200, "user.Issues(get repositories)", err)
+ return
+ }
+
+ showRepos := make([]models.Repository, 0, len(repos))
+
+ var closedIssueCount, createdByCount int
+
+ // Get all issues.
+ allIssues := make([]models.Issue, 0, 5*len(repos))
+ for i, repo := range repos {
+ issues, err := models.GetIssues(0, repo.Id, posterId, 0, page, false, false, "", "")
+ if err != nil {
+ ctx.Handle(200, "user.Issues(get issues)", err)
+ return
+ }
+
+ closedIssueCount += repo.NumClosedIssues
+
+ // Set repository information to issues.
+ for j := range issues {
+ issues[j].Repo = &repos[i]
+ }
+ allIssues = append(allIssues, issues...)
+
+ repos[i].NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
+ if repos[i].NumOpenIssues > 0 {
+ showRepos = append(showRepos, repos[i])
+
+ }
+ }
+
+ showIssues := make([]models.Issue, 0, len(allIssues))
+ isShowClosed := ctx.Query("state") == "closed"
+ ctx.Data["IsShowClosed"] = isShowClosed
+
+ // Get posters and filter issues.
+ for i := range allIssues {
+ u, err := models.GetUserById(allIssues[i].PosterId)
+ if err != nil {
+ ctx.Handle(200, "user.Issues(get poster): %v", err)
+ return
+ }
+ allIssues[i].Poster = u
+ if u.Id == ctx.User.Id {
+ createdByCount++
+ }
+
+ if repoId > 0 && repoId != allIssues[i].Repo.Id {
+ continue
+ }
+
+ if isShowClosed == allIssues[i].IsClosed {
+ showIssues = append(showIssues, allIssues[i])
+ }
+ }
+
+ ctx.Data["Repos"] = showRepos
+ ctx.Data["Issues"] = showIssues
+ ctx.Data["AllIssueCount"] = len(allIssues)
+ ctx.Data["ClosedIssueCount"] = closedIssueCount
+ ctx.Data["OpenIssueCount"] = len(allIssues) - closedIssueCount
+ ctx.Data["CreatedByCount"] = createdByCount
ctx.HTML(200, "issue/user")
}