Files
Gogs/internal/route/org/members.go

119 lines
2.5 KiB
Go
Raw Permalink Normal View History

2014-06-29 16:30:41 -04:00
package org
import (
"github.com/unknwon/com"
log "unknwon.dev/clog/v2"
"gogs.io/gogs/internal/conf"
"gogs.io/gogs/internal/context"
"gogs.io/gogs/internal/database"
2014-06-29 16:30:41 -04:00
)
const (
tmplOrgMembers = "org/member/members"
templOrgMemberInvite = "org/member/invite"
)
2017-06-03 07:26:09 -04:00
func Members(c *context.Context) {
org := c.Org.Organization
c.Data["Title"] = org.FullName
c.Data["PageIsOrgMembers"] = true
if err := org.GetMembers(0); err != nil {
c.Error(err, "get members")
return
}
2017-06-03 07:26:09 -04:00
c.Data["Members"] = org.Members
c.Success(tmplOrgMembers)
}
2017-06-03 07:26:09 -04:00
func MembersAction(c *context.Context) {
uid := com.StrTo(c.Query("uid")).MustInt64()
if uid == 0 {
2017-06-03 07:26:09 -04:00
c.Redirect(c.Org.OrgLink + "/members")
return
}
2017-06-03 07:26:09 -04:00
org := c.Org.Organization
var err error
2017-06-03 07:26:09 -04:00
switch c.Params(":action") {
case "private":
2017-06-03 07:26:09 -04:00
if c.User.ID != uid && !c.Org.IsOwner {
c.NotFound()
return
}
err = database.ChangeOrgUserStatus(org.ID, uid, false)
case "public":
2017-06-03 07:26:09 -04:00
if c.User.ID != uid && !c.Org.IsOwner {
c.NotFound()
return
}
err = database.ChangeOrgUserStatus(org.ID, uid, true)
case "remove":
2017-06-03 07:26:09 -04:00
if !c.Org.IsOwner {
c.NotFound()
return
}
err = org.RemoveMember(uid)
if database.IsErrLastOrgOwner(err) {
2017-06-03 07:26:09 -04:00
c.Flash.Error(c.Tr("form.last_org_owner"))
c.Redirect(c.Org.OrgLink + "/members")
return
}
case "leave":
2017-06-03 07:26:09 -04:00
err = org.RemoveMember(c.User.ID)
if database.IsErrLastOrgOwner(err) {
2017-06-03 07:26:09 -04:00
c.Flash.Error(c.Tr("form.last_org_owner"))
c.Redirect(c.Org.OrgLink + "/members")
return
}
}
if err != nil {
log.Error("Action(%s): %v", c.Params(":action"), err)
c.JSONSuccess(map[string]any{
"ok": false,
"err": err.Error(),
})
return
}
2017-06-03 07:26:09 -04:00
if c.Params(":action") != "leave" {
c.Redirect(c.Org.OrgLink + "/members")
} else {
c.Redirect(conf.Server.Subpath + "/")
}
}
2017-06-03 07:26:09 -04:00
func Invitation(c *context.Context) {
org := c.Org.Organization
c.Data["Title"] = org.FullName
c.Data["PageIsOrgMembers"] = true
2017-06-03 07:26:09 -04:00
if c.Req.Method == "POST" {
uname := c.Query("uname")
u, err := database.Handle.Users().GetByUsername(c.Req.Context(), uname)
if err != nil {
if database.IsErrUserNotExist(err) {
2017-06-03 07:26:09 -04:00
c.Flash.Error(c.Tr("form.user_not_exist"))
c.Redirect(c.Org.OrgLink + "/invitations/new")
} else {
c.Error(err, "get user by name")
}
return
}
2016-07-24 01:08:22 +08:00
if err = org.AddMember(u.ID); err != nil {
c.Error(err, "add member")
return
}
log.Trace("New member added(%s): %s", org.Name, u.Name)
2017-06-03 07:26:09 -04:00
c.Redirect(c.Org.OrgLink + "/members")
return
}
c.Success(templOrgMemberInvite)
2014-06-29 16:30:41 -04:00
}