@@ -72,10 +72,10 @@ type Book struct {
//是否使用第一篇文章项目为默认首页,0 否/1 是
IsUseFirstDocument int ` orm:"column(is_use_first_document);type(int);default(0)" json:"is_use_first_document" `
//是否开启自动保存: 0 否/1 是
AutoSave int ` orm:"column(auto_save);type(tinyint);default(0)" json:"auto_save" `
AutoSave int ` orm:"column(auto_save);type(tinyint);default(0)" json:"auto_save" `
}
func ( book * Book ) String ( ) string {
func ( book * Book ) String ( ) string {
ret , err := json . Marshal ( * book )
if err != nil {
@@ -97,7 +97,7 @@ func (book *Book) TableNameWithPrefix() string {
return conf . GetDatabasePrefix ( ) + book . TableName ( )
}
func ( book * Book ) QueryTable ( ) orm . QuerySeter {
func ( book * Book ) QueryTable ( ) orm . QuerySeter {
return orm . NewOrm ( ) . QueryTable ( book . TableNameWithPrefix ( ) )
}
@@ -143,13 +143,13 @@ func (book *Book) Insert() error {
return err
}
func ( book * Book ) Find ( id int , cols ... string ) ( * Book , error ) {
func ( book * Book ) Find ( id int , cols ... string ) ( * Book , error ) {
if id <= 0 {
return book , ErrInvalidParameter
}
o := orm . NewOrm ( )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "book_id" , id ) . One ( book , cols ... )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "book_id" , id ) . One ( book , cols ... )
return book , err
}
@@ -179,43 +179,43 @@ func (book *Book) Update(cols ...string) error {
func ( book * Book ) Copy ( identify string ) error {
o := orm . NewOrm ( )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "identify" , identify ) . One ( book )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "identify" , identify ) . One ( book )
if err != nil {
beego . Error ( "查询项目时出错 -> " , err )
beego . Error ( "查询项目时出错 -> " , err )
return err
}
if err := o . Begin ( ) ; err != nil {
beego . Error ( "开启事物时出错 -> " , err )
if err := o . Begin ( ) ; err != nil {
beego . Error ( "开启事物时出错 -> " , err )
return err
}
bookId := book . BookId
book . BookId = 0
book . Identify = book . Identify + fmt . Sprintf ( "%s-%s" , identify , strconv . FormatInt ( time . Now ( ) . UnixNano ( ) , 32 ) )
book . Identify = book . Identify + fmt . Sprintf ( "%s-%s" , identify , strconv . FormatInt ( time . Now ( ) . UnixNano ( ) , 32 ) )
book . BookName = book . BookName + "[副本]"
book . CreateTime = time . Now ( )
book . CommentCount = 0
book . HistoryCount = 0
if _ , err := o . Insert ( book ) ; err != nil {
beego . Error ( "复制项目时出错 -> " , err )
if _ , err := o . Insert ( book ) ; err != nil {
beego . Error ( "复制项目时出错 -> " , err )
o . Rollback ( )
return err
}
var rels [ ] * Relationship
if _ , err := o . QueryTable ( NewRelationship ( ) . TableNameWithPrefix ( ) ) . Filter ( "book_id" , bookId ) . All ( & rels ) ; err != nil {
beego . Error ( "复制项目关系时出错 -> " , err )
if _ , err := o . QueryTable ( NewRelationship ( ) . TableNameWithPrefix ( ) ) . Filter ( "book_id" , bookId ) . All ( & rels ) ; err != nil {
beego . Error ( "复制项目关系时出错 -> " , err )
o . Rollback ( )
return err
}
for _ , rel := range rels {
for _ , rel := range rels {
rel . BookId = book . BookId
rel . RelationshipId = 0
if _ , err := o . Insert ( rel ) ; err != nil {
beego . Error ( "复制项目关系时出错 -> " , err )
if _ , err := o . Insert ( rel ) ; err != nil {
beego . Error ( "复制项目关系时出错 -> " , err )
o . Rollback ( )
return err
}
@@ -223,14 +223,14 @@ func (book *Book) Copy(identify string) error {
var docs [ ] * Document
if _ , err := o . QueryTable ( NewDocument ( ) . TableNameWithPrefix ( ) ) . Filter ( "book_id" , bookId ) . Filter ( "parent_id" , 0 ) . All ( & docs ) ; err != nil && err != orm . ErrNoRows {
beego . Error ( "读取项目文档时出错 -> " , err )
if _ , err := o . QueryTable ( NewDocument ( ) . TableNameWithPrefix ( ) ) . Filter ( "book_id" , bookId ) . Filter ( "parent_id" , 0 ) . All ( & docs ) ; err != nil && err != orm . ErrNoRows {
beego . Error ( "读取项目文档时出错 -> " , err )
o . Rollback ( )
return err
}
if len ( docs ) > 0 {
if err := recursiveInsertDocument ( docs , o , book . BookId , 0 ) ; err != nil {
beego . Error ( "复制项目时出错 -> " , err )
if err := recursiveInsertDocument ( docs , o , book . BookId , 0 ) ; err != nil {
beego . Error ( "复制项目时出错 -> " , err )
o . Rollback ( )
return err
}
@@ -238,9 +238,10 @@ func (book *Book) Copy(identify string) error {
return o . Commit ( )
}
//递归的复制文档
func recursiveInsertDocument ( docs [ ] * Document , o orm . Ormer , bookId int , parentId int ) error {
for _ , doc := range docs {
func recursiveInsertDocument ( docs [ ] * Document , o orm . Ormer , bookId int , parentId int ) error {
for _ , doc := range docs {
docId := doc . DocumentId
doc . DocumentId = 0
@@ -248,32 +249,32 @@ func recursiveInsertDocument(docs []*Document,o orm.Ormer,bookId int,parentId in
doc . BookId = bookId
doc . Version = time . Now ( ) . Unix ( )
if _ , err := o . Insert ( doc ) ; err != nil {
beego . Error ( "插入项目时出错 -> " , err )
if _ , err := o . Insert ( doc ) ; err != nil {
beego . Error ( "插入项目时出错 -> " , err )
return err
}
var attachList [ ] * Attachment
//读取所有附件列表
if _ , err := o . QueryTable ( NewAttachment ( ) . TableNameWithPrefix ( ) ) . Filter ( "document_id" , docId ) . All ( & attachList ) ; err == nil {
for _ , attach := range attachList {
if _ , err := o . QueryTable ( NewAttachment ( ) . TableNameWithPrefix ( ) ) . Filter ( "document_id" , docId ) . All ( & attachList ) ; err == nil {
for _ , attach := range attachList {
attach . BookId = bookId
attach . DocumentId = doc . DocumentId
attach . AttachmentId = 0
if _ , err := o . Insert ( attach ) ; err != nil {
if _ , err := o . Insert ( attach ) ; err != nil {
return err
}
}
}
var subDocs [ ] * Document
if _ , err := o . QueryTable ( NewDocument ( ) . TableNameWithPrefix ( ) ) . Filter ( "parent_id" , docId ) . All ( & subDocs ) ; err != nil && err != orm . ErrNoRows {
beego . Error ( "读取文档时出错 -> " , err )
if _ , err := o . QueryTable ( NewDocument ( ) . TableNameWithPrefix ( ) ) . Filter ( "parent_id" , docId ) . All ( & subDocs ) ; err != nil && err != orm . ErrNoRows {
beego . Error ( "读取文档时出错 -> " , err )
return err
}
if len ( subDocs ) > 0 {
if len ( subDocs ) > 0 {
if err := recursiveInsertDocument ( subDocs , o , bookId , doc . DocumentId ) ; err != nil {
if err := recursiveInsertDocument ( subDocs , o , bookId , doc . DocumentId ) ; err != nil {
return err
}
}
@@ -282,11 +283,11 @@ func recursiveInsertDocument(docs []*Document,o orm.Ormer,bookId int,parentId in
}
//根据指定字段查询结果集.
func ( book * Book ) FindByField ( field string , value interface { } , cols ... string ) ( [ ] * Book , error ) {
func ( book * Book ) FindByField ( field string , value interface { } , cols ... string ) ( [ ] * Book , error ) {
o := orm . NewOrm ( )
var books [ ] * Book
_ , err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( field , value ) . All ( & books , cols ... )
_ , err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( field , value ) . All ( & books , cols ... )
return books , err
}
@@ -302,10 +303,10 @@ func (book *Book) FindByFieldFirst(field string, value interface{}) (*Book, erro
}
//根据项目标识查询项目
func ( book * Book ) FindByIdentify ( identify string , cols ... string ) ( * Book , error ) {
func ( book * Book ) FindByIdentify ( identify string , cols ... string ) ( * Book , error ) {
o := orm . NewOrm ( )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "identify" , identify ) . One ( book , cols ... )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "identify" , identify ) . One ( book , cols ... )
return book , err
}
@@ -313,14 +314,23 @@ func (book *Book) FindByIdentify(identify string,cols ...string) (*Book, error)
//分页查询指定用户的项目
func ( book * Book ) FindToPager ( pageIndex , pageSize , memberId int ) ( books [ ] * BookResult , totalCount int , err error ) {
relationship := NewRelationship ( )
o := orm . NewOrm ( )
sql1 := "SELECT COUNT(book.book_id) AS total_count FROM " + book . TableNameWithPrefix( ) + " AS book LEFT JOIN " +
relationship. TableNameWithPrefix( ) + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ? WHERE rel.relationship_id > 0 "
// sql1 := "SELECT COUNT(book.book_id) AS total_count FROM " + book. TableNameWithPrefix() + " AS book LEFT JOIN " +
// relationship. TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ? WHERE rel.relationship_id > 0 "
err = o . Raw ( sql1 , memberId ) . QueryRow ( & totalCount )
sql1 := ` SELECT
count(*) AS total_count
FROM md_books AS book
LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.member_id = ?
left join (select *
from (select book_id,team_member_id,role_id
from md_team_relationship as mtr
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id)
as team on team.book_id=book.book_id
WHERE rel.relationship_id > 0 or team.team_member_id > 0 `
err = o . Raw ( sql1 , memberId , memberId ) . QueryRow ( & totalCount )
if err != nil {
return
@@ -328,13 +338,29 @@ func (book *Book) FindToPager(pageIndex, pageSize, memberId int) (books []*BookR
offset := ( pageIndex - 1 ) * pageSize
sql2 := "SELECT book.*,rel.member_id,rel.role_id,m.account as create_name FROM " + book . TableNameWithPrefix( ) + " AS book" +
" LEFT JOIN " + relationship. TableNameWithPrefix( ) + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ?" +
" LEFT JOIN " + relationship. TableNameWithPrefix( ) + " AS rel1 ON book.book_id=rel1.book_id AND rel1.role_id=0" +
" LEFT JOIN " + NewMember ( ) . TableNameWithPrefix( ) + " AS m ON rel1.member_id=m.member_id " +
" WHERE rel.relationship_id > 0 ORDER BY book.order_index DESC,book.book_id DESC LIMIT " + fmt . Sprintf( "%d,%d", offset , pageSize )
// sql2 := "SELECT book.*,rel.member_id,rel.role_id,m.account as create_name FROM " + book. TableNameWithPrefix() + " AS book" +
// " LEFT JOIN " + relationship. TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ?" +
// " LEFT JOIN " + relationship. TableNameWithPrefix() + " AS rel1 ON book.book_id=rel1.book_id AND rel1.role_id=0" +
// " LEFT JOIN " + NewMember(). TableNameWithPrefix() + " AS m ON rel1.member_id=m.member_id " +
// " WHERE rel.relationship_id > 0 ORDER BY book.order_index DESC,book.book_id DESC LIMIT " + fmt. Sprintf( "%d,%d", offset, pageSize)
_ , err = o . Raw ( sql2 , memberId ) . QueryRows ( & books )
sql2 := ` SELECT
book.*,
case when rel.relationship_id is null then team.role_id else rel.role_id end as role_id,
m.account as create_name
FROM md_books AS book
LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.member_id = ?
left join (select *
from (select book_id,team_member_id,role_id
from md_team_relationship as mtr
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team
on team.book_id=book.book_id
LEFT JOIN md_relationship AS rel1 ON book.book_id = rel1.book_id AND rel1.role_id = 0
LEFT JOIN md_members AS m ON rel1.member_id = m.member_id
WHERE rel.relationship_id > 0 or team.team_member_id > 0
ORDER BY book.order_index, book.book_id DESC limit ?,? `
_ , err = o . Raw ( sql2 , memberId , memberId , offset , pageSize ) . QueryRows ( & books )
if err != nil {
logs . Error ( "分页查询项目列表 => " , err )
return
@@ -380,21 +406,21 @@ func (book *Book) ThoroughDeleteBook(id int) error {
o . Begin ( )
//删除附件,这里没有删除实际物理文件
_ , err = o . Raw ( "DELETE FROM " + NewAttachment ( ) . TableNameWithPrefix ( ) + " WHERE book_id=?" , book . BookId ) . Exec ( )
_ , err = o . Raw ( "DELETE FROM " + NewAttachment ( ) . TableNameWithPrefix ( ) + " WHERE book_id=?" , book . BookId ) . Exec ( )
if err != nil {
o . Rollback ( )
return err
}
//删除文档
_ , err = o . Raw ( "DELETE FROM " + NewDocument ( ) . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
_ , err = o . Raw ( "DELETE FROM " + NewDocument ( ) . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
if err != nil {
o . Rollback ( )
return err
}
//删除项目
_ , err = o . Raw ( "DELETE FROM " + book . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
_ , err = o . Raw ( "DELETE FROM " + book . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
if err != nil {
o . Rollback ( )
@@ -402,30 +428,29 @@ func (book *Book) ThoroughDeleteBook(id int) error {
}
//删除关系
_ , err = o . Raw ( "DELETE FROM " + NewRelationship ( ) . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
_ , err = o . Raw ( "DELETE FROM " + NewRelationship ( ) . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
if err != nil {
o . Rollback ( )
return err
}
//删除模板
_ , err = o . Raw ( "DELETE FROM " + NewTemplate ( ) . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
_ , err = o . Raw ( "DELETE FROM " + NewTemplate ( ) . TableNameWithPrefix ( ) + " WHERE book_id = ?" , book . BookId ) . Exec ( )
if err != nil {
o . Rollback ( )
return err
}
if book . Label != "" {
NewLabel ( ) . InsertOrUpdateMulti ( book . Label )
}
//删除导出缓存
if err := os . RemoveAll ( filepath . Join ( conf . GetExportOutputPath ( ) , strconv . Itoa ( id ) ) ) ; err != nil {
beego . Error ( "删除项目缓存失败 ->" , err )
beego . Error ( "删除项目缓存失败 ->" , err )
}
//删除附件和图片
if err := os . RemoveAll ( filepath . Join ( conf . WorkingDirectory , "uploads" , book . Identify ) ) ; err != nil {
beego . Error ( "删除项目附件和图片失败 ->" , err )
if err := os . RemoveAll ( filepath . Join ( conf . WorkingDirectory , "uploads" , book . Identify ) ) ; err != nil {
beego . Error ( "删除项目附件和图片失败 ->" , err )
}
return o . Commit ( )
@@ -433,25 +458,35 @@ func (book *Book) ThoroughDeleteBook(id int) error {
}
//分页查找系统首页数据.
func ( book * Book ) FindForHomeToPager ( pageIndex , pageSize , member_i d int ) ( books [ ] * BookResult , totalCount int , err error ) {
func ( book * Book ) FindForHomeToPager ( pageIndex , pageSize , memberI d int ) ( books [ ] * BookResult , totalCount int , err error ) {
o := orm . NewOrm ( )
offset := ( pageIndex - 1 ) * pageSize
//如果是登录用户
if member_i d > 0 {
sql1 := " SELECT COUNT(*) FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ? WHERE relationship_id > 0 OR book.privately_owned = 0"
err = o . Raw ( sql1 , member_id ) . QueryRow ( & totalCount )
if memberI d > 0 {
sql1 := ` SELECT COUNT(*)
FROM md_books AS book
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
left join (select *
from (select book_id,team_member_id,role_id
from md_team_relationship as mtr
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team on team.book_id=book.book_id
WHERE relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0 `
err = o . Raw ( sql1 , memberId , memberId ) . QueryRow ( & totalCount )
if err != nil {
return
}
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
WHERE rel.relationship_id > 0 OR book.privately_owned = 0 ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,? `
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
left join (select *
from (select book_id,team_ member_id,role_id
from md_team_relationship as mtr
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team on team.book_id=book.book_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
WHERE rel.relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0 ORDER BY order_index ,book.book_id DESC LIMIT ?,? `
_ , err = o . Raw ( sql2 , member_i d , offset , pageSize ) . QueryRows ( & books )
_ , err = o . Raw ( sql2 , memberId , memberI d , offset , pageSize ) . QueryRows ( & books )
} else {
count , err1 := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "privately_owned" , 0 ) . Count ( )
@@ -470,9 +505,7 @@ func (book *Book) FindForHomeToPager(pageIndex, pageSize, member_id int) (books
_ , err = o . Raw ( sql , offset , pageSize ) . QueryRows ( & books )
}
return
}
//分页全局搜索.
@@ -483,19 +516,31 @@ func (book *Book) FindForLabelToPager(keyword string, pageIndex, pageSize, membe
offset := ( pageIndex - 1 ) * pageSize
//如果是登录用户
if memberId > 0 {
sql1 := " SELECT COUNT(*) FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ? WHERE (relationship_id > 0 OR book.privately_owned = 0) AND book.label LIKE ?"
sql1 := ` SELECT COUNT(*)
FROM md_books AS book
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
left join (select *
from (select book_id,team_member_id,role_id
from md_team_relationship as mtr
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team on team.book_id = book.book_id
WHERE (relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0) AND book.label LIKE ? `
err = o . Raw ( sql1 , memberId , keyword ) . QueryRow ( & totalCount )
err = o . Raw ( sql1 , memberId , memberId , keyword ) . QueryRow ( & totalCount )
if err != nil {
return
}
sql2 := ` SELECT book.*,rel1.*,member.account AS create_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 (select * from (select book_id,team_member_id,role_id
from md_team_relationship as mtr
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team
on team.book_id = book.book_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
WHERE (rel.relationship_id > 0 OR book.privately_owned = 0) AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,? `
WHERE (rel.relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0)
AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,? `
_ , err = o . Raw ( sql2 , memberId , keyword , offset , pageSize ) . QueryRows ( & books )
_ , err = o . Raw ( sql2 , memberId , memberId , keyword , offset , pageSize ) . QueryRows ( & books )
return
@@ -529,7 +574,7 @@ func (book *Book) ReleaseContent(bookId int) {
_ , err := o . QueryTable ( NewDocument ( ) . TableNameWithPrefix ( ) ) . Filter ( "book_id" , bookId ) . All ( & docs )
if err != nil {
beego . Error ( "发布失败 =>" , bookId , err )
beego . Error ( "发布失败 =>" , bookId , err )
return
}
for _ , item := range docs {
@@ -544,12 +589,12 @@ func (book *Book) ResetDocumentNumber(bookId int) {
totalCount , err := o . QueryTable ( NewDocument ( ) . TableNameWithPrefix ( ) ) . Filter ( "book_id" , bookId ) . Count ( )
if err == nil {
_ , err = o . Raw ( "UPDATE md_books SET doc_count = ? WHERE book_id = ?" , int ( totalCount ) , bookId ) . Exec ( )
_ , err = o . Raw ( "UPDATE md_books SET doc_count = ? WHERE book_id = ?" , int ( totalCount ) , bookId ) . Exec ( )
if err != nil {
beego . Error ( "重置文档数量失败 =>" , bookId , err )
beego . Error ( "重置文档数量失败 =>" , bookId , err )
}
} else {
beego . Error ( "获取文档数量失败 =>" , bookId , err )
beego . Error ( "获取文档数量失败 =>" , bookId , err )
}
}
@@ -568,7 +613,7 @@ func (book *Book) ImportBook(zipPath string) error {
tempPath := filepath . Join ( os . TempDir ( ) , md5str )
if err := os . MkdirAll ( tempPath , 0766 ) ; err != nil {
beego . Error ( "创建导入目录出错 => " , err )
beego . Error ( "创建导入目录出错 => " , err )
}
//如果加压缩失败
if err := ziptil . Unzip ( zipPath , tempPath ) ; err != nil {
@@ -613,7 +658,7 @@ func (book *Book) ImportBook(zipPath string) error {
ext := filepath . Ext ( info . Name ( ) )
//如果是Markdown文件
if strings . EqualFold ( ext , ".md" ) || strings . EqualFold ( ext , ".markdown" ) {
beego . Info ( "正在处理 =>" , path , info . Name ( ) )
beego . Info ( "正在处理 =>" , path , info . Name ( ) )
doc := NewDocument ( )
doc . BookId = book . BookId
doc . MemberId = book . MemberId
@@ -644,9 +689,9 @@ func (book *Book) ImportBook(zipPath string) error {
//如果是本地路径,则需要将图片复制到项目目录
if ! strings . HasPrefix ( imageUrl , "http://" ) &&
! strings . HasPrefix ( imageUrl , "https://" ) &&
! strings . HasPrefix ( imageUrl , "ftp://" ) {
! strings . HasPrefix ( imageUrl , "ftp://" ) {
//如果路径中存在参数
if l := strings . Index ( imageUrl , "?" ) ; l > 0 {
if l := strings . Index ( imageUrl , "?" ) ; l > 0 {
imageUrl = imageUrl [ : l ]
}
@@ -665,7 +710,7 @@ func (book *Book) ImportBook(zipPath string) error {
if filetil . FileExists ( imageUrl ) {
filetil . CopyFile ( imageUrl , dstFile )
imageUrl = strings . TrimPrefix ( strings . Replace ( dstFile , "\\" , "/" , - 1 ) , strings . Replace ( conf . WorkingDirectory , "\\" , "/" , - 1 ) )
imageUrl = strings . TrimPrefix ( strings . Replace ( dstFile , "\\" , "/" , - 1 ) , strings . Replace ( conf . WorkingDirectory , "\\" , "/" , - 1 ) )
if ! strings . HasPrefix ( imageUrl , "/" ) && ! strings . HasPrefix ( imageUrl , "\\" ) {
imageUrl = "/" + imageUrl
@@ -685,7 +730,7 @@ func (book *Book) ImportBook(zipPath string) error {
}
}
imageUrl = strings . Replace ( strings . TrimSuffix ( image , originalImageUrl + ")" ) + conf . URLForWithCdnImage ( imageUrl ) + ")" , "\\" , "/" , - 1 )
imageUrl = strings . Replace ( strings . TrimSuffix ( image , originalImageUrl + ")" ) + conf . URLForWithCdnImage ( imageUrl ) + ")" , "\\" , "/" , - 1 )
return imageUrl
} )
@@ -697,18 +742,18 @@ func (book *Book) ImportBook(zipPath string) error {
originalLink := links [ 0 ] [ 2 ]
var linkPath string
var err error
if strings . HasPrefix ( originalLink , "<" ) {
originalLink = strings . TrimPrefix ( originalLink , "<" )
if strings . HasPrefix ( originalLink , "<" ) {
originalLink = strings . TrimPrefix ( originalLink , "<" )
}
if strings . HasSuffix ( originalLink , ">" ) {
originalLink = strings . TrimSuffix ( originalLink , ">" )
if strings . HasSuffix ( originalLink , ">" ) {
originalLink = strings . TrimSuffix ( originalLink , ">" )
}
//如果是从根目录开始,
if strings . HasPrefix ( originalLink , "/" ) {
linkPath , err = filepath . Abs ( filepath . Join ( tempPath , originalLink ) )
} else if strings . HasPrefix ( originalLink , "./" ) {
linkPath , err = filepath . Abs ( filepath . Join ( filepath . Dir ( path ) , originalLink [ 1 : ] ) )
} else {
} else {
linkPath , err = filepath . Abs ( filepath . Join ( filepath . Dir ( path ) , originalLink ) )
}
@@ -738,8 +783,8 @@ func (book *Book) ImportBook(zipPath string) error {
link = strings . TrimSuffix ( link , originalLink + ")" ) + tempLink + ")"
}
} else {
beego . Info ( "文件不存在 ->" , linkPath )
} else {
beego . Info ( "文件不存在 ->" , linkPath )
}
}
@@ -806,7 +851,7 @@ func (book *Book) ImportBook(zipPath string) error {
} else {
//如果当前目录下存在Markdown文件, 则需要创建此节点
if filetil . HasFileOfExt ( path , [ ] string { ".md" , ".markdown" } ) {
beego . Info ( "正在处理 =>" , path , info . Name ( ) )
beego . Info ( "正在处理 =>" , path , info . Name ( ) )
identify := strings . Replace ( strings . Trim ( strings . TrimPrefix ( path , tempPath ) , "/" ) , "/" , "-" , - 1 )
if ok , err := regexp . MatchString ( ` [a-z]+[a-zA-Z0-9_.\-]*$ ` , identify ) ; ! ok || err != nil {
identify = "import-" + identify
@@ -850,3 +895,31 @@ func (book *Book) ImportBook(zipPath string) error {
book . ReleaseContent ( book . BookId )
return err
}
func ( book * Book ) FindForRoleId ( bookId , memberId int ) ( conf . BookRole , error ) {
o := orm . NewOrm ( )
var relationship Relationship
err := NewRelationship ( ) . QueryTable ( ) . Filter ( "book_id" , bookId ) . Filter ( "member_id" , memberId ) . One ( & relationship )
if err != nil && err != orm . ErrNoRows {
return 0 , err
}
if err == nil {
return relationship . RoleId , nil
}
sql := ` select role_id
from md_team_relationship as mtr
left join md_team_member as mtm using (team_id)
where mtr.book_id = ? and mtm.member_id = ? order by mtm.role_id asc limit 1; `
var roleId int
err = o . Raw ( sql , bookId , memberId ) . QueryRow ( & roleId )
if err != nil {
beego . Error ( "查询用户项目角色出错 -> book_id=" , bookId , " member_id=" , memberId , err )
return 0 , nil
}
return conf . BookRole ( roleId ) , nil
}