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

Skip to content

Commit bd93e26

Browse files
author
studygolang
committed
增加wiki板块
1 parent c0a8c8e commit bd93e26

File tree

23 files changed

+576
-58
lines changed

23 files changed

+576
-58
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright 2013 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package controller
8+
9+
import (
10+
"filter"
11+
"fmt"
12+
"github.com/studygolang/mux"
13+
"net/http"
14+
"service"
15+
)
16+
17+
// 创建wiki页
18+
// uri: /wiki/new{json:(|.json)}
19+
func NewWikiPageHandler(rw http.ResponseWriter, req *http.Request) {
20+
vars := mux.Vars(req)
21+
title := req.FormValue("title")
22+
if title == "" || req.Method != "POST" || vars["json"] == "" {
23+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/wiki/new.html")
24+
filter.SetData(req, map[string]interface{}{"activeWiki": "active"})
25+
return
26+
}
27+
user, _ := filter.CurrentUser(req)
28+
// 入库
29+
ok := service.CreateWiki(user["uid"].(int), req.Form)
30+
if !ok {
31+
fmt.Fprint(rw, `{"errno": 1, "error":"服务器内部错误,请稍候再试!"}`)
32+
return
33+
}
34+
fmt.Fprint(rw, `{"errno": 0, "data":{"uri":"`+req.FormValue("uri")+`"}}`)
35+
}
36+
37+
// 展示wiki页
38+
// uri: /wiki/{uri}
39+
func WikiContentHandler(rw http.ResponseWriter, req *http.Request) {
40+
vars := mux.Vars(req)
41+
uri := vars["uri"]
42+
wiki := service.FindWiki(uri)
43+
if wiki == nil {
44+
NotFoundHandler(rw, req)
45+
return
46+
}
47+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/wiki/content.html")
48+
// 设置模板数据
49+
filter.SetData(req, map[string]interface{}{"activeWiki": "active", "wiki": wiki})
50+
}
51+
52+
// 获得wiki列表
53+
// uri: /wiki
54+
func WikisHandler(rw http.ResponseWriter, req *http.Request) {
55+
wikiList := service.FindWikiList()
56+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/wiki/list.html")
57+
filter.SetData(req, map[string]interface{}{"activeWiki": "active", "wikis": wikiList})
58+
}

websites/code/studygolang/src/filter/view.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (this *ViewFilter) PostFilter(rw http.ResponseWriter, req *http.Request) bo
9696
// 这样,在ParseFiles时,新返回的*Template便还是原来的模板实例
9797
tpl, err := template.New(this.baseTplName).Funcs(funcMap).ParseFiles(append(this.commonHtmlFiles, config.ROOT+contentHtml)...)
9898
if err != nil {
99-
logger.Errorln("解析模板出错(ParseFiles):", err)
99+
logger.Errorf("解析模板出错(ParseFiles):[%q] %s\n", req.RequestURI, err)
100100
return false
101101
}
102102
// 如果没有定义css和js模板,则定义之
@@ -113,7 +113,7 @@ func (this *ViewFilter) PostFilter(rw http.ResponseWriter, req *http.Request) bo
113113
data["me"] = me
114114
err = tpl.Execute(rw, data)
115115
if err != nil {
116-
logger.Errorln("执行模板出错(Execute):", err)
116+
logger.Errorf("执行模板出错(Execute):[%q] %s\n", req.RequestURI, err)
117117
}
118118
return true
119119
}

