gitea/routers/user/home.go

245 lines
5.8 KiB
Go

// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package user
import (
"fmt"
"github.com/Unknwon/com"
"github.com/go-martini/martini"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware"
)
func Dashboard(ctx *middleware.Context) {
ctx.Data["Title"] = "Dashboard"
ctx.Data["PageIsUserDashboard"] = true
repos, err := models.GetRepositories(&models.User{Id: ctx.User.Id}, true)
if err != nil {
ctx.Handle(500, "user.Dashboard", err)
return
}
ctx.Data["MyRepos"] = repos
feeds, err := models.GetFeeds(ctx.User.Id, 0, false)
if err != nil {
ctx.Handle(500, "user.Dashboard", err)
return
}
ctx.Data["Feeds"] = feeds
ctx.HTML(200, "user/dashboard")
}
func Profile(ctx *middleware.Context, params martini.Params) {
ctx.Data["Title"] = "Profile"
// TODO: Need to check view self or others.
user, err := models.GetUserByName(params["username"])
if err != nil {
ctx.Handle(500, "user.Profile", err)
return
}
ctx.Data["Owner"] = user
tab := ctx.Query("tab")
ctx.Data["TabName"] = tab
switch tab {
case "activity":
feeds, err := models.GetFeeds(user.Id, 0, true)
if err != nil {
ctx.Handle(500, "user.Profile", err)
return
}
ctx.Data["Feeds"] = feeds
default:
repos, err := models.GetRepositories(user, ctx.IsSigned && ctx.User.Id == user.Id)
if err != nil {
ctx.Handle(500, "user.Profile", err)
return
}
ctx.Data["Repos"] = repos
}
ctx.Data["PageIsUserProfile"] = true
ctx.HTML(200, "user/profile")
}
func Email2User(ctx *middleware.Context) {
u, err := models.GetUserByEmail(ctx.Query("email"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "user.Email2User", err)
} else {
ctx.Handle(500, "user.Email2User(GetUserByEmail)", err)
}
return
}
ctx.Redirect("/user/" + u.Name)
}
const (
TPL_FEED = `<i class="icon fa fa-%s"></i>
<div class="info"><span class="meta">%s</span><br>%s</div>`
)
func Feeds(ctx *middleware.Context, form auth.FeedsForm) {
actions, err := models.GetFeeds(form.UserId, form.Page*20, false)
if err != nil {
ctx.JSON(500, err)
}
feeds := make([]string, len(actions))
for i := range actions {
feeds[i] = fmt.Sprintf(TPL_FEED, base.ActionIcon(actions[i].OpType),
base.TimeSince(actions[i].Created), base.ActionDesc(actions[i]))
}
ctx.JSON(200, &feeds)
}
func Issues(ctx *middleware.Context) {
ctx.Data["Title"] = "Your Issues"
viewType := ctx.Query("type")
types := []string{"assigned", "created_by"}
if !com.IsSliceContainsStr(types, viewType) {
viewType = "all"
}
isShowClosed := ctx.Query("state") == "closed"
var assigneeId, posterId int64
var filterMode int
switch viewType {
case "assigned":
assigneeId = ctx.User.Id
filterMode = models.FM_ASSIGN
case "created_by":
posterId = ctx.User.Id
filterMode = models.FM_CREATE
}
_, _ = assigneeId, posterId
// 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"
// }
rid, _ := base.StrTo(ctx.Query("repoid")).Int64()
issueStats := models.GetUserIssueStats(ctx.User.Id, filterMode)
// Get all repositories.
repos, err := models.GetRepositories(ctx.User, true)
if err != nil {
ctx.Handle(500, "user.Issues(get repositories)", err)
return
}
showRepos := make([]*models.Repository, 0, len(repos))
// Get all issues.
// allIssues := make([]models.Issue, 0, 5*len(repos))
for _, repo := range repos {
if repo.NumIssues == 0 {
continue
}
repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
issueStats.AllCount += int64(repo.NumOpenIssues)
// switch filterMode{
// case models.FM_ASSIGN:
// }
if isShowClosed {
if repo.NumClosedIssues > 0 {
showRepos = append(showRepos, repo)
}
} else {
if repo.NumOpenIssues > 0 {
showRepos = append(showRepos, repo)
}
}
// issues, err := models.GetIssues(0, repo.Id, posterId, 0, page, isShowClosed, "", "")
// if err != nil {
// ctx.Handle(200, "user.Issues(get issues)", err)
// return
// }
}
// allIssueCount += repo.NumIssues
// 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))
// 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["RepoId"] = rid
ctx.Data["Repos"] = showRepos
ctx.Data["ViewType"] = viewType
ctx.Data["IssueStats"] = issueStats
ctx.Data["IsShowClosed"] = isShowClosed
if isShowClosed {
ctx.Data["State"] = "closed"
ctx.Data["ShowCount"] = issueStats.ClosedCount
} else {
ctx.Data["ShowCount"] = issueStats.OpenCount
}
ctx.HTML(200, "issue/user")
}
func Pulls(ctx *middleware.Context) {
ctx.HTML(200, "user/pulls")
}
func Stars(ctx *middleware.Context) {
ctx.HTML(200, "user/stars")
}