// 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 = `
%s
%s
` ) 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") }