package modules import ( "html" "io/ioutil" "os" "golang-fave/engine/assets" "golang-fave/engine/builder" "golang-fave/engine/consts" "golang-fave/engine/utils" "golang-fave/engine/wrapper" ) func (this *Modules) RegisterModule_Settings() *Module { return this.newModule(MInfo{ Mount: "settings", Name: "Settings", Order: 801, System: true, Icon: assets.SysSvgIconGear, Sub: &[]MISub{ {Mount: "default", Name: "General", Show: true, Icon: assets.SysSvgIconGear}, {Mount: "robots-txt", Name: "Robots.txt", Show: true, Icon: assets.SysSvgIconBug}, {Mount: "pagination", Name: "Pagination", Show: true, Icon: assets.SysSvgIconPagination}, {Mount: "thumbnails", Name: "Thumbnails", Show: true, Icon: assets.SysSvgIconThumbnails}, {Mount: "domains", Name: "Domains", Show: true, Icon: assets.SysSvgIconApi}, {Mount: "smtp", Name: "SMTP", Show: true, Icon: assets.SysSvgIconEmail}, {Mount: "shop", Name: "Shop", Show: true, Icon: assets.SysSvgIconShop}, {Mount: "api", Name: "API", Show: true, Icon: assets.SysSvgIconApi}, }, }, nil, func(wrap *wrapper.Wrapper) (string, string, string) { content := "" sidebar := "" if wrap.CurrSubModule == "" || wrap.CurrSubModule == "default" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "General"}, }) content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-general", }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { modules_list := `` modules_list += `<select class="form-control" id="lbl_module-at-home" name="module-at-home">` modules_list += `<option value="0"` if (*wrap.Config).Engine.MainModule == 0 { modules_list += ` selected` } modules_list += `>Pages</option>` modules_list += `<option value="1"` if (*wrap.Config).Engine.MainModule == 1 { modules_list += ` selected` } modules_list += `>Blog</option>` modules_list += `<option value="2"` if (*wrap.Config).Engine.MainModule == 2 { modules_list += ` selected` } modules_list += `>Shop</option>` modules_list += `</select>` return `<div class="form-group n3">` + `<div class="row">` + `<div class="col-md-3">` + `<label for="lbl_module-at-home">Module at home page</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + modules_list + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKCheckBox, Caption: "Maintenance", Name: "maintenance", Value: utils.IntToStr((*wrap.Config).Engine.Maintenance), Hint: "Close web site for maintenance", }, { Kind: builder.DFKCheckBox, Caption: "Blog is enabled", Name: "mod-enabled-blog", Value: utils.IntToStr((*wrap.Config).Modules.Enabled.Blog), Hint: "Module can be enabled or fully disabled", }, { Kind: builder.DFKCheckBox, Caption: "Shop is enabled", Name: "mod-enabled-shop", Value: utils.IntToStr((*wrap.Config).Modules.Enabled.Shop), Hint: "Module can be enabled or fully disabled", }, { Kind: builder.DFKSubmit, Value: "Save", Target: "add-edit-button", }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "robots-txt" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "Robots.txt"}, }) fcont := []byte(``) fcont, _ = ioutil.ReadFile(wrap.DTemplate + string(os.PathSeparator) + "robots.txt") content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-robots-txt", }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { return `<div class="form-group last"><div class="row"><div class="col-12"><textarea class="form-control autosize" id="lbl_content" name="content" placeholder="" autocomplete="off">` + html.EscapeString(string(fcont)) + `</textarea></div></div></div>` }, }, { Kind: builder.DFKSubmit, CallBack: func(field *builder.DataFormField) string { return `<div class="row d-lg-none"><div class="col-12"><div class="pt-3"><button type="submit" class="btn btn-primary" data-target="add-edit-button">Save</button></div></div></div>` }, }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "pagination" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "Pagination"}, }) content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-pagination", }, { Kind: builder.DFKNumber, Caption: "Blog main page", Name: "blog-index", Min: "1", Max: "100", Required: true, Value: utils.IntToStr((*wrap.Config).Blog.Pagination.Index), }, { Kind: builder.DFKNumber, Caption: "Blog category page", Name: "blog-category", Min: "1", Max: "100", Required: true, Value: utils.IntToStr((*wrap.Config).Blog.Pagination.Category), }, { Kind: builder.DFKText, Caption: "", Name: "", Value: "", CallBack: func(field *builder.DataFormField) string { return `<hr>` }, }, { Kind: builder.DFKNumber, Caption: "Shop main page", Name: "shop-index", Min: "1", Max: "100", Required: true, Value: utils.IntToStr((*wrap.Config).Shop.Pagination.Index), }, { Kind: builder.DFKNumber, Caption: "Shop category page", Name: "shop-category", Min: "1", Max: "100", Required: true, Value: utils.IntToStr((*wrap.Config).Shop.Pagination.Category), }, { Kind: builder.DFKSubmit, Value: "Save", Target: "add-edit-button", }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "thumbnails" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "Thumbnails"}, }) content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-thumbnails", }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { resize_list := `` resize_list += `<select class="form-control" name="shop-thumbnail-r-1">` resize_list += `<option value="0"` if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 0 { resize_list += ` selected` } resize_list += `>Crop</option>` resize_list += `<option value="1"` if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 1 { resize_list += ` selected` } resize_list += `>Resize</option>` resize_list += `<option value="2"` if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 2 { resize_list += ` selected` } resize_list += `>Fit into size</option>` resize_list += `</select>` return `<div class="form-group n3">` + `<div class="row">` + `<div class="col-md-3">` + `<label>Shop thumbnail 1</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + `<div class="row">` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-w-1" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.Thumbnail1[0]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-h-1" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.Thumbnail1[1]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-6">` + resize_list + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { resize_list := `` resize_list += `<select class="form-control" name="shop-thumbnail-r-2">` resize_list += `<option value="0"` if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 0 { resize_list += ` selected` } resize_list += `>Crop</option>` resize_list += `<option value="1"` if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 1 { resize_list += ` selected` } resize_list += `>Resize</option>` resize_list += `<option value="2"` if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 2 { resize_list += ` selected` } resize_list += `>Fit into size</option>` resize_list += `</select>` return `<div class="form-group n3">` + `<div class="row">` + `<div class="col-md-3">` + `<label>Shop thumbnail 2</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + `<div class="row">` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-w-2" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.Thumbnail2[0]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-h-2" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.Thumbnail2[1]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-6">` + resize_list + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { resize_list := `` resize_list += `<select class="form-control" name="shop-thumbnail-r-3">` resize_list += `<option value="0"` if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 0 { resize_list += ` selected` } resize_list += `>Crop</option>` resize_list += `<option value="1"` if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 1 { resize_list += ` selected` } resize_list += `>Resize</option>` resize_list += `<option value="2"` if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 2 { resize_list += ` selected` } resize_list += `>Fit into size</option>` resize_list += `</select>` return `<div class="form-group n3">` + `<div class="row">` + `<div class="col-md-3">` + `<label>Shop thumbnail 3</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + `<div class="row">` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-w-3" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.Thumbnail3[0]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-h-3" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.Thumbnail3[1]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-6">` + resize_list + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { resize_list := `` resize_list += `<select class="form-control" name="shop-thumbnail-r-full">` resize_list += `<option value="0"` if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 0 { resize_list += ` selected` } resize_list += `>Crop</option>` resize_list += `<option value="1"` if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 1 { resize_list += ` selected` } resize_list += `>Resize</option>` resize_list += `<option value="2"` if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 2 { resize_list += ` selected` } resize_list += `>Fit into size</option>` resize_list += `</select>` return `<div class="form-group n3">` + `<div class="row">` + `<div class="col-md-3">` + `<label>Shop thumbnail full</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + `<div class="row">` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-w-full" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.ThumbnailFull[0]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-3">` + `<div><input class="form-control" type="number" name="shop-thumbnail-h-full" value="` + utils.IntToStr((*wrap.Config).Shop.Thumbnails.ThumbnailFull[1]) + `" min="100" max="1000" placeholder="" autocomplete="off" required></div>` + `<div class="d-md-none mb-3"></div>` + `</div>` + `<div class="col-md-6">` + resize_list + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKSubmit, Value: "Save", Target: "add-edit-button", }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "domains" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "Domains"}, }) fcont := []byte(``) fcont, _ = ioutil.ReadFile(wrap.DConfig + string(os.PathSeparator) + ".domains") content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-domains", }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { return `<div class="form-group last"><div class="row"><div class="col-12"><textarea class="form-control autosize" id="lbl_content" name="content" placeholder="" autocomplete="off">` + html.EscapeString(string(fcont)) + `</textarea></div></div></div>` }, }, { Kind: builder.DFKSubmit, CallBack: func(field *builder.DataFormField) string { return `<div class="row d-lg-none"><div class="col-12"><div class="pt-3"><button type="submit" class="btn btn-primary" data-target="add-edit-button">Save</button></div></div></div>` }, }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "smtp" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "SMTP"}, }) content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-smtp", }, { Kind: builder.DFKText, Caption: "SMTP server host", Name: "smtp-host", Value: (*wrap.Config).SMTP.Host, Hint: "Example: smtp.gmail.com", }, { Kind: builder.DFKNumber, Caption: "SMTP server port", Name: "smtp-port", Min: "0", Max: "9999", Required: true, Value: utils.IntToStr((*wrap.Config).SMTP.Port), Hint: "Example: 587", }, { Kind: builder.DFKText, Caption: "SMTP user login", Name: "smtp-login", Value: (*wrap.Config).SMTP.Login, Hint: "Example: example@gmail.com", }, { Kind: builder.DFKPassword, Caption: "SMTP user password", Name: "smtp-password", Value: "", Hint: "Leave this field empty if you don't want change password", }, { Kind: builder.DFKText, Caption: "Email address for testing", Name: "smtp-test-email", Value: "", Hint: "To this email address will be send test email message if settings are correct", }, { Kind: builder.DFKSubmit, Value: "Save", Target: "add-edit-button", }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "shop" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "Shop"}, }) content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-shop", }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { price_format_list := `` price_format_list += `<select class="form-control" id="lbl_price-fomat" name="price-fomat">` price_format_list += `<option value="0"` if (*wrap.Config).Shop.Price.Format == 0 { price_format_list += ` selected` } price_format_list += `>100</option>` price_format_list += `<option value="1"` if (*wrap.Config).Shop.Price.Format == 1 { price_format_list += ` selected` } price_format_list += `>100.0</option>` price_format_list += `<option value="2"` if (*wrap.Config).Shop.Price.Format == 2 { price_format_list += ` selected` } price_format_list += `>100.00</option>` price_format_list += `<option value="3"` if (*wrap.Config).Shop.Price.Format == 3 { price_format_list += ` selected` } price_format_list += `>100.000</option>` price_format_list += `<option value="4"` if (*wrap.Config).Shop.Price.Format == 4 { price_format_list += ` selected` } price_format_list += `>100.0000</option>` price_format_list += `</select>` price_round_list := `` price_round_list += `<select class="form-control" id="lbl_price-round" name="price-round">` price_round_list += `<option value="0"` if (*wrap.Config).Shop.Price.Round == 0 { price_round_list += ` selected` } price_round_list += `>Don't round</option>` price_round_list += `<option value="1"` if (*wrap.Config).Shop.Price.Round == 1 { price_round_list += ` selected` } price_round_list += `>Round to ceil</option>` price_round_list += `<option value="2"` if (*wrap.Config).Shop.Price.Round == 2 { price_round_list += ` selected` } price_round_list += `>Round to floor</option>` price_round_list += `</select>` return `<div class="form-group n2">` + `<div class="row">` + `<div class="col-md-3">` + `<label for="lbl_price-fomat">Price format</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + price_format_list + `</div>` + `</div>` + `</div>` + `</div>` + `<div class="form-group n3">` + `<div class="row">` + `<div class="col-md-3">` + `<label for="lbl_price-round">Price round</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + price_round_list + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKText, CallBack: func(field *builder.DataFormField) string { make_checkbox := func(name, caption string, value int) string { checked := "" if value > 0 { checked = " checked" } return `<div class="checkbox-clickable"><input class="form-control" type="checkbox" id="lbl_` + name + `" name="` + name + `" value="1" "="" autocomplete="off"` + checked + `><label for="lbl_` + name + `">` + caption + `</label></div>` } checkboxes := "" checkboxes += make_checkbox("require-last-name", "Last Name", (*wrap.Config).Shop.Orders.RequiredFields.LastName) checkboxes += make_checkbox("require-first-name", "First Name", (*wrap.Config).Shop.Orders.RequiredFields.FirstName) checkboxes += make_checkbox("require-middle-name", "Middle Name", (*wrap.Config).Shop.Orders.RequiredFields.MiddleName) checkboxes += make_checkbox("require-mobile-phone", "Mobile Phone", (*wrap.Config).Shop.Orders.RequiredFields.MobilePhone) checkboxes += make_checkbox("require-email-address", "Email Address", (*wrap.Config).Shop.Orders.RequiredFields.EmailAddress) checkboxes += make_checkbox("require-delivery", "Delivery", (*wrap.Config).Shop.Orders.RequiredFields.Delivery) checkboxes += make_checkbox("require-comment", "Comment", (*wrap.Config).Shop.Orders.RequiredFields.Comment) return `<div class="form-group n4">` + `<div class="row">` + `<div class="col-md-3">` + `<label for="lbl_price-fomat">Order require fields</label>` + `</div>` + `<div class="col-md-9">` + `<div>` + checkboxes + `</div>` + `</div>` + `</div>` + `</div>` }, }, { Kind: builder.DFKCheckBox, Caption: "Accept orders", Name: "accept-orders", Value: utils.IntToStr((*wrap.Config).Shop.Orders.Enabled), }, { Kind: builder.DFKText, Caption: "New order notify email", Name: "new-order-notify-email", Value: (*wrap.Config).Shop.Orders.NotifyEmail, Hint: "Example: example@gmail.com", }, { Kind: builder.DFKText, Caption: "New order email theme (CP)", Name: "new-order-email-theme-cp", Value: (*wrap.Config).Shop.Orders.NewOrderEmailThemeCp, }, { Kind: builder.DFKText, Caption: "New order email theme (User)", Name: "new-order-email-theme-user", Value: (*wrap.Config).Shop.Orders.NewOrderEmailThemeUser, }, { Kind: builder.DFKCheckBox, Caption: "Custom field 1 enabled", Name: "custom-field-1-enabled", Value: utils.IntToStr((*wrap.Config).Shop.CustomFields.Field1.Enabled), }, { Kind: builder.DFKText, Caption: "Custom field 1 caption", Name: "custom-field-1-caption", Value: (*wrap.Config).Shop.CustomFields.Field1.Caption, Hint: "Caption for product custom field", }, { Kind: builder.DFKCheckBox, Caption: "Custom field 2 enabled", Name: "custom-field-2-enabled", Value: utils.IntToStr((*wrap.Config).Shop.CustomFields.Field2.Enabled), }, { Kind: builder.DFKText, Caption: "Custom field 2 caption", Name: "custom-field-2-caption", Value: (*wrap.Config).Shop.CustomFields.Field2.Caption, Hint: "Caption for product custom field", }, { Kind: builder.DFKSubmit, Value: "Save", Target: "add-edit-button", }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } else if wrap.CurrSubModule == "api" { content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{ {Name: "API"}, }) content += builder.DataForm(wrap, []builder.DataFormField{ { Kind: builder.DFKHidden, Name: "action", Value: "settings-api", }, { Kind: builder.DFKCheckBox, Caption: "XML enabled", Name: "xml-enabled", Value: utils.IntToStr((*wrap.Config).API.XML.Enabled), Hint: "XML: <a href=\"/api/products/\" target=\"_blank\">/api/products/</a>", }, { Kind: builder.DFKText, Caption: "XML name", Name: "xml-name", Value: (*wrap.Config).API.XML.Name, }, { Kind: builder.DFKText, Caption: "XML company", Name: "xml-company", Value: (*wrap.Config).API.XML.Company, }, { Kind: builder.DFKText, Caption: "XML url", Name: "xml-url", Value: (*wrap.Config).API.XML.Url, }, { Kind: builder.DFKSubmit, Value: "Save", Target: "add-edit-button", }, }) sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>` } return this.getSidebarModules(wrap), content, sidebar }) }