From f430050d244f8bbefc0726b786d49b70bf6a8234 Mon Sep 17 00:00:00 2001 From: zeripath Date: Sun, 15 Jan 2023 23:29:27 +0000 Subject: [PATCH] Fix leaving organization bug on user settings -> orgs (#21983) (#22438) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport #21983 Fix #21772 Co-authored-by: wxiaoguang Co-authored-by: 花墨 Co-authored-by: wxiaoguang Co-authored-by: Lunny Xiao Co-authored-by: KN4CK3R --- options/locale/locale_en-US.ini | 1 + routers/web/org/members.go | 11 +++++++++-- templates/user/settings/organization.tmpl | 18 ++++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 1566dfc97d..a1c250f94c 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -497,6 +497,7 @@ team_not_exist = The team does not exist. last_org_owner = You cannot remove the last user from the 'owners' team. There must be at least one owner for an organization. cannot_add_org_to_team = An organization cannot be added as a team member. duplicate_invite_to_team = The user was already invited as a team member. +organization_leave_success = You have successfully left the organization %s. invalid_ssh_key = Can not verify your SSH key: %s invalid_gpg_key = Can not verify your GPG key: %s diff --git a/routers/web/org/members.go b/routers/web/org/members.go index ec5a98fc6a..6aeff57071 100644 --- a/routers/web/org/members.go +++ b/routers/web/org/members.go @@ -108,13 +108,20 @@ func MembersAction(ctx *context.Context) { } case "leave": err = models.RemoveOrgUser(org.ID, ctx.Doer.ID) - if organization.IsErrLastOrgOwner(err) { + if err == nil { + ctx.Flash.Success(ctx.Tr("form.organization_leave_success", org.DisplayName())) + ctx.JSON(http.StatusOK, map[string]interface{}{ + "redirect": "", // keep the user stay on current page, in case they want to do other operations. + }) + } else if organization.IsErrLastOrgOwner(err) { ctx.Flash.Error(ctx.Tr("form.last_org_owner")) ctx.JSON(http.StatusOK, map[string]interface{}{ "redirect": ctx.Org.OrgLink + "/members", }) - return + } else { + log.Error("RemoveOrgUser(%d,%d): %v", org.ID, ctx.Doer.ID, err) } + return } if err != nil { diff --git a/templates/user/settings/organization.tmpl b/templates/user/settings/organization.tmpl index e25d5e7fa6..703ac8ad8e 100644 --- a/templates/user/settings/organization.tmpl +++ b/templates/user/settings/organization.tmpl @@ -17,9 +17,13 @@ {{range .Orgs}}
-
+ {{$.CsrfTokenHtml}} - +
{{avatar . 28 "mini"}} @@ -36,4 +40,14 @@
+ {{template "base/footer" .}}