diff --git a/app/service/FileService.go b/app/service/FileService.go index defb377..37bd4f9 100644 --- a/app/service/FileService.go +++ b/app/service/FileService.go @@ -110,7 +110,7 @@ func (this *FileService) UpdateImage(userId, fileId, title string) bool { // 要判断是否具有权限 // userId是否具有fileId的访问权限 func (this *FileService) GetFile(userId, fileId string) string { - if userId == "" || fileId == "" { + if fileId == "" { return "" } @@ -124,7 +124,7 @@ func (this *FileService) GetFile(userId, fileId string) string { // 1. 判断权限 // 是否是我的文件 - if file.UserId.Hex() == userId { + if userId != "" && file.UserId.Hex() == userId { return path } diff --git a/app/service/NoteImageService.go b/app/service/NoteImageService.go index 2840791..11dcf6d 100644 --- a/app/service/NoteImageService.go +++ b/app/service/NoteImageService.go @@ -39,8 +39,6 @@ func (this *NoteImageService) UpdateNoteImages(userId, noteId, content string) b // 删除旧的 db.DeleteAll(db.NoteImages, bson.M{"NoteId": bson.ObjectIdHex(noteId)}) - Log("--------ii--") - // 添加新的 var fileId string noteImage := info.NoteImage{NoteId: bson.ObjectIdHex(noteId)} @@ -54,8 +52,6 @@ func (this *NoteImageService) UpdateNoteImages(userId, noteId, content string) b Log(fileId) // 判断是否是我的文件 if fileService.IsMyFile(userId, fileId) { - Log("?????") - Log("<><><>") noteImage.ImageId = bson.ObjectIdHex(fileId) db.Insert(db.NoteImages, noteImage) } @@ -66,4 +62,41 @@ func (this *NoteImageService) UpdateNoteImages(userId, noteId, content string) b } return true -} \ No newline at end of file +} + +// 复制图片, 把note的图片都copy给我, 且修改noteContent图片路径 +func (this *NoteImageService) CopyNoteImages(fromNoteId, fromUserId, newNoteId, content, toUserId string) string { + // 得到fromNoteId的noteImages, 如果为空, 则直接返回content + noteImages := []info.NoteImage{} + db.ListByQWithFields(db.NoteImages, bson.M{"NoteId": bson.ObjectIdHex(fromNoteId)}, []string{"ImageId"}, ¬eImages) + + if len(noteImages) == 0 { + return content; + } + + // + // 把fileId=1232替换成新的 + replaceMap := map[string]string{} + for _, noteImage := range noteImages { + imageId := noteImage.ImageId.Hex() + ok, newImageId := fileService.CopyImage(fromUserId, imageId, toUserId) + if ok { + replaceMap[imageId] = newImageId + } + } + + if len(replaceMap) > 0 { + // 替换之 + reg, _ := regexp.Compile("outputImage\\?fileId=([a-z0-9A-Z]{24})") + content = reg.ReplaceAllStringFunc(content, func(each string) string { + // each=outputImage?fileId=541bd2f599c37b4f3r000003 + fileId := each[len(each)-24:] // 得到后24位, 也即id + if replaceFileId, ok := replaceMap[fileId]; ok { + return "outputImage?fileId=" + replaceFileId + } + return each + }); + } + + return content; +} diff --git a/app/service/NoteService.go b/app/service/NoteService.go index dd3ce33..8f25aad 100644 --- a/app/service/NoteService.go +++ b/app/service/NoteService.go @@ -338,9 +338,12 @@ func (this *NoteService) CopyNote(noteId, notebookId, userId string) info.Note { } // 复制别人的共享笔记给我 -// TODO 判断是否共享了给我 +// 将别人可用的图片转为我的图片, 复制图片 func (this *NoteService) CopySharedNote(noteId, notebookId, fromUserId, myUserId string) info.Note { - if notebookService.IsMyNotebook(notebookId, myUserId) { + Log(shareService.HasSharedNote(noteId, myUserId) || shareService.HasSharedNotebook(noteId, myUserId, fromUserId)) + // 判断是否共享了给我 + if notebookService.IsMyNotebook(notebookId, myUserId) && + (shareService.HasSharedNote(noteId, myUserId) || shareService.HasSharedNotebook(noteId, myUserId, fromUserId)) { note := this.GetNote(noteId, fromUserId) if note.NoteId == "" { return info.Note{} @@ -354,10 +357,15 @@ func (this *NoteService) CopySharedNote(noteId, notebookId, fromUserId, myUserId note.IsTop = false note.IsBlog = false // 别人的可能是blog + note.ImgSrc = "" // 为什么清空, 因为图片需要复制, 先清空 + // content noteContent.NoteId = note.NoteId noteContent.UserId = note.UserId + // 复制图片, 把note的图片都copy给我, 且修改noteContent图片路径 + noteContent.Content = noteImageService.CopyNoteImages(noteId, fromUserId, note.NoteId.Hex(), noteContent.Content, myUserId) + // 添加之 note = this.AddNoteAndContent(note, noteContent, note.UserId); @@ -375,8 +383,10 @@ func (this *NoteService) CopySharedNote(noteId, notebookId, fromUserId, myUserId // shareService call // [ok] func (this *NoteService) GetNotebookId(noteId string) bson.ObjectId { - note := &info.Note{} - db.Get(db.Notes, noteId, note) + note := info.Note{} + // db.Get(db.Notes, noteId, ¬e) + // LogJ(note) + db.GetByQWithFields(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, []string{"NotebookId"}, ¬e) return note.NotebookId } diff --git a/app/service/ShareService.go b/app/service/ShareService.go index f13a648..1e13c35 100644 --- a/app/service/ShareService.go +++ b/app/service/ShareService.go @@ -3,7 +3,7 @@ package service import ( "github.com/leanote/leanote/app/info" "github.com/leanote/leanote/app/db" -// . "github.com/leanote/leanote/app/lea" + . "github.com/leanote/leanote/app/lea" "gopkg.in/mgo.v2/bson" "time" "sort" @@ -338,10 +338,12 @@ func (this *ShareService) HasSharedNote(noteId, myUserId string) bool { return db.Has(db.ShareNotes, bson.M{"ToUserId": bson.ObjectIdHex(myUserId), "NoteId": bson.ObjectIdHex(noteId)}) } // noteId的notebook是否共享了给我 -func (this *ShareService) hasSharedNotebook(noteId, myUserId, sharedUserId string) bool { - note := noteService.GetNote(noteId, sharedUserId) - if note.NoteId != "" { - return db.Has(db.ShareNotebooks, bson.M{"NotebookId": note.NotebookId, +func (this *ShareService) HasSharedNotebook(noteId, myUserId, sharedUserId string) bool { + notebookId := noteService.GetNotebookId(noteId) + Log(noteId) + Log(notebookId) + if notebookId != "" { + return db.Has(db.ShareNotebooks, bson.M{"NotebookId": notebookId, "UserId": bson.ObjectIdHex(sharedUserId), "ToUserId": bson.ObjectIdHex(myUserId), }) @@ -355,7 +357,7 @@ func (this *ShareService) GetShareNoteContent(noteId, myUserId, sharedUserId str noteContent = info.NoteContent{} // 是否单独共享了该notebook // 或者, 其notebook共享了我 - if this.HasSharedNote(noteId, myUserId) || this.hasSharedNotebook(noteId, myUserId, sharedUserId) { + if this.HasSharedNote(noteId, myUserId) || this.HasSharedNotebook(noteId, myUserId, sharedUserId) { db.Get(db.NoteContents, noteId, ¬eContent) } else { }