From c7d83576bda44f2683492969686e8d883c66e4c7 Mon Sep 17 00:00:00 2001 From: Minho Date: Fri, 2 Feb 2018 23:12:29 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=AE=9E=E7=8E=B0=E9=80=9A=E8=BF=87S?= =?UTF-8?q?SL=E3=80=81TSL=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6=202=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=94=A8=E6=88=B7=E7=9C=9F=E5=AE=9E=E5=A7=93?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E6=AE=B5=203=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA=204?= =?UTF-8?q?=E3=80=81=E5=AE=9E=E7=8E=B0=E9=99=90=E5=AE=9A=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95=E6=95=B0=E9=87=8F=205?= =?UTF-8?q?=E3=80=81=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/app.conf.example | 2 +- controllers/book.go | 3 +++ controllers/document.go | 1 + controllers/manager.go | 1 + controllers/setting.go | 1 + mail/smtp.go | 39 +++++++++++++++++------------- models/book.go | 12 +++++----- models/book_result.go | 11 ++++++++- models/document_history.go | 45 ++++++++++++++++++++++++++--------- models/member.go | 1 + static/js/markdown.js | 5 ++++ views/book/index.tpl | 27 ++++++++++++++++----- views/book/setting.tpl | 5 ++++ views/home/index.tpl | 2 +- views/label/index.tpl | 2 +- views/manager/attach_list.tpl | 2 +- views/manager/books.tpl | 18 +++++++++++--- views/manager/edit_book.tpl | 13 ++++++---- views/manager/edit_users.tpl | 4 ++++ views/manager/users.tpl | 11 +++++++++ views/setting/index.tpl | 28 ++++++++++++---------- views/setting/password.tpl | 14 +++++------ 22 files changed, 176 insertions(+), 71 deletions(-) diff --git a/conf/app.conf.example b/conf/app.conf.example index 0cc0294c..0f9626cd 100644 --- a/conf/app.conf.example +++ b/conf/app.conf.example @@ -60,7 +60,7 @@ mail_number=5 #smtp服务用户名 smtp_user_name=admin@iminho.me #smtp服务器地址 -smtp_host=smtp.ym.163.com +smtp_host=smtp.163.com #smtp密码 smtp_password= #端口号 diff --git a/controllers/book.go b/controllers/book.go index 0ea89ce2..70041b88 100644 --- a/controllers/book.go +++ b/controllers/book.go @@ -132,6 +132,7 @@ func (c *BookController) SaveBook() { editor := strings.TrimSpace(c.GetString("editor")) autoRelease := strings.TrimSpace(c.GetString("auto_release")) == "on" publisher := strings.TrimSpace(c.GetString("publisher")) + historyCount,_ := c.GetInt("history_count",0) if strings.Count(description, "") > 500 { c.JsonResult(6004, "项目描述不能大于500字") @@ -155,6 +156,8 @@ func (c *BookController) SaveBook() { book.Publisher = publisher book.Label = tag book.Editor = editor + book.HistoryCount = historyCount + if autoRelease { book.AutoRelease = 1 } else { diff --git a/controllers/document.go b/controllers/document.go index 87481969..d2e27351 100644 --- a/controllers/document.go +++ b/controllers/document.go @@ -811,6 +811,7 @@ func (c *DocumentController) Content() { beego.Error("DocumentHistory InsertOrUpdate => ", err) } } + //如果启用了自动发布 if auto_release { go func(identify string) { models.NewDocument().ReleaseContent(book_id) diff --git a/controllers/manager.go b/controllers/manager.go index 8d40932c..08d98136 100644 --- a/controllers/manager.go +++ b/controllers/manager.go @@ -108,6 +108,7 @@ func (c *ManagerController) CreateMember() { member.Avatar = conf.GetDefaultAvatar() member.CreateAt = c.Member.MemberId member.Email = email + member.RealName = strings.TrimSpace(c.GetString("real_name","")) if phone != "" { member.Phone = phone } diff --git a/controllers/setting.go b/controllers/setting.go index 11e0b867..0bb75f6a 100644 --- a/controllers/setting.go +++ b/controllers/setting.go @@ -34,6 +34,7 @@ func (c *SettingController) Index() { member.Email = email member.Phone = phone member.Description = description + member.RealName = strings.TrimSpace(c.GetString("real_name","")) if err := member.Update(); err != nil { c.JsonResult(602, err.Error()) } diff --git a/mail/smtp.go b/mail/smtp.go index ce27cbfb..423b3a8b 100644 --- a/mail/smtp.go +++ b/mail/smtp.go @@ -85,8 +85,8 @@ func (s *SMTPConfig) Auth() smtp.Auth { case "SSL": fallthrough default: - //auth = smtp.PlainAuth(s.Identity, s.Username, s.Password, s.Host) - auth = unencryptedAuth{smtp.PlainAuth(s.Identity, s.Username, s.Password, s.Host)} + auth = smtp.PlainAuth(s.Identity, s.Username, s.Password, s.Host) + //auth = unencryptedAuth{smtp.PlainAuth(s.Identity, s.Username, s.Password, s.Host)} } return auth } @@ -214,35 +214,42 @@ func (c *SMTPClient) SendTLS(m Mail, message bytes.Buffer) error { var ct *smtp.Client var err error // TLS config - //tlsconfig := &tls.Config{ - // InsecureSkipVerify: true, - // ServerName: c.host, - //} + tlsconfig := &tls.Config{ + InsecureSkipVerify: true, + ServerName: c.host, + } // Here is the key, you need to call tls.Dial instead of smtp.Dial // for smtp servers running on 465 that require an ssl connection // from the very beginning (no starttls) - conn, err := tls.Dial("tcp", c.host+":"+c.port, nil) + conn, err := tls.Dial("tcp", c.host+":"+c.port, tlsconfig) if err != nil { log.Println(err, c.host) return err } + ct, err = smtp.NewClient(conn, c.host) if err != nil { log.Println(err) return err } - fmt.Println(c.smtpAuth) - // Auth - if err = ct.Auth(c.smtpAuth); err != nil { - log.Println("Auth Error:", - err, - c.user, - ) - return err - } + //if err := ct.StartTLS(tlsconfig);err != nil { + // fmt.Println(err) + // return err + //} + fmt.Println(c.smtpAuth) + if ok,_ := ct.Extension("AUTH"); ok { + // Auth + if err = ct.Auth(c.smtpAuth); err != nil { + log.Println("Auth Error:", + err, + c.user, + ) + return err + } + } // To && From if err = ct.Mail(m.From); err != nil { log.Println("Mail Error:", err, m.From) diff --git a/models/book.go b/models/book.go index 6f77c9c2..f44861e0 100644 --- a/models/book.go +++ b/models/book.go @@ -47,6 +47,8 @@ type Book struct { Theme string `orm:"column(theme);size(255);default(default)" json:"theme"` // CreateTime 创建时间 . 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"` 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"` @@ -281,7 +283,7 @@ func (m *Book) FindForHomeToPager(pageIndex, pageSize, member_id int) (books []* if err != nil { return } - sql2 := `SELECT book.*,rel1.*,member.account AS create_name FROM md_books AS book + sql2 := `SELECT book.*,rel1.*,member.account AS create_name,member.real_name FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ? LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0 LEFT JOIN md_members AS member ON rel1.member_id = member.member_id @@ -289,8 +291,6 @@ func (m *Book) FindForHomeToPager(pageIndex, pageSize, member_id int) (books []* _, err = o.Raw(sql2, member_id, offset, pageSize).QueryRows(&books) - return - } else { count, err1 := o.QueryTable(m.TableNameWithPrefix()).Filter("privately_owned", 0).Count() @@ -300,17 +300,17 @@ func (m *Book) FindForHomeToPager(pageIndex, pageSize, member_id int) (books []* } totalCount = int(count) - sql := `SELECT book.*,rel.*,member.account AS create_name FROM md_books AS book + sql := `SELECT book.*,rel.*,member.account AS create_name,member.real_name FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0 LEFT JOIN md_members AS member ON rel.member_id = member.member_id WHERE book.privately_owned = 0 ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?` _, err = o.Raw(sql, offset, pageSize).QueryRows(&books) - return - } + return + } //分页全局搜索. diff --git a/models/book_result.go b/models/book_result.go index dcbecb16..5ee1c668 100644 --- a/models/book_result.go +++ b/models/book_result.go @@ -34,6 +34,7 @@ type BookResult struct { CommentCount int `json:"comment_count"` CreateTime time.Time `json:"create_time"` CreateName string `json:"create_name"` + RealName string `json:"real_name"` ModifyTime time.Time `json:"modify_time"` Cover string `json:"cover"` Theme string `json:"theme"` @@ -41,6 +42,7 @@ type BookResult struct { MemberId int `json:"member_id"` Editor string `json:"editor"` AutoRelease bool `json:"auto_release"` + HistoryCount int `json:"history_count"` RelationshipId int `json:"relationship_id"` RoleId int `json:"role_id"` @@ -94,6 +96,9 @@ func (m *BookResult) FindByIdentify(identify string, member_id int) (*BookResult m = NewBookResult().ToBookResult(*book) m.CreateName = member.Account + if member.RealName != "" { + m.RealName = member.RealName + } m.MemberId = relationship.MemberId m.RoleId = relationship.RoleId m.RelationshipId = relationship.RelationshipId @@ -133,7 +138,7 @@ func (m *BookResult) FindToPager(pageIndex, pageSize int) (books []*BookResult, totalCount = int(count) sql := `SELECT - book.*,rel.relationship_id,rel.role_id,m.account AS create_name + book.*,rel.relationship_id,rel.role_id,m.account AS create_name,m.real_name FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0 LEFT JOIN md_members AS m ON rel.member_id = m.member_id @@ -168,6 +173,7 @@ func (m *BookResult) ToBookResult(book Book) *BookResult { m.Theme = book.Theme m.AutoRelease = book.AutoRelease == 1 m.Publisher = book.Publisher + m.HistoryCount = book.HistoryCount if book.Theme == "" { m.Theme = "default" @@ -266,6 +272,9 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) { if m.Publisher != "" { ebookConfig.Footer = "

