ui get form new and edit mode
This commit is contained in:
@ -59,7 +59,7 @@ func (t *TableController) Put() {
|
||||
} else {
|
||||
t.Ctx.Output.SetStatus(http.StatusOK)
|
||||
}
|
||||
t.Data["json"] = map[string]int{"uid": uid}
|
||||
t.Data["json"] = map[string]int64{"uid": uid}
|
||||
t.ServeJSON()
|
||||
}
|
||||
|
||||
|
210
controllers/ui.go
Normal file
210
controllers/ui.go
Normal file
@ -0,0 +1,210 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"forge.redroom.link/yves/sqldb"
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// Operations about table
|
||||
type UiController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// @Title form
|
||||
// @Description create access form
|
||||
// @Param fid path string true "The fid of the form"
|
||||
// @Param uid path string true "The uid you want to edit"
|
||||
// @Success 200 json form
|
||||
// @Failure 403 body is empty
|
||||
// @router /:fid/:uid [get]
|
||||
func (u *UiController) GetEditForm() {
|
||||
fid := u.Ctx.Input.Query(":fid")
|
||||
uid := u.Ctx.Input.Query(":uid")
|
||||
|
||||
u.buildForm(fid, uid)
|
||||
}
|
||||
|
||||
// @Title form
|
||||
// @Description create access form
|
||||
// @Param fid path string true "The fid of the form"
|
||||
// @Success 200 json form
|
||||
// @Failure 403 body is empty
|
||||
// @router /:fid [get]
|
||||
func (u *UiController) GetEmptyForm() {
|
||||
fid := u.Ctx.Input.Query(":fid")
|
||||
u.buildForm(fid, "")
|
||||
}
|
||||
|
||||
func (u *UiController) buildForm(fid string, uid string) {
|
||||
|
||||
db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
|
||||
// Get form data
|
||||
formdesc, err := getFormDesc(db, fid)
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
}
|
||||
form := make(map[string]interface{})
|
||||
form["title"] = formdesc[0]["title"].(string)
|
||||
form["description"] = formdesc[0]["header"].(string)
|
||||
|
||||
formfields, err := getFormFields(db, fid)
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
}
|
||||
var fields []interface{}
|
||||
columnnames := []string{"id"}
|
||||
for _, f := range formfields {
|
||||
columnnames = append(columnnames, f["columnname"].(string))
|
||||
}
|
||||
// Get table schema
|
||||
schema, err := db.Table(formdesc[0]["tablename"].(string)).GetSchema()
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
}
|
||||
var data []sqldb.AssRow
|
||||
//Get edited Item data if item id is provided
|
||||
if uid != "" {
|
||||
data, err = getData(db, formdesc[0]["tablename"].(string), columnnames, uid)
|
||||
}
|
||||
for _, f := range formfields {
|
||||
if f["columnname"].(string) != "id" {
|
||||
field := make(map[string]interface{})
|
||||
field["key"] = f["columnname"].(string)
|
||||
if uid != "" {
|
||||
field["value"] = fmt.Sprintf("%v", data[0][f["columnname"].(string)])
|
||||
}
|
||||
field["type"] = f["fieldtype"].(string)
|
||||
field["label"] = f["label"].(string)
|
||||
dbType := schema.Columns[f["columnname"].(string)][:strings.Index(schema.Columns[f["columnname"].(string)], "|")]
|
||||
// foreign keys
|
||||
if f["columnname"].(string)[len(f["columnname"].(string))-3:] == "_id" {
|
||||
fklist := []map[string]interface{}{}
|
||||
// Query FK
|
||||
columns := strings.Split(f["linkcolumns"].(string), ",")
|
||||
sortkeys := strings.Split(f["linkorder"].(string), ",")
|
||||
restriction := f["linkrestriction"].(string)
|
||||
dir := ""
|
||||
fk, err := db.Table(f["columnname"].(string)[:len(f["columnname"].(string))-3]).GetAssociativeArray(columns, restriction, sortkeys, dir)
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
}
|
||||
for _, v := range fk {
|
||||
item := make(map[string]interface{})
|
||||
item["value"] = fmt.Sprintf("%v", v["id"])
|
||||
item["label"] = v["label"]
|
||||
fklist = append(fklist, item)
|
||||
}
|
||||
field["items"] = fklist
|
||||
}
|
||||
// other
|
||||
switch dbType {
|
||||
case "integer":
|
||||
|
||||
case "float", "double":
|
||||
|
||||
case "varchar":
|
||||
|
||||
}
|
||||
if uid != "" {
|
||||
// Force data values to the right type if required
|
||||
switch field["type"] {
|
||||
case "Radio":
|
||||
field["value"] = data[0][f["columnname"].(string)]
|
||||
// force string for all text fields, whatever data type
|
||||
default:
|
||||
field["value"] = fmt.Sprintf("%v", data[0][f["columnname"].(string)])
|
||||
}
|
||||
}
|
||||
|
||||
fields = append(fields, field)
|
||||
}
|
||||
}
|
||||
form["fields"] = fields
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
} else {
|
||||
u.Data["json"] = form
|
||||
}
|
||||
u.ServeJSON()
|
||||
}
|
||||
|
||||
// @Title Access form data post
|
||||
// @Description insert access
|
||||
// @Param uid path string true "The uid you want to edit"
|
||||
// @Param body body form data "body of jsonform data"
|
||||
// @Success 200 json
|
||||
// @Failure 403 body is empty
|
||||
// @router /:uid [post]
|
||||
func (u *UiController) PostAccessForm() {
|
||||
var err error
|
||||
uid := u.Ctx.Input.Query(":uid")
|
||||
var formdata map[string]interface{}
|
||||
json.Unmarshal(u.Ctx.Input.RequestBody, &formdata)
|
||||
db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
|
||||
accesslist := formdata["fields"].([]interface{})
|
||||
switcheslist := accesslist[:len(accesslist)-3]
|
||||
families := []string{}
|
||||
for _, accessif := range switcheslist {
|
||||
access := accessif.(map[string]interface{})
|
||||
basefamily := fmt.Sprint(access["key"].(float64))
|
||||
if access["value"].(bool) {
|
||||
_, err = db.QueryAssociativeArray("insert ignore into user_basefamily(user_id, family_id) values(" + uid + "," + basefamily + ")")
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
}
|
||||
families = append(families, basefamily)
|
||||
} else {
|
||||
// remove off
|
||||
_, err = db.QueryAssociativeArray("delete from user_basefamily where user_id=" + uid + " and family_id=" + basefamily)
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Error().Msg(err.Error())
|
||||
u.Ctx.Output.SetStatus(http.StatusBadRequest)
|
||||
} else {
|
||||
u.Data["json"] = "ok"
|
||||
}
|
||||
u.ServeJSON()
|
||||
}
|
||||
|
||||
func getFormDesc(db *sqldb.Db, fid string) ([]sqldb.AssRow, error) {
|
||||
columns := []string{"*"}
|
||||
restriction := "id=" + fid
|
||||
sortkeys := []string{}
|
||||
dir := ""
|
||||
return db.Table("dbform").GetAssociativeArray(columns, restriction, sortkeys, dir)
|
||||
}
|
||||
|
||||
func getFormFields(db *sqldb.Db, fid string) ([]sqldb.AssRow, error) {
|
||||
columns := []string{"*"}
|
||||
restriction := "form_id=" + fid
|
||||
sortkeys := []string{"columnorder"}
|
||||
dir := ""
|
||||
return db.Table("dbformfields").GetAssociativeArray(columns, restriction, sortkeys, dir)
|
||||
}
|
||||
|
||||
func getData(db *sqldb.Db, table string, columns []string, uid string) ([]sqldb.AssRow, error) {
|
||||
restriction := "id=" + uid
|
||||
sortkeys := []string{}
|
||||
dir := ""
|
||||
return db.Table(table).GetAssociativeArray(columns, restriction, sortkeys, dir)
|
||||
}
|
Reference in New Issue
Block a user