2014-06-30 00:30:41 +04:00
// 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.
2014-06-27 17:33:49 +04:00
package org
import (
"github.com/go-martini/martini"
2014-06-30 00:30:41 +04:00
"github.com/gogits/gogs/models"
2014-07-03 00:42:16 +04:00
"github.com/gogits/gogs/modules/auth"
2014-06-30 00:30:41 +04:00
"github.com/gogits/gogs/modules/base"
2014-07-03 00:42:16 +04:00
"github.com/gogits/gogs/modules/log"
2014-06-27 17:33:49 +04:00
"github.com/gogits/gogs/modules/middleware"
)
2014-06-30 00:30:41 +04:00
const (
2014-07-03 00:42:16 +04:00
TEAMS base . TplName = "org/teams"
TEAM_NEW base . TplName = "org/team_new"
2014-06-30 00:30:41 +04:00
)
2014-06-27 17:33:49 +04:00
func Teams ( ctx * middleware . Context , params martini . Params ) {
2014-06-30 00:30:41 +04:00
ctx . Data [ "Title" ] = "Organization " + params [ "org" ] + " Teams"
org , err := models . GetUserByName ( params [ "org" ] )
if err != nil {
if err == models . ErrUserNotExist {
ctx . Handle ( 404 , "org.Teams(GetUserByName)" , err )
} else {
ctx . Handle ( 500 , "org.Teams(GetUserByName)" , err )
}
return
}
ctx . Data [ "Org" ] = org
if err = org . GetTeams ( ) ; err != nil {
ctx . Handle ( 500 , "org.Teams(GetTeams)" , err )
return
}
for _ , t := range org . Teams {
if err = t . GetMembers ( ) ; err != nil {
ctx . Handle ( 500 , "org.Home(GetMembers)" , err )
return
}
}
ctx . Data [ "Teams" ] = org . Teams
ctx . HTML ( 200 , TEAMS )
2014-06-27 17:33:49 +04:00
}
func NewTeam ( ctx * middleware . Context , params martini . Params ) {
2014-07-03 00:42:16 +04:00
org , err := models . GetUserByName ( params [ "org" ] )
if err != nil {
if err == models . ErrUserNotExist {
ctx . Handle ( 404 , "org.NewTeam(GetUserByName)" , err )
} else {
ctx . Handle ( 500 , "org.NewTeam(GetUserByName)" , err )
}
return
}
ctx . Data [ "Org" ] = org
// Check ownership of organization.
if ! org . IsOrgOwner ( ctx . User . Id ) {
ctx . Error ( 403 )
return
}
ctx . HTML ( 200 , TEAM_NEW )
}
func NewTeamPost ( ctx * middleware . Context , params martini . Params , form auth . CreateTeamForm ) {
org , err := models . GetUserByName ( params [ "org" ] )
if err != nil {
if err == models . ErrUserNotExist {
ctx . Handle ( 404 , "org.NewTeamPost(GetUserByName)" , err )
} else {
ctx . Handle ( 500 , "org.NewTeamPost(GetUserByName)" , err )
}
return
}
ctx . Data [ "Org" ] = org
// Check ownership of organization.
if ! org . IsOrgOwner ( ctx . User . Id ) {
ctx . Error ( 403 )
return
}
if ctx . HasError ( ) {
ctx . HTML ( 200 , TEAM_NEW )
return
}
// Validate permission level.
var auth models . AuthorizeType
switch form . Permission {
case "read" :
auth = models . ORG_READABLE
case "write" :
auth = models . ORG_WRITABLE
case "admin" :
auth = models . ORG_ADMIN
default :
ctx . Error ( 401 )
return
}
t := & models . Team {
OrgId : org . Id ,
Name : form . TeamName ,
Description : form . Description ,
Authorize : auth ,
}
if err = models . NewTeam ( t ) ; err != nil {
if err == models . ErrTeamAlreadyExist {
ctx . Data [ "Err_TeamName" ] = true
ctx . RenderWithErr ( "Team name has already been used" , TEAM_NEW , & form )
} else {
ctx . Handle ( 500 , "org.NewTeamPost(NewTeam)" , err )
}
return
}
log . Trace ( "%s Team created: %s/%s" , ctx . Req . RequestURI , org . Name , t . Name )
ctx . Redirect ( "/org/" + org . LowerName + "/teams/" + t . LowerName )
2014-06-27 17:33:49 +04:00
}
2014-06-27 18:04:04 +04:00
2014-06-30 00:30:41 +04:00
func EditTeam ( ctx * middleware . Context , params martini . Params ) {
ctx . Data [ "Title" ] = "Organization " + params [ "org" ] + " Edit Team"
ctx . HTML ( 200 , "org/edit_team" )
2014-06-27 18:04:04 +04:00
}