summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
author无闻 <u@gogs.io>2015-02-11 12:43:13 -0500
committer无闻 <u@gogs.io>2015-02-11 12:43:13 -0500
commite805fdb29cdf8ceabe271a5f26472ae1dc34abff (patch)
tree3f861b6ea56c70d549e2a241be677ec7b0eab04e /routers
parent6ed96b7a20b8b53ef958808cc414d59b72b7fa5c (diff)
parent03af37554e34582e8c5a9d98ec9f2d3c9884f0d8 (diff)
downloadgitea-e805fdb29cdf8ceabe271a5f26472ae1dc34abff.tar.gz
gitea-e805fdb29cdf8ceabe271a5f26472ae1dc34abff.zip
Merge pull request #925 from phsmit/newcollaboration
Collaboration
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/repo.go21
-rw-r--r--routers/repo/issue.go10
-rw-r--r--routers/repo/setting.go57
-rw-r--r--routers/user/home.go14
4 files changed, 38 insertions, 64 deletions
diff --git a/routers/api/v1/repo.go b/routers/api/v1/repo.go
index fbf9c73ea7..469e4808fe 100644
--- a/routers/api/v1/repo.go
+++ b/routers/api/v1/repo.go
@@ -237,28 +237,31 @@ func ListMyRepos(ctx *middleware.Context) {
}
numOwnRepos := len(ownRepos)
- collaRepos, err := models.GetCollaborativeRepos(ctx.User.Name)
+ accessibleRepos, err := ctx.User.GetAccessibleRepositories()
if err != nil {
- ctx.JSON(500, &base.ApiJsonErr{"GetCollaborativeRepos: " + err.Error(), base.DOC_URL})
+ ctx.JSON(500, &base.ApiJsonErr{"GetAccessibleRepositories: " + err.Error(), base.DOC_URL})
return
}
- repos := make([]*api.Repository, numOwnRepos+len(collaRepos))
+ repos := make([]*api.Repository, numOwnRepos+len(accessibleRepos))
for i := range ownRepos {
repos[i] = ToApiRepository(ctx.User, ownRepos[i], api.Permission{true, true, true})
}
- for i := range collaRepos {
- if err = collaRepos[i].GetOwner(); err != nil {
+ i := numOwnRepos
+
+ for repo, access := range accessibleRepos {
+ if err = repo.GetOwner(); err != nil {
ctx.JSON(500, &base.ApiJsonErr{"GetOwner: " + err.Error(), base.DOC_URL})
return
}
- j := i + numOwnRepos
- repos[j] = ToApiRepository(collaRepos[i].Owner, collaRepos[i].Repository, api.Permission{false, collaRepos[i].CanPush, true})
+
+ repos[i] = ToApiRepository(repo.Owner, repo, api.Permission{false, access >= models.WRITABLE, true})
// FIXME: cache result to reduce DB query?
- if collaRepos[i].Owner.IsOrganization() && collaRepos[i].Owner.IsOwnedBy(ctx.User.Id) {
- repos[j].Permissions.Admin = true
+ if repo.Owner.IsOrganization() && repo.Owner.IsOwnedBy(ctx.User.Id) {
+ repos[i].Permissions.Admin = true
}
+ i++
}
ctx.JSON(200, &repos)
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 3e0206dafb..bf39d9aba6 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -174,7 +174,7 @@ func CreateIssue(ctx *middleware.Context) {
return
}
- us, err := models.GetCollaborators(strings.TrimPrefix(ctx.Repo.RepoLink, "/"))
+ us, err := ctx.Repo.Repository.GetCollaborators()
if err != nil {
ctx.Handle(500, "issue.CreateIssue(GetCollaborators)", err)
return
@@ -218,7 +218,7 @@ func CreateIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
return
}
- _, err = models.GetCollaborators(strings.TrimPrefix(ctx.Repo.RepoLink, "/"))
+ _, err = ctx.Repo.Repository.GetCollaborators()
if err != nil {
send(500, nil, err)
return
@@ -246,8 +246,8 @@ func CreateIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
if err := models.NewIssue(issue); err != nil {
send(500, nil, err)
return
- } else if err := models.NewIssueUserPairs(issue.RepoId, issue.Id, ctx.Repo.Owner.Id,
- ctx.User.Id, form.AssigneeId, ctx.Repo.Repository.Name); err != nil {
+ } else if err := models.NewIssueUserPairs(ctx.Repo.Repository, issue.Id, ctx.Repo.Owner.Id,
+ ctx.User.Id, form.AssigneeId); err != nil {
send(500, nil, err)
return
}
@@ -384,7 +384,7 @@ func ViewIssue(ctx *middleware.Context) {
}
// Get all collaborators.
- ctx.Data["Collaborators"], err = models.GetCollaborators(strings.TrimPrefix(ctx.Repo.RepoLink, "/"))
+ ctx.Data["Collaborators"], err = ctx.Repo.Repository.GetCollaborators()
if err != nil {
ctx.Handle(500, "issue.CreateIssue(GetCollaborators)", err)
return
diff --git a/routers/repo/setting.go b/routers/repo/setting.go
index 33bf1eab28..a6f50d3068 100644
--- a/routers/repo/setting.go
+++ b/routers/repo/setting.go
@@ -10,7 +10,6 @@ import (
"fmt"
"strings"
"time"
- "path"
"github.com/Unknwon/com"
@@ -170,22 +169,12 @@ func SettingsCollaboration(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsCollaboration"] = true
- repoLink := path.Join(ctx.Repo.Owner.LowerName, ctx.Repo.Repository.LowerName)
-
if ctx.Req.Method == "POST" {
name := strings.ToLower(ctx.Query("collaborator"))
if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
return
}
- has, err := models.HasAccess(name, repoLink, models.WRITABLE)
- if err != nil {
- ctx.Handle(500, "HasAccess", err)
- return
- } else if has {
- ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
- return
- }
u, err := models.GetUserByName(name)
if err != nil {
@@ -205,9 +194,8 @@ func SettingsCollaboration(ctx *middleware.Context) {
return
}
- if err = models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
- Mode: models.WRITABLE}); err != nil {
- ctx.Handle(500, "AddAccess", err)
+ if err = ctx.Repo.Repository.AddCollaborator(u); err != nil {
+ ctx.Handle(500, "AddCollaborator", err)
return
}
@@ -226,50 +214,27 @@ func SettingsCollaboration(ctx *middleware.Context) {
// Delete collaborator.
remove := strings.ToLower(ctx.Query("remove"))
if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName {
- needDelete := true
- if ctx.User.IsOrganization() {
- // Check if user belongs to a team that has access to this repository.
- auth, err := models.GetHighestAuthorize(ctx.Repo.Owner.Id, ctx.User.Id, ctx.Repo.Repository.Id, 0)
- if err != nil {
- ctx.Handle(500, "GetHighestAuthorize", err)
- return
- }
- if auth > 0 {
- needDelete = false
- }
+ u, err := models.GetUserByName(remove)
+ if err != nil {
+ ctx.Handle(500, "GetUserByName", err)
+ return
}
-
- if needDelete {
- if err := models.DeleteAccess(&models.Access{UserName: remove, RepoName: repoLink}); err != nil {
- ctx.Handle(500, "DeleteAccess", err)
- return
- }
+ if err := ctx.Repo.Repository.DeleteCollaborator(u); err != nil {
+ ctx.Handle(500, "DeleteCollaborator", err)
+ return
}
ctx.Flash.Success(ctx.Tr("repo.settings.remove_collaborator_success"))
ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration")
return
}
- names, err := models.GetCollaboratorNames(repoLink)
+ users, err := ctx.Repo.Repository.GetCollaborators()
if err != nil {
ctx.Handle(500, "GetCollaborators", err)
return
}
- collaborators := make([]*models.User, 0, len(names))
- for _, name := range names {
- u, err := models.GetUserByName(name)
- if err != nil {
- ctx.Handle(500, "GetUserByName", err)
- return
- }
- // Does not show organization members.
- if ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgMember(u.Id) {
- continue
- }
- collaborators = append(collaborators, u)
- }
- ctx.Data["Collaborators"] = collaborators
+ ctx.Data["Collaborators"] = users
ctx.HTML(200, COLLABORATION)
}
diff --git a/routers/user/home.go b/routers/user/home.go
index 1aabe08774..5b02154c10 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -49,13 +49,19 @@ func Dashboard(ctx *middleware.Context) {
} else {
// Normal user.
ctxUser = ctx.User
- collaborates, err := models.GetCollaborativeRepos(ctxUser.Name)
+ collaborates, err := ctx.User.GetAccessibleRepositories()
if err != nil {
- ctx.Handle(500, "GetCollaborativeRepos", err)
+ ctx.Handle(500, "GetAccessibleRepositories", err)
return
}
- ctx.Data["CollaborateCount"] = len(collaborates)
- ctx.Data["CollaborativeRepos"] = collaborates
+
+ repositories := make([]*models.Repository, 0, len(collaborates))
+ for repo := range collaborates {
+ repositories = append(repositories, repo)
+ }
+
+ ctx.Data["CollaborateCount"] = len(repositories)
+ ctx.Data["CollaborativeRepos"] = repositories
}
ctx.Data["ContextUser"] = ctxUser