github.com/kotovmak/go-admin@v1.1.1/plugins/admin/controller/handler.go (about) 1 package controller 2 3 import ( 4 template2 "html/template" 5 "regexp" 6 "strings" 7 8 "github.com/kotovmak/go-admin/context" 9 "github.com/kotovmak/go-admin/modules/auth" 10 "github.com/kotovmak/go-admin/modules/errors" 11 "github.com/kotovmak/go-admin/modules/logger" 12 "github.com/kotovmak/go-admin/plugins/admin/modules/constant" 13 "github.com/kotovmak/go-admin/plugins/admin/modules/form" 14 "github.com/kotovmak/go-admin/plugins/admin/modules/parameter" 15 "github.com/kotovmak/go-admin/plugins/admin/modules/response" 16 "github.com/kotovmak/go-admin/plugins/admin/modules/table" 17 "github.com/kotovmak/go-admin/template" 18 "github.com/kotovmak/go-admin/template/types" 19 ) 20 21 // GlobalDeferHandler is a global error handler of admin plugin. 22 func (h *Handler) GlobalDeferHandler(ctx *context.Context) { 23 24 logger.Access(ctx) 25 26 if !h.config.OperationLogOff { 27 h.RecordOperationLog(ctx) 28 } 29 30 if err := recover(); err != nil { 31 logger.Error(err) 32 33 var ( 34 errMsg string 35 ok bool 36 e error 37 ) 38 39 if errMsg, ok = err.(string); !ok { 40 if e, ok = err.(error); ok { 41 errMsg = e.Error() 42 } 43 } 44 45 if errMsg == "" { 46 errMsg = "system error" 47 } 48 49 if ctx.WantJSON() { 50 response.Error(ctx, errMsg) 51 return 52 } 53 54 if ok, _ = regexp.MatchString("/edit(.*)", ctx.Path()); ok { 55 h.setFormWithReturnErrMessage(ctx, errMsg, "edit") 56 return 57 } 58 if ok, _ = regexp.MatchString("/new(.*)", ctx.Path()); ok { 59 h.setFormWithReturnErrMessage(ctx, errMsg, "new") 60 return 61 } 62 63 h.HTML(ctx, auth.Auth(ctx), template.WarningPanelWithDescAndTitle(errMsg, errors.Msg, errors.Msg)) 64 } 65 } 66 67 func (h *Handler) setFormWithReturnErrMessage(ctx *context.Context, errMsg string, kind string) { 68 69 var ( 70 formInfo table.FormInfo 71 prefix = ctx.Query(constant.PrefixKey) 72 panel = h.table(prefix, ctx) 73 btnWord template2.HTML 74 f *types.FormPanel 75 ) 76 77 if kind == "edit" { 78 f = panel.GetForm() 79 id := ctx.Query("id") 80 if id == "" { 81 id = ctx.Request.MultipartForm.Value[panel.GetPrimaryKey().Name][0] 82 } 83 formInfo, _ = panel.GetDataWithId(parameter.GetParam(ctx.Request.URL, 84 panel.GetInfo().DefaultPageSize, 85 panel.GetInfo().SortField, 86 panel.GetInfo().GetSort()).WithPKs(id)) 87 btnWord = f.FormEditBtnWord 88 } else { 89 f = panel.GetActualNewForm() 90 formInfo = panel.GetNewFormInfo() 91 formInfo.Title = f.Title 92 formInfo.Description = f.Description 93 btnWord = f.FormNewBtnWord 94 } 95 96 queryParam := parameter.GetParam(ctx.Request.URL, panel.GetInfo().DefaultPageSize, 97 panel.GetInfo().SortField, panel.GetInfo().GetSort()).GetRouteParamStr() 98 99 h.HTML(ctx, auth.Auth(ctx), types.Panel{ 100 Content: aAlert().Warning(errMsg) + formContent(aForm(). 101 SetContent(formInfo.FieldList). 102 SetTabContents(formInfo.GroupFieldList). 103 SetTabHeaders(formInfo.GroupFieldHeaders). 104 SetTitle(template2.HTML(strings.Title(kind))). 105 SetPrimaryKey(panel.GetPrimaryKey().Name). 106 SetPrefix(h.config.PrefixFixSlash()). 107 SetHiddenFields(map[string]string{ 108 form.TokenKey: h.authSrv().AddToken(), 109 form.PreviousKey: h.config.Url("/info/" + prefix + queryParam), 110 }). 111 SetUrl(h.config.Url("/"+kind+"/"+prefix)). 112 SetOperationFooter(formFooter(kind, f.IsHideContinueEditCheckBox, f.IsHideContinueNewCheckBox, 113 f.IsHideResetButton, btnWord)). 114 SetHeader(f.HeaderHtml). 115 SetFooter(f.FooterHtml), len(formInfo.GroupFieldHeaders) > 0, 116 ctx.IsIframe(), 117 f.IsHideBackButton, f.Header), 118 Description: template2.HTML(formInfo.Description), 119 Title: template2.HTML(formInfo.Title), 120 }) 121 122 ctx.AddHeader(constant.PjaxUrlHeader, h.config.Url("/info/"+prefix+"/"+kind+queryParam)) 123 }