Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a0f39e1

Browse files
committed
付费内容开发
1 parent ca119e1 commit a0f39e1

File tree

12 files changed

+105
-27
lines changed

12 files changed

+105
-27
lines changed

config/db.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS `topics` (
3636
`top` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '置顶,0否,1置顶',
3737
`top_time` int unsigned NOT NULL DEFAULT 0 COMMENT '置顶时间',
3838
`tags` varchar(63) NOT NULL DEFAULT '' COMMENT 'tag,逗号分隔',
39-
`permission` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '访问权限:0-公开;1-登录用户可见;2-关注的人可见',
39+
`permission` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '访问权限:0-公开;1-登录用户可见;2-关注的人可见;3-付费用户可见',
4040
`ctime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
4141
`mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
4242
PRIMARY KEY (`tid`),

src/http/controller/admin/user.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ func (UserController) Modify(ctx echo.Context) error {
7575
amount := goutils.MustInt(ctx.FormValue("amount"))
7676
if amount > 0 {
7777
logic.DefaultUserRich.Recharge(ctx, uid, ctx.FormParams())
78-
} else {
79-
logic.DefaultUser.SetDauAuth(ctx, uid, ctx.FormParams())
8078
}
79+
logic.DefaultUser.AdminUpdateUser(ctx, uid, ctx.FormParams())
80+
8181
return success(ctx, nil)
8282
}
8383

src/http/controller/app/topic.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,20 @@ func (TopicController) Detail(ctx echo.Context) error {
108108
return fail(ctx, "服务器异常")
109109
}
110110

111+
me, ok := ctx.Get("user").(*model.Me)
112+
113+
permission := topic["permission"].(int)
114+
switch permission {
115+
case model.PermissionLogin:
116+
if !ok {
117+
topic["content"] = "登录用户可见!"
118+
}
119+
case model.PermissionPay:
120+
if !ok || !me.IsVip || !me.IsRoot {
121+
topic["content"] = "付费用户可见!"
122+
}
123+
}
124+
111125
logic.Views.Incr(Request(ctx), model.TypeTopic, tid)
112126

113127
data := map[string]interface{}{

src/http/controller/topic.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,23 @@ func (TopicController) Detail(ctx echo.Context) error {
156156
"topic": topic,
157157
"replies": replies,
158158
"appends": []*model.TopicAppend{},
159+
"can_view": true,
159160
}
160161

161162
me, ok := ctx.Get("user").(*model.Me)
162-
if topic["permission"] == 0 || (topic["permission"] == 1 && ok) {
163+
// 当前用户是否对付费内容可见
164+
if topic["permission"] == model.PermissionPay {
165+
if !ok || (!me.IsVip && !me.IsRoot && topic["uid"].(int) != me.Uid) {
166+
data["can_view"] = false
167+
}
168+
}
169+
170+
if topic["permission"] == model.PermissionPublic ||
171+
(topic["permission"] == model.PermissionLogin && ok) ||
172+
(topic["permission"] == model.PermissionPay && ok && (me.IsVip || me.IsRoot)) {
163173
data["appends"] = logic.DefaultTopic.FindAppend(ctx, tid)
164174
}
175+
165176
if ok {
166177
tid := topic["tid"].(int)
167178
data["likeflag"] = logic.DefaultLike.HadLike(ctx, me.Uid, tid, model.TypeTopic)

src/logic/user.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import (
1616
"time"
1717
"util"
1818

19+
"github.com/polaris1119/times"
20+
1921
"github.com/polaris1119/slices"
2022

2123
"github.com/go-validator/validator"
@@ -300,6 +302,11 @@ func (self UserLogic) FindCurrentUser(ctx context.Context, username interface{})
300302
return &model.Me{}
301303
}
302304

305+
isVip := user.IsVip
306+
if user.VipExpire < goutils.MustInt(times.Format("Ymd")) {
307+
isVip = false
308+
}
309+
303310
me := &model.Me{
304311
Uid: user.Uid,
305312
Username: user.Username,
@@ -311,6 +318,7 @@ func (self UserLogic) FindCurrentUser(ctx context.Context, username interface{})
311318
IsRoot: user.IsRoot,
312319
MsgNum: DefaultMessage.FindNotReadMsgNum(ctx, user.Uid),
313320
DauAuth: user.DauAuth,
321+
IsVip: isVip,
314322
CreatedAt: time.Time(user.Ctime),
315323

316324
Balance: user.Balance,
@@ -633,7 +641,7 @@ func (UserLogic) FindUserByPage(ctx context.Context, conds map[string]string, cu
633641
return userList, int(total)
634642
}
635643

636-
func (self UserLogic) SetDauAuth(ctx context.Context, uid string, form url.Values) {
644+
func (self UserLogic) AdminUpdateUser(ctx context.Context, uid string, form url.Values) {
637645
user := self.FindOne(ctx, "uid", uid)
638646
user.DauAuth = 0
639647

@@ -658,7 +666,10 @@ func (self UserLogic) SetDauAuth(ctx context.Context, uid string, form url.Value
658666
}
659667
}
660668

661-
MasterDB.Id(user.Uid).Update(user)
669+
user.IsVip = goutils.MustBool(form.Get("is_vip"), false)
670+
user.VipExpire = goutils.MustInt(form.Get("vip_expire"))
671+
672+
MasterDB.Id(user.Uid).UseBool("is_vip").Update(user)
662673
}
663674

664675
// GetUserMentions 获取 @ 的 suggest 列表

src/model/topic.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const (
2424
PermissionPublic = iota // 公开
2525
PermissionLogin // 登录可见
2626
PermissionFollow // 关注可见(暂未实现)
27+
PermissionPay // 知识星球或其他方式付费可见
2728
)
2829

2930
// 社区主题信息

src/model/user.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ type User struct {
8989
Balance int `json:"balance"`
9090
IsThird int `json:"is_third"`
9191
DauAuth int `json:"dau_auth"`
92+
IsVip bool `json:"is_vip"`
93+
VipExpire int `json:"vip_expire"`
9294
Status int `json:"status"`
9395
IsRoot bool `json:"is_root"`
9496
Ctime OftenTime `json:"ctime" xorm:"created"`
@@ -144,6 +146,7 @@ type Me struct {
144146
IsAdmin bool `json:"isadmin"`
145147
IsRoot bool `json:"is_root"`
146148
DauAuth int `json:"dau_auth"`
149+
IsVip bool `json:"is_vip"`
147150
CreatedAt time.Time `json:"created_at"`
148151

149152
Balance int `json:"balance"`

static/img/wxpay68.jpg

110 KB
Loading

static/img/zsxq.jpg

24.5 KB
Loading

template/admin/user/detail.html

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{{define "content"}}
22
<div class="pageheader notab">
33
<h1 class="pagetitle">用户详情</h1>
4-
</div><!--pageheader-->
4+
</div>
5+
<!--pageheader-->
56

67
<div id="contentwraapper" class="contentwrapper">
78
<div id="tooltip" class="red"></div>
@@ -137,14 +138,14 @@ <h3>DAU 权限设置</h3>
137138
<p>
138139
<label for="dau">&nbsp;</label>
139140
<span class="field">
140-
发布主题:<input type="checkbox" name="topic" value="1" {{if canPublish .user.DauAuth 0}}checked{{end}}>&nbsp;&nbsp;
141-
发布文章:<input type="checkbox" name="article" value="1" {{if canPublish .user.DauAuth 1}}checked{{end}}>&nbsp;&nbsp;
142-
分享资源:<input type="checkbox" name="resource" value="1" {{if canPublish .user.DauAuth 2}}checked{{end}}>&nbsp;&nbsp;
143-
发布Wiki:<input type="checkbox" name="wiki" value="1" {{if canPublish .user.DauAuth 3}}checked{{end}}>&nbsp;&nbsp;
144-
发布项目:<input type="checkbox" name="project" value="1" {{if canPublish .user.DauAuth 4}}checked{{end}}>&nbsp;&nbsp;
145-
发布图书:<input type="checkbox" name="book" value="1" {{if canPublish .user.DauAuth 5}}checked{{end}}>&nbsp;&nbsp;
146-
发布评论:<input type="checkbox" name="comment" value="1" {{if canPublish .user.DauAuth 100}}checked{{end}}>&nbsp;&nbsp;
147-
置顶:<input type="checkbox" name="top" value="1" {{if canPublish .user.DauAuth 101}}checked{{end}}>
141+
发布主题:<input type="checkbox" name="topic" value="1" {{if canPublish .user.DauAuth 0}} checked{{end}}>&nbsp;&nbsp;
142+
发布文章:<input type="checkbox" name="article" value="1" {{if canPublish .user.DauAuth 1}} checked{{end}}>&nbsp;&nbsp;
143+
分享资源:<input type="checkbox" name="resource" value="1" {{if canPublish .user.DauAuth 2}} checked{{end}}>&nbsp;&nbsp;
144+
发布Wiki:<input type="checkbox" name="wiki" value="1" {{if canPublish .user.DauAuth 3}} checked{{end}}>&nbsp;&nbsp;
145+
发布项目:<input type="checkbox" name="project" value="1" {{if canPublish .user.DauAuth 4}} checked{{end}}>&nbsp;&nbsp;
146+
发布图书:<input type="checkbox" name="book" value="1" {{if canPublish .user.DauAuth 5}} checked{{end}}>&nbsp;&nbsp;
147+
发布评论:<input type="checkbox" name="comment" value="1" {{if canPublish .user.DauAuth 100}} checked{{end}}>&nbsp;&nbsp;
148+
置顶:<input type="checkbox" name="top" value="1" {{if canPublish .user.DauAuth 101}} checked{{end}}>
148149
</span>
149150
</p>
150151
</div>
@@ -161,6 +162,21 @@ <h3>充值</h3>
161162
<input id="time" type="text" name="time" class="smallinput" placeholder="输入充值时间" />
162163
</span>
163164
</p>
165+
<p>
166+
<label for="is_vip">是否付费用户</label>
167+
<span class="field">
168+
<select id="is_vip" name="is_vip" class="uniformselect">
169+
<option value="0" {{if not .user.IsVip}} selected{{end}}></option>
170+
<option value="1" {{if .user.IsVip}} selected{{end}}></option>
171+
</select>
172+
</span>
173+
</p>
174+
<p>
175+
<label for="vip_expire">付费有效期到</label>
176+
<span class="field">
177+
<input id="vip_expire" type="text" name="vip_expire" class="smallinput" value="{{.user.VipExpire}}">
178+
</span>
179+
</p>
164180
</div>
165181
<div class="contenttitle2">
166182
<h3>角色信息</h3>
@@ -189,12 +205,14 @@ <h3>角色信息</h3>
189205
</div>
190206
<div style="margin: 0 auto; width: 500px;"><input class="submit_btn" type="submit" name="save" value="提交" /></a></div>
191207
</form>
192-
<img id="loaders" src="/static/img/loaders/loader7.gif" alt="" class="hide"><blockquote></blockquote>
193-
</div><!--contentwrapper-->
208+
<img id="loaders" src="/static/img/loaders/loader7.gif" alt="" class="hide">
209+
<blockquote></blockquote>
210+
</div>
211+
<!--contentwrapper-->
194212
{{end}}
195213

196214
{{define "js"}}
197215
<script src="https://cdn.bootcss.com/jquery-validate/1.17.0/jquery.validate.min.js"></script>
198216
<script src="https://cdn.bootcss.com/jquery-validate/1.17.0/localization/messages_zh.min.js"></script>
199-
<script type="text/javascript" src="/static/js/admin/forms.js"></script>
200-
{{end}}
217+
<script type="text/javascript" src="/static/js/admin/forms.js"></script>
218+
{{end}}

template/topics/detail.html

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,25 @@ <h1>
3939
<div class="outdated">这是一个创建于 <span title="{{.topic.ctime}}" class="timeago"></span> 的主题,其中的信息可能已经有所发展或是发生改变。</div>
4040
{{end}}
4141
<div class="cell">
42-
{{if or (not .topic.permission) .me.Status}}
43-
<div class="content">{{.topic.content}}</div>
42+
{{if eq .topic.permission 1}}
43+
{{if .me.Status}}
44+
<div class="content">{{.topic.content}}</div>
45+
{{else}}
46+
<div style="font-size: 1.2em;">作者设置必须登录才能查看,<a href="/account/login?redirect_uri=/topics/{{.topic.tid}}">请登录</a>;如没有账号,<a href="/account/register">请注册</a></div>
47+
{{end}}
48+
{{else if eq .topic.permission 3}}
49+
{{if or .me.IsVip .me.IsRoot (eq .topic.uid .me.Uid)}}
50+
<div class="content">{{.topic.content}}</div>
51+
{{else}}
52+
<div style="font-size: 1.2em;">
53+
<p>作者设置付费用户才能查看,加入Go中文网创建的<a href="https://t.zsxq.com/BM72RZR" title="知识星球" target="_blank">知识星球</a>自动成为付费用户(加入后星球私信告知网站用户名)。</p>
54+
<img src="{{.static_domain}}/static/img/zsxq.jpg" alt="知识星球" class="img-responsive">
55+
<p>或者给我们转账成为付费用户,有效期一年,限时优惠:68元/年</p>
56+
<img src="{{.static_domain}}/static/img/wxpay68.jpg" alt="转账付费" class="img-responsive">
57+
</div>
58+
{{end}}
4459
{{else}}
45-
<div style="font-size: 1.2em;">作者设置必须登录才能查看,<a href="/account/login?redirect_uri=/topics/{{.topic.tid}}">请登录</a>;如没有账号,<a href="/account/register">请注册</a></div>
60+
<div class="content">{{.topic.content}}</div>
4661
{{end}}
4762
</div>
4863
{{range $i, $append := .appends}}
@@ -89,8 +104,10 @@ <h1>
89104
{{include "common/comment-page.html" .}}
90105
</div>
91106

92-
<!-- 评论框 -->
93-
{{template "comment" .}}
107+
{{if .can_view}}
108+
<!-- 评论框 -->
109+
{{template "comment" .}}
110+
{{end}}
94111

95112
{{include "common/view_stat.html" .}}
96113

@@ -153,8 +170,8 @@ <h1>
153170
$('.need-autogrow').autoGrow();
154171

155172
// 有权限查看才加载评论
156-
{{if or (not .topic.permission) .me.Status}}
157-
loadComments();
173+
{{if .can_view}}
174+
loadComments();
158175
{{end}}
159176

160177
// 链接,add target=_blank

template/topics/new.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@
7979
<select id="permission" name="permission" class="form-control" style="width: 30%;">
8080
<option value="0" {{if not .topic.Permission}}selected{{end}}>公开</option>
8181
<option value="1" {{if .topic.Permission}}selected{{end}}>登录可见</option>
82+
{{if or .me.IsRoot .me.IsVip}}
83+
<option value="3" {{if $.topic.Permission}} selected{{end}}>付费可见</option>
84+
{{end}}
8285
</select>
8386
</div>
8487
</div>
@@ -156,7 +159,7 @@ <h3 class="title"><i class="glyphicon glyphicon-list-alt"></i>&nbsp;发帖提示
156159
<div class="sep10"></div>
157160
<div>在最后,请为你的主题选择一个节点。恰当的归类会让你发布的信息更加有用。</div>
158161
<div class="sep10"></div>
159-
<div>你可以在主题发布后 600 秒内,对标题或者正文进行编辑。同时,在 600 秒内,你可以重新为主题选择节点。</div>
162+
<div>你可以在主题发布后 2 天内,对标题或者正文进行编辑。同时,在 2 天内,你可以重新为主题选择节点。</div>
160163
<div class="sep10"></div>
161164
</li>
162165
</ul>

0 commit comments

Comments
 (0)