diff --git a/commands/command.go b/commands/command.go index 956165bf..79517e6f 100644 --- a/commands/command.go +++ b/commands/command.go @@ -168,11 +168,11 @@ func RegisterFunction() { return cdn + p }) - beego.AddFuncMap("cdnjs",utils.URLForWithCdnJs) - beego.AddFuncMap("cdncss",utils.URLForWithCdnCss) - beego.AddFuncMap("cdnimg", utils.URLForWithCdnImage) + beego.AddFuncMap("cdnjs",conf.URLForWithCdnJs) + beego.AddFuncMap("cdncss",conf.URLForWithCdnCss) + beego.AddFuncMap("cdnimg", conf.URLForWithCdnImage) //重写url生成,支持配置域名以及域名前缀 - beego.AddFuncMap("urlfor", utils.URLFor) + beego.AddFuncMap("urlfor", conf.URLFor) } //解析命令 diff --git a/conf/enumerate.go b/conf/enumerate.go index 5ce602ca..de1f69a1 100644 --- a/conf/enumerate.go +++ b/conf/enumerate.go @@ -151,3 +151,107 @@ func IsAllowUploadFileExt(ext string) bool { } return false } + +//重写生成URL的方法,加上完整的域名 +func URLFor(endpoint string, values ...interface{}) string { + baseUrl := beego.AppConfig.DefaultString("baseurl","") + pathUrl := beego.URLFor(endpoint, values ...) + + if baseUrl == "" { + baseUrl = BaseUrl + } + if strings.HasPrefix(pathUrl,"http://") { + return pathUrl + } + if strings.HasPrefix(pathUrl,"/") && strings.HasSuffix(baseUrl,"/") { + return baseUrl + pathUrl[1:] + } + if !strings.HasPrefix(pathUrl,"/") && !strings.HasSuffix(baseUrl,"/") { + return baseUrl + "/" + pathUrl + } + return baseUrl + beego.URLFor(endpoint, values ...) +} + +func URLForWithCdnImage(p string) string { + if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") { + return p + } + cdn := beego.AppConfig.DefaultString("cdnimg", "") + //如果没有设置cdn,则使用baseURL拼接 + if cdn == "" { + baseUrl := beego.AppConfig.DefaultString("baseurl","") + if baseUrl == "" { + baseUrl = BaseUrl + } + if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") { + return baseUrl + p[1:] + } + if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") { + return baseUrl + "/" + p + } + return baseUrl + p + } + if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") { + return cdn + string(p[1:]) + } + if !strings.HasPrefix(p, "/") && !strings.HasSuffix(cdn, "/") { + return cdn + "/" + p + } + return cdn + p +} + +func URLForWithCdnCss (p string) string { + cdn := beego.AppConfig.DefaultString("cdncss", "") + if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") { + return p + } + //如果没有设置cdn,则使用baseURL拼接 + if cdn == "" { + baseUrl := beego.AppConfig.DefaultString("baseurl","") + if baseUrl == "" { + baseUrl = BaseUrl + } + if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") { + return baseUrl + p[1:] + } + if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") { + return baseUrl + "/" + p + } + return baseUrl + p + } + if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") { + return cdn + string(p[1:]) + } + if !strings.HasPrefix(p, "/") && !strings.HasSuffix(cdn, "/") { + return cdn + "/" + p + } + return cdn + p +} + +func URLForWithCdnJs(p string) string { + cdn := beego.AppConfig.DefaultString("cdnjs", "") + if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") { + return p + } + //如果没有设置cdn,则使用baseURL拼接 + if cdn == "" { + baseUrl := beego.AppConfig.DefaultString("baseurl","") + if baseUrl == "" { + baseUrl = BaseUrl + } + if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") { + return baseUrl + p[1:] + } + if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") { + return baseUrl + "/" + p + } + return baseUrl + p + } + if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") { + return cdn + string(p[1:]) + } + if !strings.HasPrefix(p, "/") && !strings.HasSuffix(cdn, "/") { + return cdn + "/" + p + } + return cdn + p +} \ No newline at end of file diff --git a/controllers/account.go b/controllers/account.go index 4ba60d75..62770434 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -32,7 +32,7 @@ func (c *AccountController) Login() { u = c.Ctx.Request.Header.Get("Referer") } if u == "" { - u = utils.URLFor("HomeController.Index") + u = conf.URLFor("HomeController.Index") } c.Redirect(u,302) } @@ -83,7 +83,7 @@ func (c *AccountController) Login() { u = c.Ctx.Request.Header.Get("Referer") } if u == "" { - u = utils.URLFor("HomeController.Index") + u = conf.URLFor("HomeController.Index") } c.JsonResult(0, "ok", u) @@ -97,7 +97,7 @@ func (c *AccountController) Login() { u = c.Ctx.Request.Header.Get("Referer") } if u == "" { - u = utils.URLFor("HomeController.Index") + u = conf.URLFor("HomeController.Index") } c.Data["url"] = url.PathEscape(u) } @@ -111,7 +111,7 @@ func (c *AccountController) LoggedIn(isPost bool) interface{} { if !isPost { // 检查是否存在 turl 参数,如果有则重定向至 turl 处,否则进入 Home 页面 if turl == "" { - turl = utils.URLFor("HomeController.Index") + turl = conf.URLFor("HomeController.Index") } c.Redirect(turl, 302) return nil @@ -130,7 +130,7 @@ func (c *AccountController) Register() { //如果用户登录了,则跳转到网站首页 if member, ok := c.GetSession(conf.LoginSessionName).(models.Member); ok && member.MemberId > 0 { - c.Redirect(utils.URLFor("HomeController.Index"),302) + c.Redirect(conf.URLFor("HomeController.Index"),302) } // 如果没有开启用户注册 if v, ok := c.Option["ENABLED_REGISTER"]; ok && !strings.EqualFold(v, "true") { @@ -244,7 +244,7 @@ func (c *AccountController) FindPassword() { data := map[string]interface{}{ "SITE_NAME": c.Option["SITE_NAME"], - "url": utils.URLFor("AccountController.FindPassword", "token", member_token.Token, "mail", email), + "url": conf.URLFor("AccountController.FindPassword", "token", member_token.Token, "mail", email), "BaseUrl": c.BaseUrl(), } @@ -302,7 +302,7 @@ func (c *AccountController) FindPassword() { //} }(mail_conf, email, body) - c.JsonResult(0, "ok", utils.URLFor("AccountController.Login")) + c.JsonResult(0, "ok", conf.URLFor("AccountController.Login")) } token := c.GetString("token") @@ -396,7 +396,7 @@ func (c *AccountController) ValidEmail() { beego.Error(err) c.JsonResult(6006, "保存密码失败") } - c.JsonResult(0, "ok", utils.URLFor("AccountController.Login")) + c.JsonResult(0, "ok", conf.URLFor("AccountController.Login")) } // Logout 退出登录 @@ -407,7 +407,7 @@ func (c *AccountController) Logout() { u := c.Ctx.Request.Header.Get("Referer") - c.Redirect(utils.URLFor("AccountController.Login","url",u), 302) + c.Redirect(conf.URLFor("AccountController.Login","url",u), 302) } // 验证码 diff --git a/controllers/book.go b/controllers/book.go index 78ba5b1e..a2c9ca87 100644 --- a/controllers/book.go +++ b/controllers/book.go @@ -111,7 +111,7 @@ func (c *BookController) Setting() { c.Abort("403") } if book.PrivateToken != "" { - book.PrivateToken = utils.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken) + book.PrivateToken = conf.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken) } c.Data["Model"] = book @@ -140,6 +140,7 @@ func (c *BookController) SaveBook() { publisher := strings.TrimSpace(c.GetString("publisher")) historyCount,_ := c.GetInt("history_count",0) isDownload := strings.TrimSpace(c.GetString("is_download")) == "on" + enableShare := strings.TrimSpace(c.GetString("enable_share")) == "on" if strings.Count(description, "") > 500 { c.JsonResult(6004, "项目描述不能大于500字") @@ -176,6 +177,11 @@ func (c *BookController) SaveBook() { }else{ book.IsDownload = 1 } + if enableShare { + book.IsEnableShare = 0 + }else{ + book.IsEnableShare = 1 + } if err := book.Update(); err != nil { c.JsonResult(6006, "保存失败") } @@ -345,7 +351,7 @@ func (c *BookController) UploadCover() { oldCover := book.Cover - book.Cover = utils.URLForWithCdnImage(url) + book.Cover = conf.URLForWithCdnImage(url) if err := book.Update(); err != nil { c.JsonResult(6001, "保存图片失败") @@ -554,7 +560,7 @@ func (c *BookController) CreateToken() { logs.Error("生成阅读令牌失败 => ", err) c.JsonResult(6003, "生成阅读令牌失败") } - c.JsonResult(0, "ok", utils.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken)) + c.JsonResult(0, "ok", conf.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken)) } else { book.PrivateToken = "" if err := book.Update(); err != nil { diff --git a/controllers/document.go b/controllers/document.go index 0205676b..f5b0d9b8 100644 --- a/controllers/document.go +++ b/controllers/document.go @@ -105,7 +105,7 @@ func promptUserToLogIn(c *DocumentController) { if c.IsAjax() { c.JsonResult(6000, "请重新登录。") } else { - c.Redirect(utils.URLFor("AccountController.Login")+ "?url=" + url.PathEscape(conf.BaseUrl+ c.Ctx.Request.URL.RequestURI()), 302) + c.Redirect(conf.URLFor("AccountController.Login")+ "?url=" + url.PathEscape(conf.BaseUrl+ c.Ctx.Request.URL.RequestURI()), 302) } } @@ -522,7 +522,7 @@ func (c *DocumentController) Upload() { if strings.EqualFold(ext, ".jpg") || strings.EqualFold(ext, ".jpeg") || strings.EqualFold(ext, ".png") || strings.EqualFold(ext, ".gif") { attachment.HttpPath = "/" + strings.Replace(strings.TrimPrefix(filePath, conf.WorkingDirectory), "\\", "/", -1) if strings.HasPrefix(attachment.HttpPath, "//") { - attachment.HttpPath = utils.URLForWithCdnImage(string(attachment.HttpPath[1:])) + attachment.HttpPath = conf.URLForWithCdnImage(string(attachment.HttpPath[1:])) } is_attach = false @@ -537,7 +537,7 @@ func (c *DocumentController) Upload() { } if attachment.HttpPath == "" { - attachment.HttpPath = utils.URLFor("DocumentController.DownloadAttachment", ":key", identify, ":attach_id", attachment.AttachmentId) + attachment.HttpPath = conf.URLFor("DocumentController.DownloadAttachment", ":key", identify, ":attach_id", attachment.AttachmentId) if err := attachment.Update(); err != nil { beego.Error("SaveToFile => ", err) @@ -892,7 +892,7 @@ func (c *DocumentController) Export() { } if !strings.HasPrefix(bookResult.Cover, "http:://") && !strings.HasPrefix(bookResult.Cover, "https:://") { - bookResult.Cover = utils.URLForWithCdnImage(bookResult.Cover) + bookResult.Cover = conf.URLForWithCdnImage(bookResult.Cover) } if output == "markdown" { @@ -951,7 +951,7 @@ func (c *DocumentController) QrCode() { c.Abort("404") } - uri := utils.URLFor("DocumentController.Index", ":key", identify) + uri := conf.URLFor("DocumentController.Index", ":key", identify) code, err := qr.Encode(uri, qr.L, qr.Unicode) if err != nil { beego.Error(err) diff --git a/controllers/home.go b/controllers/home.go index 204f4069..cc7ccaf3 100644 --- a/controllers/home.go +++ b/controllers/home.go @@ -7,7 +7,6 @@ import ( "github.com/astaxie/beego" "github.com/lifei6671/mindoc/conf" "github.com/lifei6671/mindoc/models" - "github.com/lifei6671/mindoc/utils" "github.com/lifei6671/mindoc/utils/pagination" ) @@ -20,7 +19,7 @@ func (c *HomeController) Index() { c.TplName = "home/index.tpl" //如果没有开启匿名访问,则跳转到登录页面 if !c.EnableAnonymous && c.Member == nil { - c.Redirect(utils.URLFor("AccountController.Login")+"?url="+url.PathEscape(conf.BaseUrl+c.Ctx.Request.URL.RequestURI()), 302) + c.Redirect(conf.URLFor("AccountController.Login")+"?url="+url.PathEscape(conf.BaseUrl+c.Ctx.Request.URL.RequestURI()), 302) } pageIndex, _ := c.GetInt("page", 1) pageSize := 18 diff --git a/controllers/label.go b/controllers/label.go index 049807a0..7c4cb2ed 100644 --- a/controllers/label.go +++ b/controllers/label.go @@ -7,7 +7,6 @@ import ( "github.com/astaxie/beego/orm" "github.com/lifei6671/mindoc/conf" "github.com/lifei6671/mindoc/models" - "github.com/lifei6671/mindoc/utils" "github.com/lifei6671/mindoc/utils/pagination" ) @@ -20,7 +19,7 @@ func (c *LabelController) Prepare() { //如果没有开启你们访问则跳转到登录 if !c.EnableAnonymous && c.Member == nil { - c.Redirect(utils.URLFor("AccountController.Login"), 302) + c.Redirect(conf.URLFor("AccountController.Login"), 302) return } } diff --git a/controllers/manager.go b/controllers/manager.go index 77b411bc..99f97aaf 100644 --- a/controllers/manager.go +++ b/controllers/manager.go @@ -352,7 +352,7 @@ func (c *ManagerController) EditBook() { c.JsonResult(0, "ok") } if book.PrivateToken != "" { - book.PrivateToken = utils.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken) + book.PrivateToken = conf.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken) } c.Data["Model"] = book } @@ -403,7 +403,7 @@ func (c *ManagerController) CreateToken() { logs.Error("生成阅读令牌失败 => ", err) c.JsonResult(6003, "生成阅读令牌失败") } - c.JsonResult(0, "ok", utils.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken)) + c.JsonResult(0, "ok", conf.URLFor("DocumentController.Index", ":key", book.Identify, "token", book.PrivateToken)) } else { book.PrivateToken = "" if err := book.Update(); err != nil { @@ -610,7 +610,7 @@ func (c *ManagerController) AttachDetailed() { } attach.FilePath = filepath.Join(conf.WorkingDirectory, attach.FilePath) - attach.HttpPath = utils.URLForWithCdnImage(attach.HttpPath) + attach.HttpPath = conf.URLForWithCdnImage(attach.HttpPath) attach.IsExist = utils.FileExists(attach.FilePath) diff --git a/controllers/search.go b/controllers/search.go index 214722d1..b31e1e11 100644 --- a/controllers/search.go +++ b/controllers/search.go @@ -21,7 +21,7 @@ func (c *SearchController) Index() { //如果没有开启你们访问则跳转到登录 if !c.EnableAnonymous && c.Member == nil { - c.Redirect(utils.URLFor("AccountController.Login"), 302) + c.Redirect(conf.URLFor("AccountController.Login"), 302) return } diff --git a/models/book.go b/models/book.go index b6317d71..ad5fa3d1 100644 --- a/models/book.go +++ b/models/book.go @@ -51,6 +51,8 @@ type Book struct { CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add" json:"create_time"` //每个文档保存的历史记录数量,0 为不限制 HistoryCount int `orm:"column(history_count);type(int);default(0)" json:"history_count"` + //是否启用分享,0启用/1不启用 + IsEnableShare int `orm:"column(is_enable_share);type(int);default(0)" json:"is_enable_share"` MemberId int `orm:"column(member_id);size(100)" json:"member_id"` ModifyTime time.Time `orm:"type(datetime);column(modify_time);null;auto_now" json:"modify_time"` Version int64 `orm:"type(bigint);column(version)" json:"version"` diff --git a/models/book_result.go b/models/book_result.go index 9d6227a2..61e677ff 100644 --- a/models/book_result.go +++ b/models/book_result.go @@ -48,7 +48,8 @@ type BookResult struct { RelationshipId int `json:"relationship_id"` RoleId int `json:"role_id"` RoleName string `json:"role_name"` - Status int + Status int `json:"status"` + IsEnableShare bool `json:"is_enable_share"` LastModifyText string `json:"last_modify_text"` IsDisplayComment bool `json:"is_display_comment"` @@ -174,6 +175,7 @@ func (m *BookResult) ToBookResult(book Book) *BookResult { m.Editor = book.Editor m.Theme = book.Theme m.AutoRelease = book.AutoRelease == 1 + m.IsEnableShare = book.IsEnableShare == 0 m.Publisher = book.Publisher m.HistoryCount = book.HistoryCount m.IsDownload = book.IsDownload == 0 diff --git a/models/document_tree.go b/models/document_tree.go index ef86af92..39e8d7cd 100644 --- a/models/document_tree.go +++ b/models/document_tree.go @@ -2,11 +2,12 @@ package models import ( "bytes" - "github.com/astaxie/beego/orm" "html/template" "math" "strconv" - "github.com/lifei6671/mindoc/utils" + + "github.com/astaxie/beego/orm" + "github.com/lifei6671/mindoc/conf" ) type DocumentTree struct { @@ -116,10 +117,10 @@ func getDocumentTree(array []*DocumentTree, parent_id int, selected_id int, sele buf.WriteString(selected_li) buf.WriteString("> {{end}} +
@@ -145,6 +146,14 @@
+
+ +
+
+ +
+
+
@@ -308,8 +317,7 @@ }).on("show.bs.modal",function () { window.modalHtml = $("#upload-logo-panel").find(".modal-body").html(); }); - $("#autoRelease").bootstrapSwitch(); - $("#isDownload").bootstrapSwitch(); + $("#autoRelease,#enableShare,#isDownload").bootstrapSwitch(); $('input[name="label"]').tagsinput({ confirmKeys: [13,44], diff --git a/views/document/default_read.tpl b/views/document/default_read.tpl index 6a9c2239..41311595 100644 --- a/views/document/default_read.tpl +++ b/views/document/default_read.tpl @@ -61,8 +61,10 @@
{{if .Model.IsDownload}} - +{{if .Model.IsEnableShare}} +{{end}}