module_settings.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. package modules
  2. import (
  3. "html"
  4. "io/ioutil"
  5. "os"
  6. "golang-fave/assets"
  7. "golang-fave/consts"
  8. "golang-fave/engine/builder"
  9. "golang-fave/engine/wrapper"
  10. "golang-fave/utils"
  11. )
  12. func (this *Modules) RegisterModule_Settings() *Module {
  13. return this.newModule(MInfo{
  14. WantDB: false,
  15. Mount: "settings",
  16. Name: "Settings",
  17. Order: 801,
  18. System: true,
  19. Icon: assets.SysSvgIconGear,
  20. Sub: &[]MISub{
  21. {Mount: "default", Name: "Robots.txt", Show: true, Icon: assets.SysSvgIconBug},
  22. {Mount: "pagination", Name: "Pagination", Show: true, Icon: assets.SysSvgIconList},
  23. {Mount: "thumbnails", Name: "Thumbnails", Show: true, Icon: assets.SysSvgIconList},
  24. {Mount: "api", Name: "API", Show: true, Icon: assets.SysSvgIconList},
  25. },
  26. }, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
  27. content := ""
  28. sidebar := ""
  29. if wrap.CurrSubModule == "" || wrap.CurrSubModule == "default" {
  30. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  31. {Name: "Robots.txt"},
  32. })
  33. fcont := []byte(``)
  34. fcont, _ = ioutil.ReadFile(wrap.DTemplate + string(os.PathSeparator) + "robots.txt")
  35. content += builder.DataForm(wrap, []builder.DataFormField{
  36. {
  37. Kind: builder.DFKHidden,
  38. Name: "action",
  39. Value: "settings-robots-txt",
  40. },
  41. {
  42. Kind: builder.DFKText,
  43. CallBack: func(field *builder.DataFormField) string {
  44. 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>`
  45. },
  46. },
  47. {
  48. Kind: builder.DFKSubmit,
  49. CallBack: func(field *builder.DataFormField) string {
  50. 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>`
  51. },
  52. },
  53. })
  54. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  55. } else if wrap.CurrSubModule == "pagination" {
  56. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  57. {Name: "Pagination"},
  58. })
  59. content += builder.DataForm(wrap, []builder.DataFormField{
  60. {
  61. Kind: builder.DFKHidden,
  62. Name: "action",
  63. Value: "settings-pagination",
  64. },
  65. {
  66. Kind: builder.DFKNumber,
  67. Caption: "Blog main page",
  68. Name: "blog-index",
  69. Min: "1",
  70. Max: "100",
  71. Required: true,
  72. Value: utils.IntToStr((*wrap.Config).Blog.Pagination.Index),
  73. },
  74. {
  75. Kind: builder.DFKNumber,
  76. Caption: "Blog category page",
  77. Name: "blog-category",
  78. Min: "1",
  79. Max: "100",
  80. Required: true,
  81. Value: utils.IntToStr((*wrap.Config).Blog.Pagination.Category),
  82. },
  83. {
  84. Kind: builder.DFKText,
  85. Caption: "",
  86. Name: "",
  87. Value: "",
  88. CallBack: func(field *builder.DataFormField) string {
  89. return `<hr>`
  90. },
  91. },
  92. {
  93. Kind: builder.DFKNumber,
  94. Caption: "Shop main page",
  95. Name: "shop-index",
  96. Min: "1",
  97. Max: "100",
  98. Required: true,
  99. Value: utils.IntToStr((*wrap.Config).Shop.Pagination.Index),
  100. },
  101. {
  102. Kind: builder.DFKNumber,
  103. Caption: "Shop category page",
  104. Name: "shop-category",
  105. Min: "1",
  106. Max: "100",
  107. Required: true,
  108. Value: utils.IntToStr((*wrap.Config).Shop.Pagination.Category),
  109. },
  110. {
  111. Kind: builder.DFKSubmit,
  112. Value: "Save",
  113. Target: "add-edit-button",
  114. },
  115. })
  116. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  117. } else if wrap.CurrSubModule == "thumbnails" {
  118. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  119. {Name: "Thumbnails"},
  120. })
  121. content += builder.DataForm(wrap, []builder.DataFormField{
  122. {
  123. Kind: builder.DFKHidden,
  124. Name: "action",
  125. Value: "settings-thumbnails",
  126. },
  127. {
  128. Kind: builder.DFKText,
  129. CallBack: func(field *builder.DataFormField) string {
  130. resize_list := ``
  131. resize_list += `<select class="form-control" name="shop-thumbnail-r-1">`
  132. resize_list += `<option value="0"`
  133. if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 0 {
  134. resize_list += ` selected`
  135. }
  136. resize_list += `>Crop</option>`
  137. resize_list += `<option value="1"`
  138. if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 1 {
  139. resize_list += ` selected`
  140. }
  141. resize_list += `>Resize</option>`
  142. resize_list += `</select>`
  143. return `<div class="form-group n3">` +
  144. `<div class="row">` +
  145. `<div class="col-md-3">` +
  146. `<label for="lbl_price">Shop thumbnail 1</label>` +
  147. `</div>` +
  148. `<div class="col-md-9">` +
  149. `<div>` +
  150. `<div class="row">` +
  151. `<div class="col-md-3">` +
  152. `<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>` +
  153. `<div class="d-md-none mb-3"></div>` +
  154. `</div>` +
  155. `<div class="col-md-3">` +
  156. `<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>` +
  157. `<div class="d-md-none mb-3"></div>` +
  158. `</div>` +
  159. `<div class="col-md-6">` +
  160. resize_list +
  161. `</div>` +
  162. `</div>` +
  163. `</div>` +
  164. `</div>` +
  165. `</div>` +
  166. `</div>`
  167. },
  168. },
  169. {
  170. Kind: builder.DFKText,
  171. CallBack: func(field *builder.DataFormField) string {
  172. resize_list := ``
  173. resize_list += `<select class="form-control" name="shop-thumbnail-r-2">`
  174. resize_list += `<option value="0"`
  175. if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 0 {
  176. resize_list += ` selected`
  177. }
  178. resize_list += `>Crop</option>`
  179. resize_list += `<option value="1"`
  180. if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 1 {
  181. resize_list += ` selected`
  182. }
  183. resize_list += `>Resize</option>`
  184. resize_list += `</select>`
  185. return `<div class="form-group n3">` +
  186. `<div class="row">` +
  187. `<div class="col-md-3">` +
  188. `<label for="lbl_price">Shop thumbnail 2</label>` +
  189. `</div>` +
  190. `<div class="col-md-9">` +
  191. `<div>` +
  192. `<div class="row">` +
  193. `<div class="col-md-3">` +
  194. `<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>` +
  195. `<div class="d-md-none mb-3"></div>` +
  196. `</div>` +
  197. `<div class="col-md-3">` +
  198. `<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>` +
  199. `<div class="d-md-none mb-3"></div>` +
  200. `</div>` +
  201. `<div class="col-md-6">` +
  202. resize_list +
  203. `</div>` +
  204. `</div>` +
  205. `</div>` +
  206. `</div>` +
  207. `</div>` +
  208. `</div>`
  209. },
  210. },
  211. {
  212. Kind: builder.DFKText,
  213. CallBack: func(field *builder.DataFormField) string {
  214. resize_list := ``
  215. resize_list += `<select class="form-control" name="shop-thumbnail-r-3">`
  216. resize_list += `<option value="0"`
  217. if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 0 {
  218. resize_list += ` selected`
  219. }
  220. resize_list += `>Crop</option>`
  221. resize_list += `<option value="1"`
  222. if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 1 {
  223. resize_list += ` selected`
  224. }
  225. resize_list += `>Resize</option>`
  226. resize_list += `</select>`
  227. return `<div class="form-group n3">` +
  228. `<div class="row">` +
  229. `<div class="col-md-3">` +
  230. `<label for="lbl_price">Shop thumbnail 3</label>` +
  231. `</div>` +
  232. `<div class="col-md-9">` +
  233. `<div>` +
  234. `<div class="row">` +
  235. `<div class="col-md-3">` +
  236. `<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>` +
  237. `<div class="d-md-none mb-3"></div>` +
  238. `</div>` +
  239. `<div class="col-md-3">` +
  240. `<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>` +
  241. `<div class="d-md-none mb-3"></div>` +
  242. `</div>` +
  243. `<div class="col-md-6">` +
  244. resize_list +
  245. `</div>` +
  246. `</div>` +
  247. `</div>` +
  248. `</div>` +
  249. `</div>` +
  250. `</div>`
  251. },
  252. },
  253. {
  254. Kind: builder.DFKText,
  255. CallBack: func(field *builder.DataFormField) string {
  256. resize_list := ``
  257. resize_list += `<select class="form-control" name="shop-thumbnail-r-full">`
  258. resize_list += `<option value="0"`
  259. if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 0 {
  260. resize_list += ` selected`
  261. }
  262. resize_list += `>Crop</option>`
  263. resize_list += `<option value="1"`
  264. if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 1 {
  265. resize_list += ` selected`
  266. }
  267. resize_list += `>Resize</option>`
  268. resize_list += `</select>`
  269. return `<div class="form-group n3">` +
  270. `<div class="row">` +
  271. `<div class="col-md-3">` +
  272. `<label for="lbl_price">Shop thumbnail full</label>` +
  273. `</div>` +
  274. `<div class="col-md-9">` +
  275. `<div>` +
  276. `<div class="row">` +
  277. `<div class="col-md-3">` +
  278. `<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>` +
  279. `<div class="d-md-none mb-3"></div>` +
  280. `</div>` +
  281. `<div class="col-md-3">` +
  282. `<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>` +
  283. `<div class="d-md-none mb-3"></div>` +
  284. `</div>` +
  285. `<div class="col-md-6">` +
  286. resize_list +
  287. `</div>` +
  288. `</div>` +
  289. `</div>` +
  290. `</div>` +
  291. `</div>` +
  292. `</div>`
  293. },
  294. },
  295. {
  296. Kind: builder.DFKSubmit,
  297. Value: "Save",
  298. Target: "add-edit-button",
  299. },
  300. })
  301. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  302. } else if wrap.CurrSubModule == "api" {
  303. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  304. {Name: "API"},
  305. })
  306. content += builder.DataForm(wrap, []builder.DataFormField{
  307. {
  308. Kind: builder.DFKHidden,
  309. Name: "action",
  310. Value: "settings-api",
  311. },
  312. {
  313. Kind: builder.DFKCheckBox,
  314. Caption: "XML enabled",
  315. Name: "xml-enabled",
  316. Value: utils.IntToStr((*wrap.Config).API.XML.Enabled),
  317. Hint: "XML: <a href=\"/api/products/\" target=\"_blank\">/api/products/</a>",
  318. },
  319. {
  320. Kind: builder.DFKText,
  321. Caption: "XML name",
  322. Name: "xml-name",
  323. Value: (*wrap.Config).API.XML.Name,
  324. },
  325. {
  326. Kind: builder.DFKText,
  327. Caption: "XML company",
  328. Name: "xml-company",
  329. Value: (*wrap.Config).API.XML.Company,
  330. },
  331. {
  332. Kind: builder.DFKText,
  333. Caption: "XML url",
  334. Name: "xml-url",
  335. Value: (*wrap.Config).API.XML.Url,
  336. },
  337. {
  338. Kind: builder.DFKSubmit,
  339. Value: "Save",
  340. Target: "add-edit-button",
  341. },
  342. })
  343. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  344. }
  345. return this.getSidebarModules(wrap), content, sidebar
  346. })
  347. }