本文档由 "+ m.Publisher +" 生成- _PAGENUM_ -

" } + if m.RealName != "" { + ebookConfig.Creator = m.RealName + } if tempOutputPath, err = filepath.Abs(tempOutputPath); err != nil { beego.Error("导出目录配置错误:" + err.Error()) diff --git a/models/document_history.go b/models/document_history.go index 1c45ea6d..95cae2a4 100644 --- a/models/document_history.go +++ b/models/document_history.go @@ -5,6 +5,7 @@ import ( "github.com/astaxie/beego/orm" "github.com/lifei6671/mindoc/conf" + "github.com/astaxie/beego" ) type DocumentHistory struct { @@ -58,28 +59,28 @@ func (m *DocumentHistory) Find(id int) (*DocumentHistory, error) { } //清空指定文档的历史. -func (m *DocumentHistory) Clear(doc_id int) error { +func (m *DocumentHistory) Clear(docId int) error { o := orm.NewOrm() - _, err := o.Raw("DELETE md_document_history WHERE document_id = ?", doc_id).Exec() + _, err := o.Raw("DELETE md_document_history WHERE document_id = ?", docId).Exec() return err } //删除历史. -func (m *DocumentHistory) Delete(history_id, doc_id int) error { +func (m *DocumentHistory) Delete(historyId, docId int) error { o := orm.NewOrm() - _, err := o.QueryTable(m.TableNameWithPrefix()).Filter("history_id", history_id).Filter("document_id", doc_id).Delete() + _, err := o.QueryTable(m.TableNameWithPrefix()).Filter("history_id", historyId).Filter("document_id", docId).Delete() return err } //恢复指定历史的文档. -func (m *DocumentHistory) Restore(history_id, doc_id, uid int) error { +func (m *DocumentHistory) Restore(historyId, docId, uid int) error { o := orm.NewOrm() - err := o.QueryTable(m.TableNameWithPrefix()).Filter("history_id", history_id).Filter("document_id", doc_id).One(m) + err := o.QueryTable(m.TableNameWithPrefix()).Filter("history_id", historyId).Filter("document_id", docId).One(m) if err != nil { return err @@ -90,7 +91,7 @@ func (m *DocumentHistory) Restore(history_id, doc_id, uid int) error { return err } history := NewDocumentHistory() - history.DocumentId = doc_id + history.DocumentId = docId history.Content = doc.Content history.Markdown = doc.Markdown history.DocumentName = doc.DocumentName @@ -122,16 +123,38 @@ func (m *DocumentHistory) InsertOrUpdate() (history *DocumentHistory, err error) _, err = o.Update(m) } else { _, err = o.Insert(m) + if err == nil { + if doc,e := NewDocument().Find(m.DocumentId);e == nil { + if book,e := NewBook().Find(doc.BookId);e == nil && book.HistoryCount > 0 { + //如果已存在的历史记录大于指定的记录,则清除旧记录 + if c,e := o.QueryTable(m.TableNameWithPrefix()).Filter("document_id",doc.DocumentId).Count(); e == nil && c > int64(book.HistoryCount) { + + count := c - int64(book.HistoryCount) + beego.Info("需要删除的历史文档数量:" ,count) + var lists []DocumentHistory + + if _,e := o.QueryTable(m.TableNameWithPrefix()).Filter("document_id",doc.DocumentId).OrderBy("history_id").Limit(count).All(&lists,"history_id"); e == nil { + for _,d := range lists { + o.Delete(&d) + } + } + }else{ + beego.Info(book.HistoryCount) + } + } + } + + } } return } //分页查询指定文档的历史. -func (m *DocumentHistory) FindToPager(doc_id, page_index, page_size int) (docs []*DocumentHistorySimpleResult, totalCount int, err error) { +func (m *DocumentHistory) FindToPager(docId, pageIndex, pageSize int) (docs []*DocumentHistorySimpleResult, totalCount int, err error) { o := orm.NewOrm() - offset := (page_index - 1) * page_size + offset := (pageIndex - 1) * pageSize totalCount = 0 @@ -141,13 +164,13 @@ LEFT JOIN md_members AS m1 ON history.member_id = m1.member_id LEFT JOIN md_members AS m2 ON history.modify_at = m2.member_id WHERE history.document_id = ? ORDER BY history.history_id DESC LIMIT ?,?;` - _, err = o.Raw(sql, doc_id, offset, page_size).QueryRows(&docs) + _, err = o.Raw(sql, docId, offset, pageSize).QueryRows(&docs) if err != nil { return } var count int64 - count, err = o.QueryTable(m.TableNameWithPrefix()).Filter("document_id", doc_id).Count() + count, err = o.QueryTable(m.TableNameWithPrefix()).Filter("document_id", docId).Count() if err != nil { return diff --git a/models/member.go b/models/member.go index 3a069e65..c5749e3c 100644 --- a/models/member.go +++ b/models/member.go @@ -21,6 +21,7 @@ import ( type Member struct { MemberId int `orm:"pk;auto;unique;column(member_id)" json:"member_id"` Account string `orm:"size(100);unique;column(account)" json:"account"` + RealName string `orm:"size(255);column(real_name)" json:"real_name"` Password string `orm:"size(1000);column(password)" json:"-"` //认证方式: local 本地数据库 /ldap LDAP AuthMethod string `orm:"column(auth_method);default(local);size(50);" json:"auth_method"` diff --git a/static/js/markdown.js b/static/js/markdown.js index 27fde391..a1702668 100644 --- a/static/js/markdown.js +++ b/static/js/markdown.js @@ -197,6 +197,7 @@ $(function () { url: window.editURL, data: { "identify": window.book.identify, "doc_id": doc_id, "markdown": content, "html": html, "cover": $is_cover ? "yes" : "no", "version": version }, type: "post", + timeout : 30000, dataType: "json", success: function (res) { layer.close(index); @@ -223,6 +224,10 @@ $(function () { } else { layer.msg(res.message); } + }, + error : function (XMLHttpRequest, textStatus, errorThrown) { + layer.close(index); + layer.msg("服务器错误:" + errorThrown); } }); } diff --git a/views/book/index.tpl b/views/book/index.tpl index 804e4c65..57e2460f 100644 --- a/views/book/index.tpl +++ b/views/book/index.tpl @@ -26,7 +26,7 @@
@@ -53,15 +53,30 @@ - ${item.book_name}
- 查看文档 - + + + {{/* 查看文档*/}} + {{/**/}}
diff --git a/views/book/setting.tpl b/views/book/setting.tpl index 76e0e9fc..d60b4f43 100644 --- a/views/book/setting.tpl +++ b/views/book/setting.tpl @@ -63,6 +63,11 @@ +
+ + +

