module_settings.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  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: "General", Show: true, Icon: assets.SysSvgIconGear},
  22. {Mount: "robots-txt", Name: "Robots.txt", Show: true, Icon: assets.SysSvgIconBug},
  23. {Mount: "pagination", Name: "Pagination", Show: true, Icon: assets.SysSvgIconList},
  24. {Mount: "thumbnails", Name: "Thumbnails", Show: true, Icon: assets.SysSvgIconList},
  25. {Mount: "api", Name: "API", Show: true, Icon: assets.SysSvgIconList},
  26. },
  27. }, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
  28. content := ""
  29. sidebar := ""
  30. if wrap.CurrSubModule == "" || wrap.CurrSubModule == "default" {
  31. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  32. {Name: "General"},
  33. })
  34. content += builder.DataForm(wrap, []builder.DataFormField{
  35. {
  36. Kind: builder.DFKHidden,
  37. Name: "action",
  38. Value: "settings-general",
  39. },
  40. {
  41. Kind: builder.DFKText,
  42. CallBack: func(field *builder.DataFormField) string {
  43. modules_list := ``
  44. modules_list += `<select class="form-control" id="lbl_module-at-home" name="module-at-home">`
  45. modules_list += `<option value="0"`
  46. if (*wrap.Config).Engine.MainModule == 0 {
  47. modules_list += ` selected`
  48. }
  49. modules_list += `>Pages</option>`
  50. modules_list += `<option value="1"`
  51. if (*wrap.Config).Engine.MainModule == 1 {
  52. modules_list += ` selected`
  53. }
  54. modules_list += `>Blog</option>`
  55. modules_list += `<option value="2"`
  56. if (*wrap.Config).Engine.MainModule == 2 {
  57. modules_list += ` selected`
  58. }
  59. modules_list += `>Shop</option>`
  60. modules_list += `</select>`
  61. return `<div class="form-group n3">` +
  62. `<div class="row">` +
  63. `<div class="col-md-3">` +
  64. `<label for="lbl_module-at-home">Module at home page</label>` +
  65. `</div>` +
  66. `<div class="col-md-9">` +
  67. `<div>` +
  68. modules_list +
  69. `</div>` +
  70. `</div>` +
  71. `</div>` +
  72. `</div>`
  73. },
  74. },
  75. {
  76. Kind: builder.DFKSubmit,
  77. Value: "Save",
  78. Target: "add-edit-button",
  79. },
  80. })
  81. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  82. } else if wrap.CurrSubModule == "robots-txt" {
  83. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  84. {Name: "Robots.txt"},
  85. })
  86. fcont := []byte(``)
  87. fcont, _ = ioutil.ReadFile(wrap.DTemplate + string(os.PathSeparator) + "robots.txt")
  88. content += builder.DataForm(wrap, []builder.DataFormField{
  89. {
  90. Kind: builder.DFKHidden,
  91. Name: "action",
  92. Value: "settings-robots-txt",
  93. },
  94. {
  95. Kind: builder.DFKText,
  96. CallBack: func(field *builder.DataFormField) string {
  97. 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>`
  98. },
  99. },
  100. {
  101. Kind: builder.DFKSubmit,
  102. CallBack: func(field *builder.DataFormField) string {
  103. 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>`
  104. },
  105. },
  106. })
  107. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  108. } else if wrap.CurrSubModule == "pagination" {
  109. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  110. {Name: "Pagination"},
  111. })
  112. content += builder.DataForm(wrap, []builder.DataFormField{
  113. {
  114. Kind: builder.DFKHidden,
  115. Name: "action",
  116. Value: "settings-pagination",
  117. },
  118. {
  119. Kind: builder.DFKNumber,
  120. Caption: "Blog main page",
  121. Name: "blog-index",
  122. Min: "1",
  123. Max: "100",
  124. Required: true,
  125. Value: utils.IntToStr((*wrap.Config).Blog.Pagination.Index),
  126. },
  127. {
  128. Kind: builder.DFKNumber,
  129. Caption: "Blog category page",
  130. Name: "blog-category",
  131. Min: "1",
  132. Max: "100",
  133. Required: true,
  134. Value: utils.IntToStr((*wrap.Config).Blog.Pagination.Category),
  135. },
  136. {
  137. Kind: builder.DFKText,
  138. Caption: "",
  139. Name: "",
  140. Value: "",
  141. CallBack: func(field *builder.DataFormField) string {
  142. return `<hr>`
  143. },
  144. },
  145. {
  146. Kind: builder.DFKNumber,
  147. Caption: "Shop main page",
  148. Name: "shop-index",
  149. Min: "1",
  150. Max: "100",
  151. Required: true,
  152. Value: utils.IntToStr((*wrap.Config).Shop.Pagination.Index),
  153. },
  154. {
  155. Kind: builder.DFKNumber,
  156. Caption: "Shop category page",
  157. Name: "shop-category",
  158. Min: "1",
  159. Max: "100",
  160. Required: true,
  161. Value: utils.IntToStr((*wrap.Config).Shop.Pagination.Category),
  162. },
  163. {
  164. Kind: builder.DFKSubmit,
  165. Value: "Save",
  166. Target: "add-edit-button",
  167. },
  168. })
  169. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  170. } else if wrap.CurrSubModule == "thumbnails" {
  171. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  172. {Name: "Thumbnails"},
  173. })
  174. content += builder.DataForm(wrap, []builder.DataFormField{
  175. {
  176. Kind: builder.DFKHidden,
  177. Name: "action",
  178. Value: "settings-thumbnails",
  179. },
  180. {
  181. Kind: builder.DFKText,
  182. CallBack: func(field *builder.DataFormField) string {
  183. resize_list := ``
  184. resize_list += `<select class="form-control" name="shop-thumbnail-r-1">`
  185. resize_list += `<option value="0"`
  186. if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 0 {
  187. resize_list += ` selected`
  188. }
  189. resize_list += `>Crop</option>`
  190. resize_list += `<option value="1"`
  191. if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 1 {
  192. resize_list += ` selected`
  193. }
  194. resize_list += `>Resize</option>`
  195. resize_list += `<option value="2"`
  196. if (*wrap.Config).Shop.Thumbnails.Thumbnail1[2] == 2 {
  197. resize_list += ` selected`
  198. }
  199. resize_list += `>Fit into size</option>`
  200. resize_list += `</select>`
  201. return `<div class="form-group n3">` +
  202. `<div class="row">` +
  203. `<div class="col-md-3">` +
  204. `<label>Shop thumbnail 1</label>` +
  205. `</div>` +
  206. `<div class="col-md-9">` +
  207. `<div>` +
  208. `<div class="row">` +
  209. `<div class="col-md-3">` +
  210. `<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>` +
  211. `<div class="d-md-none mb-3"></div>` +
  212. `</div>` +
  213. `<div class="col-md-3">` +
  214. `<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>` +
  215. `<div class="d-md-none mb-3"></div>` +
  216. `</div>` +
  217. `<div class="col-md-6">` +
  218. resize_list +
  219. `</div>` +
  220. `</div>` +
  221. `</div>` +
  222. `</div>` +
  223. `</div>` +
  224. `</div>`
  225. },
  226. },
  227. {
  228. Kind: builder.DFKText,
  229. CallBack: func(field *builder.DataFormField) string {
  230. resize_list := ``
  231. resize_list += `<select class="form-control" name="shop-thumbnail-r-2">`
  232. resize_list += `<option value="0"`
  233. if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 0 {
  234. resize_list += ` selected`
  235. }
  236. resize_list += `>Crop</option>`
  237. resize_list += `<option value="1"`
  238. if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 1 {
  239. resize_list += ` selected`
  240. }
  241. resize_list += `>Resize</option>`
  242. resize_list += `<option value="2"`
  243. if (*wrap.Config).Shop.Thumbnails.Thumbnail2[2] == 2 {
  244. resize_list += ` selected`
  245. }
  246. resize_list += `>Fit into size</option>`
  247. resize_list += `</select>`
  248. return `<div class="form-group n3">` +
  249. `<div class="row">` +
  250. `<div class="col-md-3">` +
  251. `<label>Shop thumbnail 2</label>` +
  252. `</div>` +
  253. `<div class="col-md-9">` +
  254. `<div>` +
  255. `<div class="row">` +
  256. `<div class="col-md-3">` +
  257. `<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>` +
  258. `<div class="d-md-none mb-3"></div>` +
  259. `</div>` +
  260. `<div class="col-md-3">` +
  261. `<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>` +
  262. `<div class="d-md-none mb-3"></div>` +
  263. `</div>` +
  264. `<div class="col-md-6">` +
  265. resize_list +
  266. `</div>` +
  267. `</div>` +
  268. `</div>` +
  269. `</div>` +
  270. `</div>` +
  271. `</div>`
  272. },
  273. },
  274. {
  275. Kind: builder.DFKText,
  276. CallBack: func(field *builder.DataFormField) string {
  277. resize_list := ``
  278. resize_list += `<select class="form-control" name="shop-thumbnail-r-3">`
  279. resize_list += `<option value="0"`
  280. if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 0 {
  281. resize_list += ` selected`
  282. }
  283. resize_list += `>Crop</option>`
  284. resize_list += `<option value="1"`
  285. if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 1 {
  286. resize_list += ` selected`
  287. }
  288. resize_list += `>Resize</option>`
  289. resize_list += `<option value="2"`
  290. if (*wrap.Config).Shop.Thumbnails.Thumbnail3[2] == 2 {
  291. resize_list += ` selected`
  292. }
  293. resize_list += `>Fit into size</option>`
  294. resize_list += `</select>`
  295. return `<div class="form-group n3">` +
  296. `<div class="row">` +
  297. `<div class="col-md-3">` +
  298. `<label>Shop thumbnail 3</label>` +
  299. `</div>` +
  300. `<div class="col-md-9">` +
  301. `<div>` +
  302. `<div class="row">` +
  303. `<div class="col-md-3">` +
  304. `<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>` +
  305. `<div class="d-md-none mb-3"></div>` +
  306. `</div>` +
  307. `<div class="col-md-3">` +
  308. `<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>` +
  309. `<div class="d-md-none mb-3"></div>` +
  310. `</div>` +
  311. `<div class="col-md-6">` +
  312. resize_list +
  313. `</div>` +
  314. `</div>` +
  315. `</div>` +
  316. `</div>` +
  317. `</div>` +
  318. `</div>`
  319. },
  320. },
  321. {
  322. Kind: builder.DFKText,
  323. CallBack: func(field *builder.DataFormField) string {
  324. resize_list := ``
  325. resize_list += `<select class="form-control" name="shop-thumbnail-r-full">`
  326. resize_list += `<option value="0"`
  327. if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 0 {
  328. resize_list += ` selected`
  329. }
  330. resize_list += `>Crop</option>`
  331. resize_list += `<option value="1"`
  332. if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 1 {
  333. resize_list += ` selected`
  334. }
  335. resize_list += `>Resize</option>`
  336. resize_list += `<option value="2"`
  337. if (*wrap.Config).Shop.Thumbnails.ThumbnailFull[2] == 2 {
  338. resize_list += ` selected`
  339. }
  340. resize_list += `>Fit into size</option>`
  341. resize_list += `</select>`
  342. return `<div class="form-group n3">` +
  343. `<div class="row">` +
  344. `<div class="col-md-3">` +
  345. `<label>Shop thumbnail full</label>` +
  346. `</div>` +
  347. `<div class="col-md-9">` +
  348. `<div>` +
  349. `<div class="row">` +
  350. `<div class="col-md-3">` +
  351. `<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>` +
  352. `<div class="d-md-none mb-3"></div>` +
  353. `</div>` +
  354. `<div class="col-md-3">` +
  355. `<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>` +
  356. `<div class="d-md-none mb-3"></div>` +
  357. `</div>` +
  358. `<div class="col-md-6">` +
  359. resize_list +
  360. `</div>` +
  361. `</div>` +
  362. `</div>` +
  363. `</div>` +
  364. `</div>` +
  365. `</div>`
  366. },
  367. },
  368. {
  369. Kind: builder.DFKSubmit,
  370. Value: "Save",
  371. Target: "add-edit-button",
  372. },
  373. })
  374. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  375. } else if wrap.CurrSubModule == "api" {
  376. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  377. {Name: "API"},
  378. })
  379. content += builder.DataForm(wrap, []builder.DataFormField{
  380. {
  381. Kind: builder.DFKHidden,
  382. Name: "action",
  383. Value: "settings-api",
  384. },
  385. {
  386. Kind: builder.DFKCheckBox,
  387. Caption: "XML enabled",
  388. Name: "xml-enabled",
  389. Value: utils.IntToStr((*wrap.Config).API.XML.Enabled),
  390. Hint: "XML: <a href=\"/api/products/\" target=\"_blank\">/api/products/</a>",
  391. },
  392. {
  393. Kind: builder.DFKText,
  394. Caption: "XML name",
  395. Name: "xml-name",
  396. Value: (*wrap.Config).API.XML.Name,
  397. },
  398. {
  399. Kind: builder.DFKText,
  400. Caption: "XML company",
  401. Name: "xml-company",
  402. Value: (*wrap.Config).API.XML.Company,
  403. },
  404. {
  405. Kind: builder.DFKText,
  406. Caption: "XML url",
  407. Name: "xml-url",
  408. Value: (*wrap.Config).API.XML.Url,
  409. },
  410. {
  411. Kind: builder.DFKSubmit,
  412. Value: "Save",
  413. Target: "add-edit-button",
  414. },
  415. })
  416. sidebar += `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
  417. }
  418. return this.getSidebarModules(wrap), content, sidebar
  419. })
  420. }