share note to unregistered users

share note to unregistered users
This commit is contained in:
binnchx
2015-01-03 17:57:52 +08:00
parent e2e90f8618
commit 599e54de5b
5 changed files with 208 additions and 2 deletions

View File

@@ -36,6 +36,8 @@ func (c Share) AddShareNote(noteId string, emails []string, perm int) revel.Resu
return c.RenderJson(status)
}
// 添加共享notebook
func (c Share) AddShareNotebook(notebookId string, emails []string, perm int) revel.Result {
status := make(map[string]info.Re, len(emails))
@@ -186,3 +188,32 @@ func (c Share) DeleteShareNotebookGroup(notebookId, groupId string) revel.Result
func (c Share) UpdateShareNotebookGroupPerm(notebookId, groupId string, perm int) revel.Result {
return c.AddShareNotebookGroup(notebookId, groupId, perm)
}
//生成笔记分享密码及更新到db
func (c Share) GenShareLinkPass(noteId string) revel.Result {
pass, ok := shareService.GenSharePass(noteId)
re := info.Re{Ok : true, Item : pass, List: ok}
return c.RenderJson(re);
}
func (c Share) QuerySharePass(noteId string) revel.Result {
pass := shareService.QuerySharePass(noteId)
re := info.Re{Ok : true, Item : pass}
return c.RenderJson(re);
}
//展示分享笔记
func (c Share) ShowShareNote(noteId string) revel.Result {
// note := noteService.GetNote(noteId, c.GetUserId())
//
// c.RenderArgs["title"] = note.UserId
// c.RenderArgs["title"] = note.UserId
return c.RenderTemplate("share/show_share_note.html")
}
//验证分享密码
//func (c Share) Verify4ShareNote(noteId string, sharePass int) revel.Result {
// ok = shareService.Verify4ShareNote(noteId, sharePass);
// re := info.Re{Ok : true, Item : pass}
//
//}

View File

@@ -40,6 +40,8 @@ type Note struct {
RecommendTime time.Time `RecommendTime,omitempty` // 推荐时间
PublicTime time.Time `PublicTime,omitempty` // 发表时间, 公开为博客则设置
UpdatedUserId bson.ObjectId `bson:"UpdatedUserId"` // 如果共享了, 并可写, 那么可能是其它他修改了
SharePass int `SharePass` //分享笔记的密码
}
// 内容

View File

@@ -7,6 +7,7 @@ import (
"gopkg.in/mgo.v2/bson"
"time"
"sort"
"math/rand"
)
// 共享Notebook, Note服务
@@ -336,12 +337,14 @@ func (this *ShareService) AddShareNote(noteId string, perm int, userId, email st
"ToUserId": bson.ObjectIdHex(toUserId),
});
shareNote := info.ShareNote{NoteId: bson.ObjectIdHex(noteId),
UserId: bson.ObjectIdHex(userId),
ToUserId: bson.ObjectIdHex(toUserId),
Perm: perm,
CreatedTime: time.Now(),
}
return db.Insert(db.ShareNotes, shareNote), "", toUserId
}
@@ -776,3 +779,22 @@ func (this *ShareService) DeleteShareNotebookGroup(userId, notebookId, groupId s
"ToGroupId": bson.ObjectIdHex(groupId),
});
}
func (this *ShareService) GenSharePass(noteId string) (int, bool) {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
pass := 1000 + r.Intn(10000)
if pass >= 10000 {
pass -= 1000
}
ok := db.Update(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, bson.M{"$set": bson.M{"SharePass": pass}})
return pass, ok
}
func (this *ShareService) QuerySharePass(noteId string) int {
note := &info.Note{}
db.Get(db.Notes, noteId, note)
return note.SharePass
}

View File

