module_blog_categories_act_modify.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package modules
  2. import (
  3. "golang-fave/engine/wrapper"
  4. "golang-fave/utils"
  5. )
  6. func (this *Modules) blog_ActionCategoryAdd(wrap *wrapper.Wrapper, pf_id, pf_name, pf_alias, pf_parent string) error {
  7. return wrap.DBTrans(func(tx *wrapper.Tx) error {
  8. if _, err := tx.Exec("SELECT @mr := rgt FROM blog_cats WHERE id = ?;", pf_parent); err != nil {
  9. return err
  10. }
  11. if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + 2 WHERE rgt > @mr;"); err != nil {
  12. return err
  13. }
  14. if _, err := tx.Exec("UPDATE blog_cats SET lft = lft + 2 WHERE lft > @mr;"); err != nil {
  15. return err
  16. }
  17. if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + 2 WHERE id = ?;", pf_parent); err != nil {
  18. return err
  19. }
  20. if _, err := tx.Exec("INSERT INTO blog_cats (id, user, name, alias, lft, rgt) VALUES (NULL, ?, ?, ?, @mr, @mr + 1);", wrap.User.A_id, pf_name, pf_alias); err != nil {
  21. return err
  22. }
  23. return nil
  24. })
  25. }
  26. func (this *Modules) blog_ActionCategoryUpdate(wrap *wrapper.Wrapper, pf_id, pf_name, pf_alias, pf_parent string) error {
  27. parentId := this.blog_GetCategoryParentId(wrap, utils.StrToInt(pf_id))
  28. if utils.StrToInt(pf_parent) == parentId {
  29. // If parent not changed, just update category data
  30. return wrap.DBTrans(func(tx *wrapper.Tx) error {
  31. if _, err := tx.Exec(`
  32. UPDATE blog_cats SET
  33. name = ?,
  34. alias = ?
  35. WHERE
  36. id > 1 AND
  37. id = ?
  38. ;`,
  39. pf_name,
  40. pf_alias,
  41. pf_id,
  42. ); err != nil {
  43. return err
  44. }
  45. return nil
  46. })
  47. }
  48. // Parent is changed, move category to new parent
  49. return wrap.DBTrans(func(tx *wrapper.Tx) error {
  50. // Shift
  51. if _, err := tx.Exec("SELECT @ml := lft, @mr := rgt FROM blog_cats WHERE id = ?;", pf_id); err != nil {
  52. return err
  53. }
  54. if _, err := tx.Exec("UPDATE blog_cats SET lft = 0, rgt = 0 WHERE id = ?;", pf_id); err != nil {
  55. return err
  56. }
  57. if _, err := tx.Exec("UPDATE blog_cats SET lft = lft - 1, rgt = rgt - 1 WHERE lft > @ml AND rgt < @mr;"); err != nil {
  58. return err
  59. }
  60. if _, err := tx.Exec("UPDATE blog_cats SET lft = lft - 2 WHERE lft > @mr;"); err != nil {
  61. return err
  62. }
  63. if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt - 2 WHERE rgt > @mr;"); err != nil {
  64. return err
  65. }
  66. // Update
  67. if _, err := tx.Exec("SELECT @mr := rgt FROM blog_cats WHERE id = ?;", pf_parent); err != nil {
  68. return err
  69. }
  70. if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + 2 WHERE rgt > @mr;"); err != nil {
  71. return err
  72. }
  73. if _, err := tx.Exec("UPDATE blog_cats SET lft = lft + 2 WHERE lft > @mr;"); err != nil {
  74. return err
  75. }
  76. if _, err := tx.Exec("UPDATE blog_cats SET rgt = rgt + 2 WHERE id = ?;", pf_parent); err != nil {
  77. return err
  78. }
  79. if _, err := tx.Exec("UPDATE blog_cats SET name = ?, alias = ?, lft = @mr, rgt = @mr + 1 WHERE id = ?;", pf_name, pf_alias, pf_id); err != nil {
  80. return err
  81. }
  82. return nil
  83. })
  84. }
  85. func (this *Modules) RegisterAction_BlogCategoriesModify() *Action {
  86. return this.newAction(AInfo{
  87. WantDB: true,
  88. Mount: "blog-categories-modify",
  89. WantAdmin: true,
  90. }, func(wrap *wrapper.Wrapper) {
  91. pf_id := wrap.R.FormValue("id")
  92. pf_name := wrap.R.FormValue("name")
  93. pf_alias := wrap.R.FormValue("alias")
  94. pf_parent := wrap.R.FormValue("parent")
  95. if !utils.IsNumeric(pf_id) || !utils.IsNumeric(pf_parent) {
  96. wrap.MsgError(`Inner system error`)
  97. return
  98. }
  99. if pf_name == "" {
  100. wrap.MsgError(`Please specify category name`)
  101. return
  102. }
  103. if pf_alias == "" {
  104. pf_alias = utils.GenerateSingleAlias(pf_name)
  105. }
  106. if !utils.IsValidSingleAlias(pf_alias) {
  107. wrap.MsgError(`Please specify correct category alias`)
  108. return
  109. }
  110. // Set root category as default
  111. if pf_parent == "0" {
  112. pf_parent = "1"
  113. } else {
  114. // Check if parent category exists
  115. var parentId int
  116. err := wrap.DB.QueryRow(`
  117. SELECT
  118. id
  119. FROM
  120. blog_cats
  121. WHERE
  122. id > 1 AND
  123. id = ?
  124. LIMIT 1;`,
  125. pf_parent,
  126. ).Scan(&parentId)
  127. if err != nil {
  128. wrap.MsgError(err.Error())
  129. return
  130. }
  131. }
  132. if pf_id == "0" {
  133. if err := this.blog_ActionCategoryAdd(wrap, pf_id, pf_name, pf_alias, pf_parent); err != nil {
  134. wrap.MsgError(err.Error())
  135. return
  136. }
  137. wrap.Write(`window.location='/cp/blog/categories/';`)
  138. } else {
  139. if err := this.blog_ActionCategoryUpdate(wrap, pf_id, pf_name, pf_alias, pf_parent); err != nil {
  140. wrap.MsgError(err.Error())
  141. return
  142. }
  143. wrap.Write(`window.location='/cp/blog/categories-modify/` + pf_id + `/';`)
  144. }
  145. })
  146. }