1
0

members.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package org
  2. import (
  3. "strconv"
  4. log "unknwon.dev/clog/v2"
  5. "gogs.io/gogs/internal/conf"
  6. "gogs.io/gogs/internal/context"
  7. "gogs.io/gogs/internal/database"
  8. )
  9. const (
  10. tmplOrgMembers = "org/member/members"
  11. templOrgMemberInvite = "org/member/invite"
  12. )
  13. func Members(c *context.Context) {
  14. org := c.Org.Organization
  15. c.Data["Title"] = org.FullName
  16. c.Data["PageIsOrgMembers"] = true
  17. if err := org.GetMembers(0); err != nil {
  18. c.Error(err, "get members")
  19. return
  20. }
  21. c.Data["Members"] = org.Members
  22. c.Success(tmplOrgMembers)
  23. }
  24. func MembersAction(c *context.Context) {
  25. uid, _ := strconv.ParseInt(c.Query("uid"), 10, 64)
  26. if uid == 0 {
  27. c.Redirect(c.Org.OrgLink + "/members")
  28. return
  29. }
  30. org := c.Org.Organization
  31. var err error
  32. switch c.Params(":action") {
  33. case "private":
  34. if c.User.ID != uid && !c.Org.IsOwner {
  35. c.NotFound()
  36. return
  37. }
  38. err = database.ChangeOrgUserStatus(org.ID, uid, false)
  39. case "public":
  40. if c.User.ID != uid && !c.Org.IsOwner {
  41. c.NotFound()
  42. return
  43. }
  44. err = database.ChangeOrgUserStatus(org.ID, uid, true)
  45. case "remove":
  46. if !c.Org.IsOwner {
  47. c.NotFound()
  48. return
  49. }
  50. err = org.RemoveMember(uid)
  51. if database.IsErrLastOrgOwner(err) {
  52. c.Flash.Error(c.Tr("form.last_org_owner"))
  53. c.Redirect(c.Org.OrgLink + "/members")
  54. return
  55. }
  56. case "leave":
  57. err = org.RemoveMember(c.User.ID)
  58. if database.IsErrLastOrgOwner(err) {
  59. c.Flash.Error(c.Tr("form.last_org_owner"))
  60. c.Redirect(c.Org.OrgLink + "/members")
  61. return
  62. }
  63. }
  64. if err != nil {
  65. log.Error("Action(%s): %v", c.Params(":action"), err)
  66. c.JSONSuccess(map[string]any{
  67. "ok": false,
  68. "err": err.Error(),
  69. })
  70. return
  71. }
  72. if c.Params(":action") != "leave" {
  73. c.Redirect(c.Org.OrgLink + "/members")
  74. } else {
  75. c.Redirect(conf.Server.Subpath + "/")
  76. }
  77. }
  78. func Invitation(c *context.Context) {
  79. org := c.Org.Organization
  80. c.Data["Title"] = org.FullName
  81. c.Data["PageIsOrgMembers"] = true
  82. if c.Req.Method == "POST" {
  83. uname := c.Query("uname")
  84. u, err := database.Handle.Users().GetByUsername(c.Req.Context(), uname)
  85. if err != nil {
  86. if database.IsErrUserNotExist(err) {
  87. c.Flash.Error(c.Tr("form.user_not_exist"))
  88. c.Redirect(c.Org.OrgLink + "/invitations/new")
  89. } else {
  90. c.Error(err, "get user by name")
  91. }
  92. return
  93. }
  94. if err = org.AddMember(u.ID); err != nil {
  95. c.Error(err, "add member")
  96. return
  97. }
  98. log.Trace("New member added(%s): %s", org.Name, u.Name)
  99. c.Redirect(c.Org.OrgLink + "/members")
  100. return
  101. }
  102. c.Success(templOrgMemberInvite)
  103. }