@@ -5,11 +5,14 @@
<h4 class="modal-title" id="modalTitle">{{msg . "share"}} <b>{{.title}}</b></h4>
</div>
{{$noteOrNotebookId := .noteOrNotebookId}}
{{$isNote := .isNote}}
<div class="modal-body">
<ul id="myTab" class="nav nav-tabs">
<li class="active"><a href="#baseInfo" data-toggle="tab">分享给好友</a></li>
<li class=""><a href="#groupInfo" data-toggle="tab">分享给项目组</a></li>
{{if $isNote}}
<li class=""><a href="#shareInfo" data-toggle="tab">分享给未注册好友</a></li>
{{end}}
</ul>
<div class="tab-content">
@@ -95,6 +98,19 @@
{{end}}
</table>
</div>
<div class="tab-pane" id="shareInfo">
<p>
<button class="btn btn-default" id="genShareLink">生成该笔记的分享链接和密码</button>
<span id="showMsg"></span>
</p>
<br>
分享链接:<input type="text" id="shareLink" value="" size=50> <br/><br/>
查看密码:<input type="text" id="sharePass" value="" />
</div>
</div>
</div>
@@ -108,11 +124,40 @@
<script>
Share.dialogIsNote = {{.isNote}};
Share.dialogNoteOrNotebookId = '{{.noteOrNotebookId}}';
$(function() {
setTimeout(function() {
$("#tr1 #friendsEmail").focus();
}, 500);
if (Share.dialogIsNote) {
var url = "/share/querySharePass";
var data = {noteId: Share.dialogNoteOrNotebookId};
ajaxPost(url, data, function(re) {
if(reIsOk(re)) {
if (re.Item >= 1000 && re.Item < 10000) {
var shareLink = "https://leanote.com/share/" + '{{.noteOrNotebookId}}';
$("#shareLink").val(shareLink);
$("#sharePass").val(re.Item);
}
}
});
}
$("#shareLink").hover(function() {
$("#shareLink").focus(function(){
$(this).css({'background-color' : '#f5f5dc'});
}).select();
})
$("#sharePass").hover(function() {
$("#sharePass").focus(function(){
$(this).css({'background-color' : '#f5f5dc'});
}).select();
})
// 分享/删除给分组
$("#groupInfo").on("click", ".btn-share-or-not", function() {
var $t = $(this);
@@ -155,6 +200,28 @@ $("#groupInfo").on("click", ".btn-share-or-not", function() {
});
});
//生成分享链接和密码
$("#genShareLink").on("click", function() {
var sharePass = $("#sharePass").val();
if (sharePass != '' && sharePass > 1000 ) {
$("#showMsg").html("<font color='red'>不能重复生成分享链接和密码</font>");
return;
}
var url = "/share/genShareLinkPass";
var shareLink = "https://leanote.com/share/note/" + '{{.noteOrNotebookId}}';
var data = {noteId: Share.dialogNoteOrNotebookId};
ajaxPost(url, data, function(re) {
if(reIsOk(re)) {
$("#shareLink").val(shareLink);
$("#sharePass").val(re.Item);
}
});
});
$(".group-perm").click(function() {
var $t = $(this);
var $ptr = $t.closest("tr");
@@ -179,5 +246,6 @@ $(".group-perm").click(function() {
});
});
});
</script>

View File

@@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="apple-touch-fullscreen" content="yes">
<meta name=”apple-mobile-web-app-capable” content=”yes” />
<meta name="keywords" content="leanote,leanote.com">
<meta name="description" content="leanote, Not Just A Notebook">
<title>leanote, Not Just A Notebook</title>
<link href="/css/bootstrap.css" rel="stylesheet" />
<!-- 先加载, 没有样式, 宽度不定 -->
<link rel="stylesheet" href="tinymce/skins/custom/skin.min.css" rel="stylesheet"/>
<!-- leanote css -->
<link href="css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet" />
<link href="css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<script>
var hash = location.hash;
if(hash == "#writing") {
var files = '<link rel="stylesheet" href="css/theme/writting-overwrite.css" type="text/css" id="themeLink" />';
} else {
var files ='<link rel="stylesheet" href="css/theme/{{if .userInfo.Theme}}{{.userInfo.Theme}}{{else}}default{{end}}.css" type="text/css" id="themeLink" />';
}
document.write(files);
</script>
<!-- For Develop writting mod -->
<script>
function log(o) {
}
</script>
查看分享笔记{{.noteId}}
您需要输入分享密码才能查看:<br/>
<input type="password" id="sharePass" /><br/>
<button id="showShareNote">点击查看</button>
<script>
var noteId = {{ .noteId }};
var sharePass = $("#sharePass").val();
$(function() {
$("#showShareNote").on("click", function() {
var url = "/share/verify4ShareNote";
var data = {noteId: noteId};
data.sharePass = $("#sharePass").val();
ajaxPost(url, data, function(re) {
if(reIsOk(re)) {
$("#shareLink").val(shareLink);
$("#sharePass").val(re.Item);
}
});
});
})
</script>
<script src="js/jquery-1.9.0.min.js"></script>
<script src="js/jquery.ztree.all-3.5.js"></script>
<script src="js/i18n/msg.{{.locale}}.js"></script>
<script src="js/common-min.js"></script>
<script src="tinymce/tinymce.js"></script>
<script src="js/app/page-min.js"></script>
<script src="/js/jQuery-slimScroll-1.3.0/jquery.slimscroll.js"></script>
<script src="/js/contextmenu/jquery.contextmenu-min.js"></script>
<script src="js/jquery-cookie.js"></script>
<script src="js/bootstrap-min.js"></script>
<script src="js/app/note-min.js"></script>
<script src="js/app/tag-min.js"></script>
<script src="js/app/notebook-min.js"></script>
<script src="js/app/share-min.js"></script>
<script src="js/object_id-min.js"></script>
<script src="js/ZeroClipboard/ZeroClipboard-min.js"></script>