mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Support delete user email in admin panel (#31690)
   --------- Co-authored-by: Jason Song <i@wolfogre.com>
This commit is contained in:
		| @@ -395,6 +395,7 @@ type SearchEmailOptions struct { | ||||
|  | ||||
| // SearchEmailResult is an e-mail address found in the user or email_address table | ||||
| type SearchEmailResult struct { | ||||
| 	ID          int64 | ||||
| 	UID         int64 | ||||
| 	Email       string | ||||
| 	IsActivated bool | ||||
|   | ||||
| @@ -2982,6 +2982,10 @@ emails.not_updated = Failed to update the requested email address: %v | ||||
| emails.duplicate_active = This email address is already active for a different user. | ||||
| emails.change_email_header = Update Email Properties | ||||
| emails.change_email_text = Are you sure you want to update this email address? | ||||
| emails.delete = Delete Email | ||||
| emails.delete_desc = Are you sure you want to delete this email address? | ||||
| emails.deletion_success = The email address has been deleted. | ||||
| emails.delete_primary_email_error = You can not delete the primary email. | ||||
|  | ||||
| orgs.org_manage_panel = Organization Management | ||||
| orgs.name = Name | ||||
|   | ||||
| @@ -15,6 +15,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/optional" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	"code.gitea.io/gitea/services/context" | ||||
| 	"code.gitea.io/gitea/services/user" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -150,3 +151,32 @@ func ActivateEmail(ctx *context.Context) { | ||||
| 	redirect.RawQuery = q.Encode() | ||||
| 	ctx.Redirect(redirect.String()) | ||||
| } | ||||
|  | ||||
| // DeleteEmail serves a POST request for delete a user's email | ||||
| func DeleteEmail(ctx *context.Context) { | ||||
| 	u, err := user_model.GetUserByID(ctx, ctx.FormInt64("Uid")) | ||||
| 	if err != nil || u == nil { | ||||
| 		ctx.ServerError("GetUserByID", err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	email, err := user_model.GetEmailAddressByID(ctx, u.ID, ctx.FormInt64("id")) | ||||
| 	if err != nil || email == nil { | ||||
| 		ctx.ServerError("GetEmailAddressByID", err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err := user.DeleteEmailAddresses(ctx, u, []string{email.Email}); err != nil { | ||||
| 		if user_model.IsErrPrimaryEmailCannotDelete(err) { | ||||
| 			ctx.Flash.Error(ctx.Tr("admin.emails.delete_primary_email_error")) | ||||
| 			ctx.JSONRedirect("") | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.ServerError("DeleteEmailAddresses", err) | ||||
| 		return | ||||
| 	} | ||||
| 	log.Trace("Email address deleted: %s %s", u.Name, email.Email) | ||||
|  | ||||
| 	ctx.Flash.Success(ctx.Tr("admin.emails.deletion_success")) | ||||
| 	ctx.JSONRedirect("") | ||||
| } | ||||
|   | ||||
| @@ -725,6 +725,7 @@ func registerRoutes(m *web.Router) { | ||||
| 		m.Group("/emails", func() { | ||||
| 			m.Get("", admin.Emails) | ||||
| 			m.Post("/activate", admin.ActivateEmail) | ||||
| 			m.Post("/delete", admin.DeleteEmail) | ||||
| 		}) | ||||
|  | ||||
| 		m.Group("/orgs", func() { | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| 						</th> | ||||
| 						<th>{{ctx.Locale.Tr "admin.emails.primary"}}</th> | ||||
| 						<th>{{ctx.Locale.Tr "admin.emails.activated"}}</th> | ||||
| 						<th></th> | ||||
| 					</tr> | ||||
| 				</thead> | ||||
| 				<tbody> | ||||
| @@ -59,6 +60,11 @@ | ||||
| 									{{svg (Iif .IsActivated "octicon-check" "octicon-x")}} | ||||
| 								{{end}} | ||||
| 							</td> | ||||
| 							<td> | ||||
| 								<div class="tw-flex tw-gap-2"> | ||||
| 									<a class="delete-button" href="" data-url="{{$.Link}}/delete" data-id="{{.ID}}" data-data-uid="{{.UID}}">{{svg "octicon-trash"}}</a> | ||||
| 								</div> | ||||
| 							</td> | ||||
| 						</tr> | ||||
| 					{{end}} | ||||
| 				</tbody> | ||||
| @@ -95,4 +101,16 @@ | ||||
| 		</div> | ||||
|  | ||||
| 	</div> | ||||
|  | ||||
| <div class="ui g-modal-confirm delete modal"> | ||||
| 	<div class="header"> | ||||
| 		{{svg "octicon-trash"}} | ||||
| 		{{ctx.Locale.Tr "admin.emails.delete"}} | ||||
| 	</div> | ||||
| 	<div class="content"> | ||||
| 		{{ctx.Locale.Tr "admin.emails.delete_desc"}} | ||||
| 	</div> | ||||
| 	{{template "base/modal_actions_confirm" .}} | ||||
| </div> | ||||
|  | ||||
| {{template "admin/layout_footer" .}} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user