Skip to content

Commit 1125e5d

Browse files
committed
文档浏览页面优化;禁止下载功能
1 parent d16969a commit 1125e5d

File tree

9 files changed

+135
-81
lines changed

9 files changed

+135
-81
lines changed

TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
- [ ] 更换[KindEditor](https://www.oschina.net/news/104631/kindeditor-upload-vulnerability)
5151
- [ ] 解决文件路径问题(调用 cmd 的时候,用文件的绝对路径)
5252
- [ ] 文档浏览方式,实现对 svg、jpg和png 的支持
53-
- [ ] 文档评分人数统计问题
53+
- [ ] 文档评分人数统计问题(评分出现-1的情况)
5454
- [ ] 文档上传间隔频率控制
5555

5656
---------------

controllers/HomeControllers/UserController.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ func (this *UserController) Sign() {
442442
log := models.CoinLog{
443443
Uid: this.IsLogin,
444444
Coin: this.Sys.Sign,
445-
Log: fmt.Sprintf("于%v签到成功,增加 %v 个金币", time.Now().Format("2006-01-02 15:04:05"), this.Sys.Sign),
445+
Log: fmt.Sprintf("签到成功,获得 %v 个金币", this.Sys.Sign),
446446
}
447447
models.NewCoinLog().LogRecord(log)
448448
}

controllers/HomeControllers/ViewController.go

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ package HomeControllers
33
import (
44
"fmt"
55

6-
"github.com/astaxie/beego"
7-
86
"strings"
97

108
"time"
119

1210
"github.com/TruthHun/DocHub/helper"
1311
"github.com/TruthHun/DocHub/models"
12+
"github.com/astaxie/beego"
1413
"github.com/astaxie/beego/orm"
1514
)
1615

@@ -25,70 +24,60 @@ func (this *ViewController) Get() {
2524
return
2625
}
2726

28-
doc, rows, err := models.NewDocument().GetById(id)
29-
if err != nil || rows != 1 {
30-
this.Abort("404")
31-
}
32-
//文档已被删除
33-
if fmt.Sprintf("%v", doc["Status"]) == "-1" {
27+
doc, err := models.NewDocument().GetById(id)
28+
29+
// 文档不存在、查询错误、被删除,报 404
30+
if err != nil || doc.Id <= 0 || doc.Status < models.DocStatusConverting {
3431
this.Abort("404")
3532
}
3633

37-
var chanelTitle, parentTitle, childrenTitle interface{}
38-
39-
breadcrumb, _, _ := models.GetList(models.GetTableCategory(), 1, 3, orm.NewCondition().And("Id__in", doc["Cid"], doc["ChanelId"], doc["Pid"]))
40-
for _, v := range breadcrumb {
41-
switch fmt.Sprintf("%v", v["Id"]) {
42-
case fmt.Sprintf("%v", doc["ChanelId"]):
43-
this.Data["CrumbChanel"] = v
44-
chanelTitle = v["Title"]
45-
this.Data["Chanel"] = v["Alias"]
46-
case fmt.Sprintf("%v", doc["Pid"]):
47-
this.Data["CrumbParent"] = v
48-
parentTitle = v["Title"]
49-
case fmt.Sprintf("%v", doc["Cid"]):
50-
childrenTitle = v["Title"]
51-
//热门文档,根据当前所属分类去获取
34+
var cates []models.Category
35+
cates, _ = models.NewCategory().GetCategoriesById(doc.Cid, doc.ChanelId, doc.Pid)
36+
breadcrumb := make(map[string]models.Category)
37+
for _, cate := range cates {
38+
switch cate.Id {
39+
case doc.ChanelId:
40+
breadcrumb["Chanel"] = cate
41+
case doc.Pid:
42+
breadcrumb["Parent"] = cate
43+
case doc.Cid:
5244
TimeStart := int(time.Now().Unix()) - this.Sys.TimeExpireHotspot
53-
//热门文档
54-
this.Data["Hots"], _, _ = models.NewDocument().SimpleList(fmt.Sprintf("di.Cid=%v and di.TimeCreate>%v", doc["Cid"], TimeStart), 10, "Dcnt")
55-
//最新文档
56-
this.Data["News"], _, _ = models.NewDocument().SimpleList(fmt.Sprintf("di.Cid=%v", doc["Cid"]), 10, "Id")
57-
this.Data["CrumbChildren"] = v
45+
this.Data["Hots"], _, _ = models.NewDocument().SimpleList(fmt.Sprintf("di.Cid=%v and di.TimeCreate>%v", doc.Cid, TimeStart), 10, "Dcnt")
46+
this.Data["Latest"], _, _ = models.NewDocument().SimpleList(fmt.Sprintf("di.Cid=%v", doc.Cid), 10, "Id")
47+
breadcrumb["Child"] = cate
5848
}
5949
}
50+
this.Data["Breadcrumb"] = breadcrumb
6051

61-
this.Data["IsViewer"] = true
6252
models.Regulate(models.GetTableDocumentInfo(), "Vcnt", 1, "`Id`=?", id)
63-
this.Data["PageId"] = "wenku-content"
64-
this.Data["Doc"] = doc
65-
pages := helper.Interface2Int(doc["Page"])
66-
PageShow := 5
67-
if pages > PageShow {
68-
this.Data["PreviewPages"] = make([]string, PageShow)
53+
54+
pageShow := 5
55+
if doc.Page > pageShow {
56+
this.Data["PreviewPages"] = make([]string, pageShow)
6957
} else {
70-
this.Data["PreviewPages"] = make([]string, pages)
58+
this.Data["PreviewPages"] = make([]string, doc.Page)
7159
}
72-
this.Data["TotalPages"] = pages
73-
this.Data["PageShow"] = PageShow
60+
this.Data["PageShow"] = pageShow
61+
62+
this.Xsrf()
7463
if this.Data["Comments"], _, err = models.NewDocumentComment().GetCommentList(id, 1, 10); err != nil {
7564
helper.Logger.Error(err.Error())
7665
}
7766

78-
content := models.NewDocText().GetDescByMd5(doc["Md5"], 2000)
79-
this.Data["Content"] = content
80-
81-
seoTitle := fmt.Sprintf("[%v·%v·%v] ", chanelTitle, parentTitle, childrenTitle) + doc["Title"].(string)
82-
seoKeywords := fmt.Sprintf("%v,%v,%v,", chanelTitle, parentTitle, childrenTitle) + doc["Keywords"].(string)
83-
seoDesc := doc["Description"].(string) + content
84-
seoDesc = beego.Substr(seoDesc, 0, 255)
67+
content := models.NewDocText().GetDescByMd5(doc.Md5, 5000)
68+
seoTitle := fmt.Sprintf("%v - %v · %v · %v ", doc.Title, breadcrumb["Chanel"].Title, breadcrumb["Parent"].Title, breadcrumb["Child"].Title)
69+
seoKeywords := fmt.Sprintf("%v,%v,%v,", breadcrumb["Chanel"].Title, breadcrumb["Parent"].Title, breadcrumb["Child"].Title) + doc.Keywords
70+
seoDesc := beego.Substr(doc.Description+content, 0, 255)
8571
this.Data["Seo"] = models.NewSeo().GetByPage("PC-View", seoTitle, seoKeywords, seoDesc, this.Sys.Site)
86-
this.Xsrf()
87-
ext := fmt.Sprintf("%v", doc["Ext"])
72+
this.Data["Content"] = content
8873
this.Data["Reasons"] = models.NewSys().GetReportReasons()
89-
if pages == 0 && (ext == "txt" || ext == "chm" || ext == "umd" || ext == "epub" || ext == "mobi") {
74+
this.Data["IsViewer"] = true
75+
this.Data["PageId"] = "wenku-content"
76+
this.Data["Doc"] = doc
77+
78+
doc.Ext = strings.TrimLeft(doc.Ext, ".")
79+
if doc.Page == 0 && (doc.Ext == "chm" || doc.Ext == "umd") { //不能预览的文档
9080
this.Data["OnlyCover"] = true
91-
//不能预览的文档
9281
this.TplName = "disabled.html"
9382
} else {
9483
this.TplName = "svg.html"

models/CategoryModel.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,16 @@ func (this *Category) GetAll(status ...bool) (count int64, categories []Category
8585
count, _ = q.OrderBy("sort").All(&categories)
8686
return
8787
}
88+
89+
func (this *Category) GetCategoriesById(id ...interface{}) (cates []Category, err error) {
90+
if len(id) == 0 {
91+
return
92+
}
93+
94+
_, err = orm.NewOrm().QueryTable(this).Filter("Id__in", id...).All(&cates)
95+
if err != nil {
96+
helper.Logger.Error(err.Error())
97+
}
98+
99+
return
100+
}

models/DocTextModel.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package models
22

33
import (
4-
"github.com/TruthHun/DocHub/helper"
4+
"github.com/astaxie/beego"
55
"github.com/astaxie/beego/orm"
66
)
77

@@ -30,7 +30,7 @@ func (this *DocText) GetDescByMd5(md5str interface{}, length ...int) (desc strin
3030
if len(length) > 0 {
3131
l = length[0]
3232
}
33-
return helper.SubStr(this.Content, 0, l)
33+
return beego.Substr(this.Content, 0, l)
3434
}
3535

3636
//根据存档表的id获取文档摘要,默认获取255个字符长度

models/DocumentModel.go

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,41 @@ func GetTableDocumentStore() string {
8989
return getTable("document_store")
9090
}
9191

92+
// 完整的文档内容
93+
type fullDocument struct {
94+
Id int `orm:"column(Id)"`
95+
Title string `orm:"column(Title)"` //文档名称【用户自定义的文档标题】
96+
Filename string `orm:"column(Filename)"` //文件名[文件的原文件名]
97+
Keywords string `orm:"column(Keywords)"` //文档标签、关键字
98+
Description string `orm:"column(Description)"` //文档摘要
99+
Md5 string `orm:"column(Md5)"` //文档md5
100+
Ext string `orm:"column(Ext)"` //文档扩展名,如pdf、xls等
101+
ExtCate string `orm:"column(ExtCate)"` //文档扩展名分类:word、ppt、text、pdf、xsl,code(这些分类配合图标一起使用,如word_24.png)
102+
ExtNum int `orm:"column(ExtNum)"` //文档后缀的对应数字,主要是在coreseek搭建站内搜索时用到
103+
Page int `orm:"column(Page)"` //文档页数
104+
PreviewPage int `orm:"column(PreviewPage)"` //当前文档可预览页数
105+
Size int `orm:"column(Size)"` //文档大小
106+
ModTime int `orm:"column(ModTime)"` //文档修改编辑时间
107+
PreviewExt string `orm:"column(PreviewExt);size(4)"` //文档预览的图片格式后缀,如jpg、png、svg等,默认svg
108+
Width int `orm:"column(Width)"` //svg的原始宽度
109+
Height int `orm:"column(Height)"` //svg的原始高度
110+
DsId int `orm:"column(DsId)"` //文档存档表Id,DocumentStore Id
111+
Uid int `orm:"column(Uid)"` //文档上传用户的id
112+
Username string `orm:"column(Username)"` //文档上传用户的id
113+
ChanelId int `orm:"column(ChanelId)"` //文档所属频道
114+
Pid int `orm:"column(Pid)"` //文档一级分类
115+
Cid int `orm:"column(Cid)"` //频道下的最底层的分类id(二级分类),如幼儿教育下的幼儿读物等
116+
TimeCreate int `orm:"column(TimeCreate)"` //文档上传时间
117+
TimeUpdate int `orm:"column(TimeUpdate)"` //文档更新时间
118+
Dcnt int `orm:"column(Dcnt)"` //下载次数
119+
Vcnt int `orm:"column(Vcnt)"` //浏览次数
120+
Ccnt int `orm:"column(Ccnt)"` //收藏次数
121+
Score int `orm:"column(Score)"` //默认30000,即表示3.0分。这是为了更准确统计评分的需要
122+
ScorePeople int `orm:"column(ScorePeople)"` //评分总人数
123+
Price int `orm:"column(Price)"` //文档下载价格,0表示免费
124+
Status int8 `orm:"column(Status)"` //文档资源状态,1正常,0文档未转换成功,-1删除,同时把id录入文档回收站i
125+
}
126+
92127
//非法文档(侵权或不良信息文档)MD5记录表
93128
type DocumentIllegal struct {
94129
Id int `orm:"column(Id)"` //文档id
@@ -148,8 +183,8 @@ func (this *Document) IsIllegalById(id interface{}) bool {
148183
//@return params 文档信息
149184
//@return rows 记录数
150185
//@return err 错误
151-
func (this *Document) GetById(id interface{}) (params orm.Params, rows int64, err error) {
152-
var data []orm.Params
186+
func (this *Document) GetById(id interface{}) (doc fullDocument, err error) {
187+
var sql string
153188
tables := []string{GetTableDocumentInfo() + " info", GetTableDocument() + " doc", GetTableDocumentStore() + " ds", GetTableUser() + " u"}
154189
fields := map[string][]string{
155190
"ds": helper.DeleteSlice(GetFields(NewDocumentStore()), "Id"),
@@ -162,14 +197,15 @@ func (this *Document) GetById(id interface{}) (params orm.Params, rows int64, er
162197
{"doc.Id": "info.Id"},
163198
{"u.Id": "info.Uid"},
164199
}
165-
if helper.Debug {
166-
helper.Logger.Debug("查询字段:%+v", fields)
167-
}
168-
if sql, err := LeftJoinSqlBuild(tables, on, fields, 1, 1, nil, nil, "info.Id=?"); err == nil {
169-
if rows, err = orm.NewOrm().Raw(sql, id).Values(&data); len(data) > 0 {
170-
params = data[0]
171-
}
200+
helper.Logger.Debug("查询字段:%+v", fields)
201+
202+
sql, err = LeftJoinSqlBuild(tables, on, fields, 1, 1, nil, nil, "info.Id=?")
203+
if err != nil {
204+
helper.Logger.Error(err.Error())
205+
err = errors.New("内部错误:数据查询失败")
206+
return
172207
}
208+
err = orm.NewOrm().Raw(sql, id).QueryRow(&doc)
173209
return
174210
}
175211

static/Home/default/css/dochub.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ body{background-color: #f6f6f6;}
5454
/*以上是禁止响应式的CSS代码*/
5555

5656

57+
.carousel-indicators li{width: 12px;height: 12px;margin:0px 2px;}
58+
5759
/*icons [start]*/
5860
.icon{width:18px;height: 18px;display: inline-block;background: url(../img/all_icon.png) no-repeat;margin-right: 3px;}
5961
.icon-pdf{background-position: -2px -306px;}
@@ -277,6 +279,7 @@ textarea{resize: none;}
277279
#wenku-content .wenku-viewer .wenku-viewer-img{border-bottom: 5px solid #F6F6F6;display: block;width: 100%;}
278280
#wenku-content .wenku-viewer-more{border-bottom: 5px solid #F6F6F6;padding: 30px 0px 20px;}
279281
#wenku-content .wenku-viewer-more .btn{margin: 10px 0px;}
282+
#wenku-content .active-forbidden a{cursor: default;background-color: #bdc3c7 !important;border-color:#bdc3c7 !important; }
280283

281284
/*wenku page content [end]*/
282285

views/Home/default/Upload/index.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
</div>
88
<div class="panel-body">
99
<div class="wenku-tips text-center help-block">
10-
每成功上传一篇未被上传过的文档,可获取财富值 <span class="text-primary">+{{.Sys.Reward}}</span> 奖励。<!-- 若有完善的标签和文档简介,将有机会额外获得 <span class="text-danger">1-20</span> 个财富值奖励。 --> 待积分商城上线,财富值可用于兑换各种小礼品!
10+
每成功上传一篇未被分享过的文档,可获得 <span class="text-primary">+{{.Sys.Reward}}</span> 个金币奖励。
11+
<!-- 若有完善的标签和文档简介,将有机会额外获得 <span class="text-danger">1-20</span> 个财富值奖励。 -->
12+
{{/*待积分商城上线,财富值可用于兑换各种小礼品!*/}}
1113
</div>
1214
<div class="col-xs-8">
1315
<form class="form-horizontal wenku-form-upload" role="form" method="post" action="/upload" data-login="/user/islogin" data-doccheck="/doc/check" enctype="multipart/form-data">

0 commit comments

Comments
 (0)