瀏覽代碼

实现分享开关

Minho 7 年之前
父節點
當前提交
08e86e0f41

+ 4 - 4
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)
 }
 
 //解析命令

+ 104 - 0
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
+}

+ 9 - 9
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)
 }
 
 // 验证码

+ 9 - 3
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 {

+ 5 - 5
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)

+ 1 - 2
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

+ 1 - 2
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
 	}
 }

+ 3 - 3
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)
 

+ 1 - 1
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
 	}
 

+ 2 - 0
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"`

+ 3 - 1
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

+ 5 - 4
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("><a href=\"")
 			if item.Identify != "" {
-				uri := utils.URLFor("DocumentController.Read", ":key", item.BookIdentify, ":id", item.Identify)
+				uri := conf.URLFor("DocumentController.Read", ":key", item.BookIdentify, ":id", item.Identify)
 				buf.WriteString(uri)
 			} else {
-				uri := utils.URLFor("DocumentController.Read", ":key", item.BookIdentify, ":id", item.DocumentId)
+				uri := conf.URLFor("DocumentController.Read", ":key", item.BookIdentify, ":id", item.DocumentId)
 				buf.WriteString(uri)
 			}
 			buf.WriteString("\" title=\"")

+ 0 - 96
utils/url.go

@@ -2,7 +2,6 @@ package utils
 
 import (
 	"strings"
-	"github.com/astaxie/beego"
 )
 
 func JoinURI(elem ...string) string {
@@ -28,99 +27,4 @@ func JoinURI(elem ...string) string {
 		}
 	}
 	return uri
-}
-
-//重写生成URL的方法,加上完整的域名
-func URLFor(endpoint string, values ...interface{}) string {
-	baseUrl := beego.AppConfig.DefaultString("baseurl","")
-	pathUrl := beego.URLFor(endpoint, values ...)
-
-	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 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 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 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
 }

+ 10 - 2
views/book/setting.tpl

@@ -129,6 +129,7 @@
                     </div>
                 </div>
                 {{end}}
+
                 <div class="form-group">
                     <label for="autoRelease">自动发布</label>
                     <div class="controls">
@@ -145,6 +146,14 @@
                         </div>
                     </div>
                 </div>
+                <div class="form-group">
+                    <label for="autoRelease">开启分享</label>
+                    <div class="controls">
+                        <div class="switch switch-small" data-on="primary" data-off="info">
+                            <input type="checkbox" id="enableShare" name="enable_share"{{if .Model.IsEnableShare }} checked{{end}} data-size="small">
+                        </div>
+                    </div>
+                </div>
                 <div class="form-group">
                     <button type="submit" id="btnSaveBookInfo" class="btn btn-success" data-loading-text="保存中...">保存修改</button>
                     <span id="form-error-message" class="error-message"></span>
@@ -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],

+ 5 - 2
views/document/default_read.tpl

@@ -61,8 +61,10 @@
                 </div>
                 <div class="dropdown pull-right" style="margin-right: 10px;">
                 {{if eq .Model.PrivatelyOwned 0}}
+                {{if .Model.IsEnableShare}}
                     <button type="button" class="btn btn-success" data-toggle="modal" data-target="#shareProject"><i class="fa fa-share-alt" aria-hidden="true"></i> 分享</button>
                 {{end}}
+                {{end}}
                 </div>
                 {{if .Model.IsDownload}}
                 <div class="dropdown pull-right" style="margin-right: 10px;">
@@ -211,7 +213,7 @@
     </article>
     <div class="manual-mask"></div>
 </div>
-
+{{if .Model.IsEnableShare}}
 <!-- 分享项目 -->
 <div class="modal fade" id="shareProject" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
     <div class="modal-dialog">
@@ -240,6 +242,7 @@
         </div>
     </div>
 </div>
+{{end}}
 <!-- 下载项目 -->
 <div class="modal fade" id="downloadBookModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
     <div class="modal-dialog">
@@ -257,7 +260,7 @@
                 <div class="form-group">
                     <label for="password" class="col-sm-2 control-label">项目地址</label>
                     <div class="col-sm-10">
-                        <input type="text" value="{{.BaseUrl}}{{urlfor "DocumentController.Index" ":key" .Model.Identify}}" class="form-control" onmouseover="this.select()" id="projectUrl" title="项目地址">
+                        <input type="text" value="{{urlfor "DocumentController.Index" ":key" .Model.Identify}}" class="form-control" onmouseover="this.select()" id="projectUrl" title="项目地址">
                     </div>
                     <div class="clearfix"></div>
                 </div>