mirror of
https://github.com/go-gitea/gitea.git
synced 2026-09-08 14:03:24 +09:00
feat(web): Add org removal functionality to admin user details page (#38013)
Signed-off-by: techknowlogick <techknowlogick@gitea.com> Signed-off-by: Karthik Bhandary <34509856+karthikbhandary2@users.noreply.github.com> Co-authored-by: techknowlogick <techknowlogick@gitea.com> Co-authored-by: bircni <bircni@icloud.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
co-authored by
techknowlogick
bircni
wxiaoguang
parent
3c0bfe9463
commit
88974d2db9
@@ -21,7 +21,6 @@ import (
|
||||
"gitea.dev/modules/log"
|
||||
"gitea.dev/modules/optional"
|
||||
"gitea.dev/modules/setting"
|
||||
"gitea.dev/modules/structs"
|
||||
"gitea.dev/modules/templates"
|
||||
"gitea.dev/modules/web"
|
||||
"gitea.dev/routers/web/explore"
|
||||
@@ -30,6 +29,7 @@ import (
|
||||
"gitea.dev/services/context"
|
||||
"gitea.dev/services/forms"
|
||||
"gitea.dev/services/mailer"
|
||||
org_service "gitea.dev/services/org"
|
||||
user_service "gitea.dev/services/user"
|
||||
)
|
||||
|
||||
@@ -293,19 +293,12 @@ func ViewUser(ctx *context.Context) {
|
||||
ctx.Data["Emails"] = emails
|
||||
ctx.Data["EmailsTotal"] = len(emails)
|
||||
|
||||
orgs, err := db.Find[org_model.Organization](ctx, org_model.FindOrgOptions{
|
||||
ListOptions: db.ListOptionsAll,
|
||||
UserID: u.ID,
|
||||
IncludeVisibility: structs.VisibleTypePrivate,
|
||||
})
|
||||
ctx.Data["UserOrgs"], err = org_model.GetUserOrganizations(ctx, u.ID)
|
||||
if err != nil {
|
||||
ctx.ServerError("FindOrgs", err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Data["Users"] = orgs // needed to be able to use explore/user_list template
|
||||
ctx.Data["OrgsTotal"] = len(orgs)
|
||||
|
||||
ctx.HTML(http.StatusOK, tplUserView)
|
||||
}
|
||||
|
||||
@@ -518,6 +511,65 @@ func DeleteUser(ctx *context.Context) {
|
||||
ctx.Redirect(setting.AppSubURL + "/-/admin/users")
|
||||
}
|
||||
|
||||
func RemoveUserFromOrg(ctx *context.Context) {
|
||||
u := prepareUserInfo(ctx)
|
||||
if ctx.Written() {
|
||||
return
|
||||
}
|
||||
|
||||
orgID := ctx.PathParamInt64("org_id")
|
||||
org, err := org_model.GetOrgByID(ctx, orgID)
|
||||
if err != nil {
|
||||
ctx.ServerError("GetOrgByID", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = org_service.RemoveOrgUser(ctx, org, u)
|
||||
if org_model.IsErrLastOrgOwner(err) {
|
||||
ctx.Flash.Error(ctx.Tr("form.last_org_owner"))
|
||||
ctx.JSONRedirect("")
|
||||
return
|
||||
} else if err != nil {
|
||||
ctx.ServerError("RemoveOrgUser", err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Flash.Success(ctx.Tr("admin.users.org_removed", org.Name))
|
||||
ctx.JSONRedirect("")
|
||||
}
|
||||
|
||||
func RemoveUserFromAllOrgs(ctx *context.Context) {
|
||||
u := prepareUserInfo(ctx)
|
||||
if ctx.Written() {
|
||||
return
|
||||
}
|
||||
|
||||
orgs, err := org_model.GetUserOrganizations(ctx, u.ID)
|
||||
if err != nil {
|
||||
ctx.ServerError("GetUserOrganizations", err)
|
||||
return
|
||||
}
|
||||
|
||||
removedCount := 0
|
||||
for i := range orgs {
|
||||
err = org_service.RemoveOrgUser(ctx, orgs[i], u)
|
||||
if org_model.IsErrLastOrgOwner(err) {
|
||||
continue
|
||||
} else if err != nil {
|
||||
log.Error("Failed to remove user %s from org %s: %v", u.Name, orgs[i].Name, err)
|
||||
continue
|
||||
}
|
||||
removedCount++
|
||||
}
|
||||
|
||||
if removedCount < len(orgs) {
|
||||
ctx.Flash.Warning(ctx.Tr("admin.users.some_orgs_removed", removedCount, len(orgs)))
|
||||
} else {
|
||||
ctx.Flash.Success(ctx.Tr("admin.users.all_orgs_removed"))
|
||||
}
|
||||
ctx.JSONRedirect("")
|
||||
}
|
||||
|
||||
// AvatarPost response for change user's avatar request
|
||||
func AvatarPost(ctx *context.Context) {
|
||||
u := prepareUserInfo(ctx)
|
||||
|
||||
Reference in New Issue
Block a user