当开启文档历史时,该值会限制每个文档保存的历史数量

+
diff --git a/views/home/index.tpl b/views/home/index.tpl index d605d0a4..efdb318f 100644 --- a/views/home/index.tpl +++ b/views/home/index.tpl @@ -55,7 +55,7 @@ 作者 - - {{$item.CreateName}} + {{if eq $item.RealName "" }}{{$item.CreateName}}{{else}}{{$item.RealName}}{{end}} diff --git a/views/label/index.tpl b/views/label/index.tpl index b3f6ec1e..7164467e 100644 --- a/views/label/index.tpl +++ b/views/label/index.tpl @@ -43,7 +43,7 @@ 作者 - - {{$item.CreateName}} + {{if eq $item.RealName "" }}{{$item.CreateName}}{{else}}{{$item.RealName}}{{end}} diff --git a/views/manager/attach_list.tpl b/views/manager/attach_list.tpl index 000c5c89..5ac68415 100644 --- a/views/manager/attach_list.tpl +++ b/views/manager/attach_list.tpl @@ -68,7 +68,7 @@ {{else}} - 暂无数据 + 暂无数据 {{end}} diff --git a/views/manager/books.tpl b/views/manager/books.tpl index 4fef37a6..769cce60 100644 --- a/views/manager/books.tpl +++ b/views/manager/books.tpl @@ -57,8 +57,20 @@
- 查看文档 - 编辑文档 + + {{/* 查看文档*/}} + {{/* 编辑文档*/}}
@@ -76,7 +88,7 @@ {{date $item.CreateTime "Y-m-d H:i:s"}} - {{$item.CreateName}} + {{if eq $item.RealName "" }}{{$item.CreateName}}{{else}}{{$item.RealName}}{{end}} {{$item.DocCount}} {{if ne $item.LastModifyText ""}} 最后编辑: {{$item.LastModifyText}} diff --git a/views/manager/edit_book.tpl b/views/manager/edit_book.tpl index af159ecb..2de7a7e7 100644 --- a/views/manager/edit_book.tpl +++ b/views/manager/edit_book.tpl @@ -156,7 +156,7 @@ @@ -181,7 +181,7 @@ @@ -208,7 +208,7 @@ @@ -219,7 +219,7 @@ - + +
@@ -56,6 +59,7 @@ ID 头像 账号 + 姓名 角色 类型 状态 @@ -67,6 +71,7 @@ ${item.member_id} ${item.account} + ${item.real_name}