diff options
author | Unknown <joe2010xtmf@163.com> | 2014-05-01 11:32:12 -0400 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-05-01 11:32:12 -0400 |
commit | f6c4fbeb37bc7fcbc947c162358c39e9bed90488 (patch) | |
tree | 37d9ba100ba006b9d322014bff1975014b8f3fd3 /routers/repo/setting.go | |
parent | 0dfb5560cdee369b2292071d14d750b2477c6086 (diff) | |
download | gitea-f6c4fbeb37bc7fcbc947c162358c39e9bed90488.tar.gz gitea-f6c4fbeb37bc7fcbc947c162358c39e9bed90488.zip |
Collaborator
Diffstat (limited to 'routers/repo/setting.go')
-rw-r--r-- | routers/repo/setting.go | 88 |
1 files changed, 75 insertions, 13 deletions
diff --git a/routers/repo/setting.go b/routers/repo/setting.go index bb36260912..8f7b84b694 100644 --- a/routers/repo/setting.go +++ b/routers/repo/setting.go @@ -6,7 +6,10 @@ package repo import ( "fmt" + "strings" + "github.com/gogits/git" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" @@ -20,13 +23,7 @@ func Setting(ctx *middleware.Context) { } ctx.Data["IsRepoToolbarSetting"] = true - - var title string - if t, ok := ctx.Data["Title"].(string); ok { - title = t - } - - ctx.Data["Title"] = title + " - settings" + ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - settings" ctx.HTML(200, "repo/setting") } @@ -128,17 +125,82 @@ func SettingPost(ctx *middleware.Context) { func Collaboration(ctx *middleware.Context) { if !ctx.Repo.IsOwner { - ctx.Handle(404, "repo.Setting", nil) + ctx.Error(404) return } - ctx.Data["IsRepoToolbarSetting"] = true + repoLink := strings.TrimPrefix(ctx.Repo.RepoLink, "/") + ctx.Data["IsRepoToolbarCollaboration"] = true + ctx.Data["Title"] = repoLink + " - collaboration" + + // Delete collaborator. + remove := strings.ToLower(ctx.Query("remove")) + if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName { + if err := models.DeleteAccess(&models.Access{UserName: remove, RepoName: repoLink}); err != nil { + ctx.Handle(500, "repo.Collaboration(DeleteAccess)", err) + return + } + ctx.Flash.Success("Collaborator has been removed.") + ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration") + return + } + + names, err := models.GetCollaborators(repoLink) + if err != nil { + ctx.Handle(500, "repo.Collaboration(GetCollaborators)", err) + return + } - var title string - if t, ok := ctx.Data["Title"].(string); ok { - title = t + us := make([]*models.User, len(names)) + for i, name := range names { + us[i], err = models.GetUserByName(name) + if err != nil { + ctx.Handle(500, "repo.Collaboration(GetUserByName)", err) + return + } } - ctx.Data["Title"] = title + " - collaboration" + ctx.Data["Collaborators"] = us ctx.HTML(200, "repo/collaboration") } + +func CollaborationPost(ctx *middleware.Context) { + if !ctx.Repo.IsOwner { + ctx.Error(404) + return + } + + repoLink := strings.TrimPrefix(ctx.Repo.RepoLink, "/") + name := strings.ToLower(ctx.Query("collaborator")) + if len(name) == 0 || ctx.Repo.Owner.LowerName == name { + ctx.Redirect(ctx.Req.RequestURI) + return + } + has, err := models.HasAccess(name, repoLink, models.AU_WRITABLE) + if err != nil { + ctx.Handle(500, "repo.CollaborationPost(HasAccess)", err) + return + } else if has { + ctx.Redirect(ctx.Req.RequestURI) + return + } + + isExist, err := models.IsUserExist(name) + if err != nil { + ctx.Handle(500, "repo.CollaborationPost(IsUserExist)", err) + return + } else if !isExist { + ctx.Flash.Error("Given user does not exist.") + ctx.Redirect(ctx.Req.RequestURI) + return + } + + if err := models.AddAccess(&models.Access{UserName: name, RepoName: repoLink, + Mode: models.AU_WRITABLE}); err != nil { + ctx.Handle(500, "repo.CollaborationPost(AddAccess)", err) + return + } + + ctx.Flash.Success("New collaborator has been added.") + ctx.Redirect(ctx.Req.RequestURI) +} |