module_notify_mail.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package modules
  2. import (
  3. "html"
  4. "golang-fave/engine/assets"
  5. "golang-fave/engine/builder"
  6. "golang-fave/engine/consts"
  7. "golang-fave/engine/sqlw"
  8. "golang-fave/engine/utils"
  9. "golang-fave/engine/wrapper"
  10. )
  11. func (this *Modules) RegisterModule_NotifyMail() *Module {
  12. return this.newModule(MInfo{
  13. WantDB: true,
  14. Mount: "notify-mail",
  15. Name: "Mail notifier",
  16. Order: 803,
  17. System: true,
  18. Icon: assets.SysSvgIconEmail,
  19. Sub: &[]MISub{
  20. {Mount: "default", Name: "All", Show: true, Icon: assets.SysSvgIconList},
  21. {Mount: "success", Name: "Success", Show: true, Icon: assets.SysSvgIconList},
  22. {Mount: "in-progress", Name: "In progress", Show: true, Icon: assets.SysSvgIconList},
  23. {Mount: "error", Name: "Error", Show: true, Icon: assets.SysSvgIconList},
  24. },
  25. }, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
  26. content := ""
  27. sidebar := ""
  28. if wrap.CurrSubModule == "" || wrap.CurrSubModule == "default" || wrap.CurrSubModule == "success" || wrap.CurrSubModule == "in-progress" || wrap.CurrSubModule == "error" {
  29. ModuleName := "All"
  30. ModulePagination := "/cp/" + wrap.CurrModule + "/"
  31. ModuleSqlWhere := ""
  32. if wrap.CurrSubModule == "success" {
  33. ModuleName = "Success"
  34. ModulePagination = "/cp/" + wrap.CurrModule + "/success/"
  35. ModuleSqlWhere = " WHERE fave_notify_mail.status = 1"
  36. } else if wrap.CurrSubModule == "in-progress" {
  37. ModuleName = "In progress"
  38. ModulePagination = "/cp/" + wrap.CurrModule + "/in-progress/"
  39. ModuleSqlWhere = " WHERE fave_notify_mail.status = 2 OR fave_notify_mail.status = 3"
  40. } else if wrap.CurrSubModule == "error" {
  41. ModuleName = "Error"
  42. ModulePagination = "/cp/" + wrap.CurrModule + "/error/"
  43. ModuleSqlWhere = " WHERE fave_notify_mail.status = 0"
  44. }
  45. content += this.getBreadCrumbs(wrap, &[]consts.BreadCrumb{
  46. {Name: ModuleName},
  47. })
  48. content += builder.DataTable(
  49. wrap,
  50. "fave_notify_mail",
  51. "id",
  52. "DESC",
  53. &[]builder.DataTableRow{
  54. {
  55. DBField: "id",
  56. },
  57. {
  58. DBField: "email",
  59. NameInTable: "Email / Subject",
  60. CallBack: func(values *[]string) string {
  61. subject := html.EscapeString((*values)[2])
  62. if subject != "" {
  63. subject = `<div><small>` + subject + `</small></div>`
  64. }
  65. error_message := html.EscapeString((*values)[5])
  66. if error_message != "" {
  67. error_message = `<div><small><b>` + error_message + `</b></small></div>`
  68. }
  69. return `<div>` + html.EscapeString((*values)[1]) + `</div>` + subject + error_message
  70. },
  71. },
  72. {
  73. DBField: "subject",
  74. },
  75. {
  76. DBField: "datetime",
  77. DBExp: "UNIX_TIMESTAMP(`datetime`)",
  78. NameInTable: "Date / Time",
  79. Classes: "d-none d-md-table-cell",
  80. CallBack: func(values *[]string) string {
  81. t := int64(utils.StrToInt((*values)[3]))
  82. return `<div>` + utils.UnixTimestampToFormat(t, "02.01.2006") + `</div>` +
  83. `<div><small>` + utils.UnixTimestampToFormat(t, "15:04:05") + `</small></div>`
  84. },
  85. },
  86. {
  87. DBField: "status",
  88. NameInTable: "Status",
  89. Classes: "d-none d-sm-table-cell",
  90. CallBack: func(values *[]string) string {
  91. return builder.CheckBox(utils.StrToInt((*values)[4]))
  92. },
  93. },
  94. {
  95. DBField: "error",
  96. },
  97. },
  98. nil,
  99. ModulePagination,
  100. func() (int, error) {
  101. var count int
  102. return count, wrap.DB.QueryRow(
  103. wrap.R.Context(),
  104. "SELECT COUNT(*) FROM `fave_notify_mail`"+ModuleSqlWhere+";",
  105. ).Scan(&count)
  106. },
  107. func(limit_offset int, pear_page int) (*sqlw.Rows, error) {
  108. return wrap.DB.Query(
  109. wrap.R.Context(),
  110. `SELECT
  111. fave_notify_mail.id,
  112. fave_notify_mail.email,
  113. fave_notify_mail.subject,
  114. UNIX_TIMESTAMP(`+"`fave_notify_mail`.`datetime`"+`) AS datetime,
  115. fave_notify_mail.status,
  116. fave_notify_mail.error
  117. FROM
  118. fave_notify_mail
  119. `+ModuleSqlWhere+`
  120. ORDER BY
  121. fave_notify_mail.id DESC
  122. LIMIT ?, ?;`,
  123. limit_offset,
  124. pear_page,
  125. )
  126. },
  127. true,
  128. )
  129. }
  130. return this.getSidebarModules(wrap), content, sidebar
  131. })
  132. }