diff options
author | Unknwon <u@gogs.io> | 2015-12-21 04:24:11 -0800 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2015-12-21 04:24:11 -0800 |
commit | a49af93fafe824cdd375318d15de420b3ed61e79 (patch) | |
tree | 1508c0bbd9f9caf2c3af8163e4e9abe326093558 /routers/user | |
parent | c62a6b7a1238524225ec9c214dc5eac7da017663 (diff) | |
download | gitea-a49af93fafe824cdd375318d15de420b3ed61e79.tar.gz gitea-a49af93fafe824cdd375318d15de420b3ed61e79.zip |
#1692 APIs: Users Followers
- User profile un/follow
- List user's followers/following
Diffstat (limited to 'routers/user')
-rw-r--r-- | routers/user/home.go | 63 | ||||
-rw-r--r-- | routers/user/profile.go | 145 |
2 files changed, 145 insertions, 63 deletions
diff --git a/routers/user/home.go b/routers/user/home.go index bf97c92398..b5df5e3679 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -7,7 +7,6 @@ package user import ( "bytes" "fmt" - "strings" "github.com/Unknwon/com" "github.com/Unknwon/paginater" @@ -21,7 +20,6 @@ import ( const ( DASHBOARD base.TplName = "user/dashboard/dashboard" ISSUES base.TplName = "user/dashboard/issues" - STARS base.TplName = "user/stars" PROFILE base.TplName = "user/profile" ORG_HOME base.TplName = "org/home" ) @@ -338,67 +336,6 @@ func showOrgProfile(ctx *middleware.Context) { ctx.HTML(200, ORG_HOME) } -func Profile(ctx *middleware.Context) { - ctx.Data["Title"] = "Profile" - ctx.Data["PageIsUserProfile"] = true - - 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 - uname = strings.TrimSuffix(uname, ".keys") - } - - u, err := models.GetUserByName(uname) - if err != nil { - if models.IsErrUserNotExist(err) { - ctx.Handle(404, "GetUserByName", err) - } else { - ctx.Handle(500, "GetUserByName", err) - } - return - } - - // Show SSH keys. - if isShowKeys { - ShowSSHKeys(ctx, u.Id) - return - } - - if u.IsOrganization() { - showOrgProfile(ctx) - return - } - 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: - 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 Email2User(ctx *middleware.Context) { u, err := models.GetUserByEmail(ctx.Query("email")) if err != nil { 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) +} |