TemplateController.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package controllers
  2. import (
  3. "errors"
  4. "strings"
  5. "github.com/beego/beego/v2/client/orm"
  6. "github.com/beego/i18n"
  7. "github.com/mindoc-org/mindoc/conf"
  8. "github.com/mindoc-org/mindoc/models"
  9. )
  10. type TemplateController struct {
  11. BaseController
  12. BookId int
  13. }
  14. func (c *TemplateController) isPermission() error {
  15. c.Prepare()
  16. bookIdentify := c.GetString("identify", "")
  17. if bookIdentify == "" {
  18. return errors.New(i18n.Tr(c.Lang, "message.param_error"))
  19. }
  20. if !c.Member.IsAdministrator() {
  21. book, err := models.NewBookResult().FindByIdentify(bookIdentify, c.Member.MemberId)
  22. if err != nil {
  23. if err == orm.ErrNoRows {
  24. return errors.New("项目不存在或没有权限")
  25. }
  26. return errors.New("查询项目模板失败")
  27. }
  28. c.BookId = book.BookId
  29. } else {
  30. book, err := models.NewBook().FindByIdentify(bookIdentify, "book_id")
  31. if err != nil {
  32. if err == orm.ErrNoRows {
  33. return errors.New("项目不存在或没有权限")
  34. }
  35. return errors.New("查询项目模板失败")
  36. }
  37. c.BookId = book.BookId
  38. }
  39. return nil
  40. }
  41. //获取指定模板信息
  42. func (c *TemplateController) Get() {
  43. if err := c.isPermission(); err != nil {
  44. c.JsonResult(500, err.Error())
  45. }
  46. templateId, _ := c.GetInt("template_id", 0)
  47. template, err := models.NewTemplate().Find(templateId)
  48. if err != nil {
  49. c.JsonResult(500, "读取模板失败")
  50. }
  51. if template.IsGlobal == 0 && template.BookId != c.BookId {
  52. c.JsonResult(404, "模板不存在或已删除")
  53. }
  54. c.JsonResult(0, "OK", template)
  55. }
  56. //获取模板列表
  57. func (c *TemplateController) List() {
  58. c.TplName = "template/list.tpl"
  59. if err := c.isPermission(); err != nil {
  60. c.Data["ErrorMessage"] = err.Error()
  61. return
  62. }
  63. templateList, err := models.NewTemplate().FindAllByBookId(c.BookId)
  64. if err != nil && err != orm.ErrNoRows {
  65. c.Data["ErrorMessage"] = "查询项目模板失败"
  66. }
  67. if templateList != nil {
  68. for i, t := range templateList {
  69. templateList[i] = t.Preload()
  70. }
  71. }
  72. //c.JsonResult(0,"OK",templateList)
  73. c.Data["List"] = templateList
  74. }
  75. //添加模板
  76. func (c *TemplateController) Add() {
  77. if err := c.isPermission(); err != nil {
  78. c.JsonResult(500, err.Error())
  79. }
  80. templateId, _ := c.GetInt("template_id", 0)
  81. content := c.GetString("content")
  82. isGlobal, _ := c.GetInt("is_global", 0)
  83. templateName := c.GetString("template_name", "")
  84. if templateName == "" || strings.Count(templateName, "") > 300 {
  85. c.JsonResult(500, "模板名称不能为空且必须小于300字")
  86. }
  87. template := models.NewTemplate()
  88. if templateId > 0 {
  89. t, err := template.Find(templateId)
  90. if err != nil {
  91. c.JsonResult(500, "模板不存在")
  92. }
  93. template = t
  94. template.ModifyAt = c.Member.MemberId
  95. }
  96. template.TemplateId = templateId
  97. template.BookId = c.BookId
  98. template.TemplateContent = content
  99. template.TemplateName = templateName
  100. //只有管理员才能设置全局模板
  101. if c.Member.IsAdministrator() {
  102. template.IsGlobal = isGlobal
  103. } else {
  104. template.IsGlobal = 0
  105. //如果不是管理员需要判断是否有项目权限
  106. rel, err := models.NewRelationship().FindByBookIdAndMemberId(c.BookId, c.Member.MemberId)
  107. if err != nil || rel.RoleId == conf.BookObserver {
  108. c.JsonResult(403, "没有权限")
  109. }
  110. //如果修改的模板不是本人创建的,并且又不是项目创建者则禁止修改
  111. if template.MemberId > 0 && template.MemberId != c.Member.MemberId && rel.RoleId != conf.BookFounder {
  112. c.JsonResult(403, "没有权限")
  113. }
  114. }
  115. template.MemberId = c.Member.MemberId
  116. var cols []string
  117. if templateId > 0 {
  118. cols = []string{"template_content", "modify_time", "modify_at", "version"}
  119. }
  120. if err := template.Save(cols...); err != nil {
  121. c.JsonResult(500, "报错模板失败")
  122. }
  123. c.JsonResult(0, "OK", template)
  124. }
  125. //删除模板
  126. func (c *TemplateController) Delete() {
  127. if err := c.isPermission(); err != nil {
  128. c.JsonResult(500, err.Error())
  129. }
  130. templateId, _ := c.GetInt("template_id", 0)
  131. template, err := models.NewTemplate().Find(templateId)
  132. if err != nil {
  133. c.JsonResult(404, "模板不存在")
  134. }
  135. if c.Member.IsAdministrator() {
  136. err := models.NewTemplate().Delete(templateId, 0)
  137. if err != nil {
  138. c.JsonResult(500, "删除失败")
  139. }
  140. } else {
  141. //如果不是管理员需要判断是否有项目权限
  142. rel, err := models.NewRelationship().FindByBookIdAndMemberId(template.BookId, c.Member.MemberId)
  143. if err != nil || rel.RoleId == conf.BookObserver {
  144. c.JsonResult(403, "没有权限")
  145. }
  146. //如果是创始人或管理者可以直接删除模板
  147. if rel.RoleId == conf.BookFounder || rel.RoleId == conf.BookAdmin {
  148. err := models.NewTemplate().Delete(templateId, 0)
  149. if err != nil {
  150. c.JsonResult(500, "删除失败")
  151. }
  152. }
  153. if err := models.NewTemplate().Delete(templateId, c.Member.MemberId); err != nil {
  154. c.JsonResult(500, "删除失败")
  155. }
  156. }
  157. c.JsonResult(0, "OK")
  158. }