forked from GoAdminGroup/go-admin
/
new.go
126 lines (105 loc) · 3.1 KB
/
new.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package guard
import (
"html/template"
"mime/multipart"
"strings"
"github.com/MarErm27/go-admin/context"
"github.com/MarErm27/go-admin/modules/auth"
"github.com/MarErm27/go-admin/modules/config"
"github.com/MarErm27/go-admin/modules/db"
"github.com/MarErm27/go-admin/modules/errors"
"github.com/MarErm27/go-admin/plugins/admin/modules/constant"
"github.com/MarErm27/go-admin/plugins/admin/modules/form"
"github.com/MarErm27/go-admin/plugins/admin/modules/parameter"
"github.com/MarErm27/go-admin/plugins/admin/modules/table"
)
type ShowNewFormParam struct {
Panel table.Table
Prefix string
Param parameter.Parameters
}
func (g *Guard) ShowNewForm(ctx *context.Context) {
panel, prefix := g.table(ctx)
if !panel.GetCanAdd() {
alert(ctx, panel, errors.OperationNotAllow, g.conn, g.navBtns)
ctx.Abort()
return
}
if panel.GetOnlyInfo() {
ctx.Redirect(config.Url("/info/" + prefix))
ctx.Abort()
return
}
if panel.GetOnlyDetail() {
ctx.Redirect(config.Url("/info/" + prefix + "/detail"))
ctx.Abort()
return
}
if panel.GetOnlyUpdateForm() {
ctx.Redirect(config.Url("/info/" + prefix + "/edit"))
ctx.Abort()
return
}
ctx.SetUserValue(showNewFormParam, &ShowNewFormParam{
Panel: panel,
Prefix: prefix,
Param: parameter.GetParam(ctx.Request.URL, panel.GetInfo().DefaultPageSize, panel.GetInfo().SortField,
panel.GetInfo().GetSort()),
})
ctx.Next()
}
func GetShowNewFormParam(ctx *context.Context) *ShowNewFormParam {
return ctx.UserValue[showNewFormParam].(*ShowNewFormParam)
}
type NewFormParam struct {
Panel table.Table
Id string
Prefix string
Param parameter.Parameters
Path string
MultiForm *multipart.Form
PreviousPath string
FromList bool
IsIframe bool
IframeID string
Alert template.HTML
}
func (e NewFormParam) Value() form.Values {
return e.MultiForm.Value
}
func (g *Guard) NewForm(ctx *context.Context) {
var (
previous = ctx.FormValue(form.PreviousKey)
panel, prefix = g.table(ctx)
conn = db.GetConnection(g.services)
token = ctx.FormValue(form.TokenKey)
)
if !auth.GetTokenService(g.services.Get(auth.TokenServiceKey)).CheckToken(token) {
alert(ctx, panel, errors.CreateFailWrongToken, conn, g.navBtns)
ctx.Abort()
return
}
fromList := isInfoUrl(previous)
param := parameter.GetParamFromURL(previous, panel.GetInfo().DefaultPageSize,
panel.GetInfo().GetSort(), panel.GetPrimaryKey().Name)
if fromList {
previous = config.Url("/info/" + prefix + param.GetRouteParamStr())
}
values := ctx.Request.MultipartForm.Value
ctx.SetUserValue(newFormParamKey, &NewFormParam{
Panel: panel,
Id: "",
Prefix: prefix,
Param: param,
IsIframe: form.Values(values).Get(constant.IframeKey) == "true",
IframeID: form.Values(values).Get(constant.IframeIDKey),
Path: strings.Split(previous, "?")[0],
MultiForm: ctx.Request.MultipartForm,
PreviousPath: previous,
FromList: fromList,
})
ctx.Next()
}
func GetNewFormParam(ctx *context.Context) *NewFormParam {
return ctx.UserValue[newFormParamKey].(*NewFormParam)
}