diff options
Diffstat (limited to 'routers/user/profile.go')
-rw-r--r-- | routers/user/profile.go | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/routers/user/profile.go b/routers/user/profile.go new file mode 100644 index 0000000000..b531523e65 --- /dev/null +++ b/routers/user/profile.go @@ -0,0 +1,145 @@ +// Copyright 2015 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" + "strings" + + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/middleware" + "github.com/gogits/gogs/modules/setting" + "github.com/gogits/gogs/routers/repo" +) + +const ( + FOLLOWERS base.TplName = "user/meta/followers" + STARS base.TplName = "user/meta/stars" +) + +// GetUserByParams returns user whose name is presented in URL paramenter. +func GetUserByParams(ctx *middleware.Context) *models.User { + user, err := models.GetUserByName(ctx.Params(":username")) + if err != nil { + if models.IsErrUserNotExist(err) { + ctx.Error(404) + } else { + ctx.Handle(500, "GetUserByName", err) + } + return nil + } + return user +} + +func Profile(ctx *middleware.Context) { + uname := ctx.Params(":username") + // Special handle for FireFox requests favicon.ico. + if uname == "favicon.ico" { + ctx.Redirect(setting.AppSubUrl + "/img/favicon.png") + return + } else if strings.HasSuffix(uname, ".png") { + ctx.Error(404) + return + } + + isShowKeys := false + if strings.HasSuffix(uname, ".keys") { + isShowKeys = true + } + + u := GetUserByParams(ctx) + if ctx.Written() { + return + } + + // Show SSH keys. + if isShowKeys { + ShowSSHKeys(ctx, u.Id) + return + } + + if u.IsOrganization() { + showOrgProfile(ctx) + return + } + + ctx.Data["Title"] = u.DisplayName() + ctx.Data["PageIsUserProfile"] = true + ctx.Data["Owner"] = u + + tab := ctx.Query("tab") + ctx.Data["TabName"] = tab + switch tab { + case "activity": + retrieveFeeds(ctx, u.Id, 0, true) + if ctx.Written() { + return + } + default: + var err error + ctx.Data["Repos"], err = models.GetRepositories(u.Id, ctx.IsSigned && ctx.User.Id == u.Id) + if err != nil { + ctx.Handle(500, "GetRepositories", err) + return + } + } + + ctx.HTML(200, PROFILE) +} + +func Followers(ctx *middleware.Context) { + u := GetUserByParams(ctx) + if ctx.Written() { + return + } + ctx.Data["Title"] = u.DisplayName() + ctx.Data["CardsTitle"] = ctx.Tr("user.followers") + ctx.Data["PageIsFollowers"] = true + ctx.Data["Owner"] = u + repo.RenderUserCards(ctx, u.NumFollowers, u.GetFollowers, FOLLOWERS) +} + +func Following(ctx *middleware.Context) { + u := GetUserByParams(ctx) + if ctx.Written() { + return + } + ctx.Data["Title"] = u.DisplayName() + ctx.Data["CardsTitle"] = ctx.Tr("user.following") + ctx.Data["PageIsFollowing"] = true + ctx.Data["Owner"] = u + repo.RenderUserCards(ctx, u.NumFollowing, u.GetFollowing, FOLLOWERS) +} + +func Stars(ctx *middleware.Context) { + +} + +func Action(ctx *middleware.Context) { + u := GetUserByParams(ctx) + if ctx.Written() { + return + } + + var err error + switch ctx.Params(":action") { + case "follow": + err = models.FollowUser(ctx.User.Id, u.Id) + case "unfollow": + err = models.UnfollowUser(ctx.User.Id, u.Id) + } + + if err != nil { + ctx.Handle(500, fmt.Sprintf("Action (%s)", ctx.Params(":action")), err) + return + } + + redirectTo := ctx.Query("redirect_to") + if len(redirectTo) == 0 { + redirectTo = u.HomeLink() + } + ctx.Redirect(redirectTo) +} |