| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | 
							- package controllers
 
- import (
 
- 	"errors"
 
- 	"strings"
 
- 	"github.com/beego/beego/v2/adapter/orm"
 
- 	"github.com/mindoc-org/mindoc/conf"
 
- 	"github.com/mindoc-org/mindoc/models"
 
- )
 
- type TemplateController struct {
 
- 	BaseController
 
- 	BookId int
 
- }
 
- func (c *TemplateController) isPermission() error {
 
- 	c.Prepare()
 
- 	bookIdentify := c.GetString("identify", "")
 
- 	if bookIdentify == "" {
 
- 		return errors.New("参数错误")
 
- 	}
 
- 	if !c.Member.IsAdministrator() {
 
- 		book, err := models.NewBookResult().FindByIdentify(bookIdentify, c.Member.MemberId)
 
- 		if err != nil {
 
- 			if err == orm.ErrNoRows {
 
- 				return errors.New("项目不存在或没有权限")
 
- 			}
 
- 			return errors.New("查询项目模板失败")
 
- 		}
 
- 		c.BookId = book.BookId
 
- 	} else {
 
- 		book, err := models.NewBook().FindByIdentify(bookIdentify, "book_id")
 
- 		if err != nil {
 
- 			if err == orm.ErrNoRows {
 
- 				return errors.New("项目不存在或没有权限")
 
- 			}
 
- 			return errors.New("查询项目模板失败")
 
- 		}
 
- 		c.BookId = book.BookId
 
- 	}
 
- 	return nil
 
- }
 
- //获取指定模板信息
 
- func (c *TemplateController) Get() {
 
- 	if err := c.isPermission(); err != nil {
 
- 		c.JsonResult(500, err.Error())
 
- 	}
 
- 	templateId, _ := c.GetInt("template_id", 0)
 
- 	template, err := models.NewTemplate().Find(templateId)
 
- 	if err != nil {
 
- 		c.JsonResult(500, "读取模板失败")
 
- 	}
 
- 	if template.IsGlobal == 0 && template.BookId != c.BookId {
 
- 		c.JsonResult(404, "模板不存在或已删除")
 
- 	}
 
- 	c.JsonResult(0, "OK", template)
 
- }
 
- //获取模板列表
 
- func (c *TemplateController) List() {
 
- 	c.TplName = "template/list.tpl"
 
- 	if err := c.isPermission(); err != nil {
 
- 		c.Data["ErrorMessage"] = err.Error()
 
- 		return
 
- 	}
 
- 	templateList, err := models.NewTemplate().FindAllByBookId(c.BookId)
 
- 	if err != nil && err != orm.ErrNoRows {
 
- 		c.Data["ErrorMessage"] = "查询项目模板失败"
 
- 	}
 
- 	if templateList != nil {
 
- 		for i, t := range templateList {
 
- 			templateList[i] = t.Preload()
 
- 		}
 
- 	}
 
- 	//c.JsonResult(0,"OK",templateList)
 
- 	c.Data["List"] = templateList
 
- }
 
- //添加模板
 
- func (c *TemplateController) Add() {
 
- 	if err := c.isPermission(); err != nil {
 
- 		c.JsonResult(500, err.Error())
 
- 	}
 
- 	templateId, _ := c.GetInt("template_id", 0)
 
- 	content := c.GetString("content")
 
- 	isGlobal, _ := c.GetInt("is_global", 0)
 
- 	templateName := c.GetString("template_name", "")
 
- 	if templateName == "" || strings.Count(templateName, "") > 300 {
 
- 		c.JsonResult(500, "模板名称不能为空且必须小于300字")
 
- 	}
 
- 	template := models.NewTemplate()
 
- 	if templateId > 0 {
 
- 		t, err := template.Find(templateId)
 
- 		if err != nil {
 
- 			c.JsonResult(500, "模板不存在")
 
- 		}
 
- 		template = t
 
- 		template.ModifyAt = c.Member.MemberId
 
- 	}
 
- 	template.TemplateId = templateId
 
- 	template.BookId = c.BookId
 
- 	template.TemplateContent = content
 
- 	template.TemplateName = templateName
 
- 	//只有管理员才能设置全局模板
 
- 	if c.Member.IsAdministrator() {
 
- 		template.IsGlobal = isGlobal
 
- 	} else {
 
- 		template.IsGlobal = 0
 
- 		//如果不是管理员需要判断是否有项目权限
 
- 		rel, err := models.NewRelationship().FindByBookIdAndMemberId(c.BookId, c.Member.MemberId)
 
- 		if err != nil || rel.RoleId == conf.BookObserver {
 
- 			c.JsonResult(403, "没有权限")
 
- 		}
 
- 		//如果修改的模板不是本人创建的,并且又不是项目创建者则禁止修改
 
- 		if template.MemberId > 0 && template.MemberId != c.Member.MemberId && rel.RoleId != conf.BookFounder {
 
- 			c.JsonResult(403, "没有权限")
 
- 		}
 
- 	}
 
- 	template.MemberId = c.Member.MemberId
 
- 	var cols []string
 
- 	if templateId > 0 {
 
- 		cols = []string{"template_content", "modify_time", "modify_at", "version"}
 
- 	}
 
- 	if err := template.Save(cols...); err != nil {
 
- 		c.JsonResult(500, "报错模板失败")
 
- 	}
 
- 	c.JsonResult(0, "OK", template)
 
- }
 
- //删除模板
 
- func (c *TemplateController) Delete() {
 
- 	if err := c.isPermission(); err != nil {
 
- 		c.JsonResult(500, err.Error())
 
- 	}
 
- 	templateId, _ := c.GetInt("template_id", 0)
 
- 	template, err := models.NewTemplate().Find(templateId)
 
- 	if err != nil {
 
- 		c.JsonResult(404, "模板不存在")
 
- 	}
 
- 	if c.Member.IsAdministrator() {
 
- 		err := models.NewTemplate().Delete(templateId, 0)
 
- 		if err != nil {
 
- 			c.JsonResult(500, "删除失败")
 
- 		}
 
- 	} else {
 
- 		//如果不是管理员需要判断是否有项目权限
 
- 		rel, err := models.NewRelationship().FindByBookIdAndMemberId(template.BookId, c.Member.MemberId)
 
- 		if err != nil || rel.RoleId == conf.BookObserver {
 
- 			c.JsonResult(403, "没有权限")
 
- 		}
 
- 		//如果是创始人或管理者可以直接删除模板
 
- 		if rel.RoleId == conf.BookFounder || rel.RoleId == conf.BookAdmin {
 
- 			err := models.NewTemplate().Delete(templateId, 0)
 
- 			if err != nil {
 
- 				c.JsonResult(500, "删除失败")
 
- 			}
 
- 		}
 
- 		if err := models.NewTemplate().Delete(templateId, c.Member.MemberId); err != nil {
 
- 			c.JsonResult(500, "删除失败")
 
- 		}
 
- 	}
 
- 	c.JsonResult(0, "OK")
 
- }
 
 
  |