websites/code/studygolang/src/model/comment.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,7 @@ func (this *Comment) FindAll(selectCol ...string) ([]*Comment, error) {
6767
colNum := len(selectCol)
6868
for rows.Next() {
6969
comment := NewComment()
70-
colFieldMap := comment.colFieldMap()
71-
scanInterface := make([]interface{}, 0, colNum)
72-
for _, column := range selectCol {
73-
scanInterface = append(scanInterface, colFieldMap[column])
74-
}
75-
err = rows.Scan(scanInterface...)
70+
err = this.Scan(rows, colNum, comment.colFieldMap(), selectCol...)
7671
if err != nil {
7772
logger.Errorln("Comment FindAll Scan Error:", err)
7873
continue

websites/code/studygolang/src/model/role.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,9 @@ func (this *Role) FindAll(selectCol ...string) ([]*Role, error) {
5757
colNum := len(selectCol)
5858
for rows.Next() {
5959
role := NewRole()
60-
colFieldMap := role.colFieldMap()
61-
scanInterface := make([]interface{}, 0, colNum)
62-
for _, column := range selectCol {
63-
scanInterface = append(scanInterface, colFieldMap[column])
64-
}
65-
err = rows.Scan(scanInterface...)
60+
err = this.Scan(rows, colNum, role.colFieldMap(), selectCol...)
6661
if err != nil {
67-
logger.Errorln("FindAll Scan Error:", err)
62+
logger.Errorln("Role FindAll Scan Error:", err)
6863
continue
6964
}
7065
roleList = append(roleList, role)

websites/code/studygolang/src/model/topic.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,7 @@ func (this *TopicEx) FindAll(selectCol ...string) ([]*TopicEx, error) {
171171
colNum := len(selectCol)
172172
for rows.Next() {
173173
topicEx := NewTopicEx()
174-
colFieldMap := topicEx.colFieldMap()
175-
scanInterface := make([]interface{}, 0, colNum)
176-
for _, column := range selectCol {
177-
scanInterface = append(scanInterface, colFieldMap[column])
178-
}
179-
err = rows.Scan(scanInterface...)
174+
err = this.Scan(rows, colNum, topicEx.colFieldMap(), selectCol...)
180175
if err != nil {
181176
logger.Errorln("TopicEx FindAll Scan Error:", err)
182177
continue
@@ -264,12 +259,7 @@ func (this *TopicNode) FindAll(selectCol ...string) ([]*TopicNode, error) {
264259
colNum := len(selectCol)
265260
for rows.Next() {
266261
node := NewTopicNode()
267-
colFieldMap := node.colFieldMap()
268-
scanInterface := make([]interface{}, 0, colNum)
269-
for _, column := range selectCol {
270-
scanInterface = append(scanInterface, colFieldMap[column])
271-
}
272-
err = rows.Scan(scanInterface...)
262+
err = this.Scan(rows, colNum, node.colFieldMap(), selectCol...)
273263
if err != nil {
274264
logger.Errorln("TopicNode FindAll Scan Error:", err)
275265
continue

websites/code/studygolang/src/model/user.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ func (this *User) colFieldMap() map[string]interface{} {
211211
// 3、修改资料 +1
212212
// 4、发帖子 + 10
213213
// 5、评论 +5
214+
// 6、创建Wiki页 +10
214215
type UserActive struct {
215216
Uid int `json:"uid"`
216217
Username string `json:"username"`
@@ -350,14 +351,10 @@ func (this *UserRole) FindAll(selectCol ...string) ([]*UserRole, error) {
350351
colNum := len(selectCol)
351352
for rows.Next() {
352353
userRole := NewUserRole()
353-
colFieldMap := userRole.colFieldMap()
354-
scanInterface := make([]interface{}, 0, colNum)
355-
for _, column := range selectCol {
356-
scanInterface = append(scanInterface, colFieldMap[column])
357-
}
358-
err = rows.Scan(scanInterface...)
354+
err = this.Scan(rows, colNum, userRole.colFieldMap(), selectCol...)
359355
if err != nil {
360-
logger.Errorln("[UserRole.FindAll Rows] error:", err)
356+
logger.Errorln("UserRole FindAll Scan Error:", err)
357+
continue
361358
}
362359
userRoleList = append(userRoleList, userRole)
363360
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// Copyright 2013 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package model
8+
9+
import (
10+
"logger"
11+
"time"
12+
"util"
13+
)
14+
15+
// 角色信息
16+
type Wiki struct {
17+
Id int `json:"id"`
18+
Title string `json:"title"`
19+
Content string `json:"content"`
20+
Uri string `json:"uri"`
21+
Uid int `json:"uid"`
22+
Cuid string `json:"cuid"`
23+
Ctime string `json:"ctime"`
24+
Mtime string `json:"mtime"`
25+
26+
// 数据库访问对象
27+
*Dao
28+
}
29+
30+
func NewWiki() *Wiki {
31+
return &Wiki{
32+
Dao: &Dao{tablename: "wiki"},
33+
}
34+
}
35+
36+
func (this *Wiki) Insert() (int64, error) {
37+
this.Ctime = time.Now().Format("2006-01-02 15:04:05")
38+
this.prepareInsertData()
39+
result, err := this.Dao.Insert()
40+
if err != nil {
41+
return 0, err
42+
}
43+
return result.LastInsertId()
44+
}
45+
46+
func (this *Wiki) Find(selectCol ...string) error {
47+
return this.Dao.Find(this.colFieldMap(), selectCol...)
48+
}
49+
50+
func (this *Wiki) FindAll(selectCol ...string) ([]*Wiki, error) {
51+
if len(selectCol) == 0 {
52+
selectCol = util.MapKeys(this.colFieldMap())
53+
}
54+
rows, err := this.Dao.FindAll(selectCol...)
55+
if err != nil {
56+
return nil, err
57+
}
58+
// TODO:
59+
wikiList := make([]*Wiki, 0, 10)
60+
logger.Debugln("selectCol", selectCol)
61+
colNum := len(selectCol)
62+
for rows.Next() {
63+
wiki := NewWiki()
64+
err = this.Scan(rows, colNum, wiki.colFieldMap(), selectCol...)
65+
if err != nil {
66+
logger.Errorln("Wiki FindAll Scan Error:", err)
67+
continue
68+
}
69+
wikiList = append(wikiList, wiki)
70+
}
71+
return wikiList, nil
72+
}
73+
74+
// 为了支持连写
75+
func (this *Wiki) Where(condition string) *Wiki {
76+
this.Dao.Where(condition)
77+
return this
78+
}
79+
80+
// 为了支持连写
81+
func (this *Wiki) Limit(limit string) *Wiki {
82+
this.Dao.Limit(limit)
83+
return this
84+
}
85+
86+
// 为了支持连写
87+
func (this *Wiki) Order(order string) *Wiki {
88+
this.Dao.Order(order)
89+
return this
90+
}
91+
92+
func (this *Wiki) prepareInsertData() {
93+
this.columns = []string{"title", "content", "uri", "uid", "ctime"}
94+
this.colValues = []interface{}{this.Title, this.Content, this.Uri, this.Uid, this.Ctime}
95+
}
96+
97+
func (this *Wiki) colFieldMap() map[string]interface{} {
98+
return map[string]interface{}{
99+
"id": &this.Id,
100+
"title": &this.Title,
101+
"content": &this.Content,
102+
"uri": &this.Uri,
103+
"uid": &this.Uid,
104+
"cuid": &this.Cuid,
105+
"ctime": &this.Ctime,
106+
"mtime": &this.Mtime,
107+
}
108+
}

websites/code/studygolang/src/service/topic.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -300,22 +300,6 @@ func TopicsTotal() (total int) {
300300
return
301301
}
302302

303-
// 获取用户信息
304-
func getUserInfos(uids map[int]int) map[int]*model.User {
305-
// 获取用户信息
306-
inUids := util.Join(util.MapIntKeys(uids), ",")
307-
users, err := model.NewUser().Where("uid in(" + inUids + ")").FindAll()
308-
if err != nil {
309-
logger.Errorln("topic service getUserInfos Error:", err)
310-
return map[int]*model.User{}
311-
}
312-
userMap := make(map[int]*model.User, len(users))
313-
for _, user := range users {
314-
userMap[user.Uid] = user
315-
}
316-
return userMap
317-
}
318-
319303
// 话题回复(评论)
320304
type TopicComment struct{}
321305

websites/code/studygolang/src/service/user.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,22 @@ func UpdatePasswd(username, passwd string) (string, error) {
273273
return "", nil
274274
}
275275

276+
// 获取用户信息
277+
func getUserInfos(uids map[int]int) map[int]*model.User {
278+
// 获取用户信息
279+
inUids := util.Join(util.MapIntKeys(uids), ",")
280+
users, err := model.NewUser().Where("uid in(" + inUids + ")").FindAll()
281+
if err != nil {
282+
logger.Errorln("user service getUserInfos Error:", err)
283+
return map[int]*model.User{}
284+
}
285+
userMap := make(map[int]*model.User, len(users))
286+
for _, user := range users {
287+
userMap[user.Uid] = user
288+
}
289+
return userMap
290+
}
291+
276292
// 会员总数
277293
func CountUsers() int {
278294
total, err := model.NewUserLogin().Count()
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright 2013 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package service
8+
9+
import (
10+
"logger"
11+
"model"
12+
"net/url"
13+
"strings"
14+
"util"
15+
)
16+
17+
// 创建一个wiki页面
18+
func CreateWiki(uid int, form url.Values) bool {
19+
wiki := model.NewWiki()
20+
err := util.ConvertAssign(wiki, form)
21+
if err != nil {
22+
logger.Errorln("wiki ConvertAssign error", err)
23+
return false
24+
}
25+
wiki.Uid = uid
26+
if _, err := wiki.Insert(); err != nil {
27+
logger.Errorln("wiki service CreateWiki error:", err)
28+
return false
29+
}
30+
31+
// 创建一个wiki页面,活跃度+10
32+
go IncUserWeight("uid="+strconv.Itoa(uid), 10)
33+
34+
return true
35+
}
36+
37+
// 某个wiki页面详细信息
38+
func FindWiki(uri string) map[string]interface{} {
39+
wiki := model.NewWiki()
40+
if err := wiki.Where("uri=" + uri).Find(); err != nil {
41+
logger.Errorln("wiki service FindWiki error:", err)
42+
return nil
43+
}
44+
uids := make(map[int]int)
45+
uids[wiki.Uid] = wiki.Uid
46+
if wiki.Cuid != "" {
47+
cuids := strings.Split(wiki.Cuid, ",")
48+
for _, cuid := range cuids {
49+
tmpUid := util.MustInt(cuid)
50+
uids[tmpUid] = tmpUid
51+
}
52+
}
53+
userMap := getUserInfos(uids)
54+
result := make(map[string]interface{})
55+
util.Struct2Map(result, wiki)
56+
result["user"] = userMap[wiki.Uid]
57+
if wiki.Cuid != "" {
58+
cuids := strings.Split(wiki.Cuid, ",")
59+
cusers := make([]*model.User, len(cuids))
60+
for i, cuid := range cuids {
61+
cusers[i] = userMap[util.MustInt(cuid)]
62+
}
63+
result["cuser"] = cusers
64+
}
65+
return result
66+
}
67+
68+
// 获得wiki列表(TODO:暂时不分页)
69+
func FindWikiList() []*model.Wiki {
70+
wikiList, err := model.NewWiki().Order("mtime DESC").FindAll("title", "uri")
71+
if err != nil {
72+
logger.Errorln("wiki service FindWikiList error:", err)
73+
return nil
74+
}
75+
return wikiList
76+
}

0 commit comments

Comments
 (0)