177 lines
4.3 KiB
Go
177 lines
4.3 KiB
Go
package main
|
|
//import "fmt"
|
|
import "strconv"
|
|
import "html/template"
|
|
|
|
type Topic struct
|
|
{
|
|
ID int
|
|
Link string
|
|
Title string
|
|
Content string
|
|
CreatedBy int
|
|
Is_Closed bool
|
|
Sticky bool
|
|
CreatedAt string
|
|
LastReplyAt string
|
|
//LastReplyBy int
|
|
ParentID int
|
|
Status string // Deprecated. Marked for removal.
|
|
IpAddress string
|
|
PostCount int
|
|
LikeCount int
|
|
ClassName string // CSS Class Name
|
|
Data string // Used for report metadata
|
|
}
|
|
|
|
type TopicUser struct
|
|
{
|
|
ID int
|
|
Link string
|
|
Title string
|
|
Content string
|
|
CreatedBy int
|
|
Is_Closed bool
|
|
Sticky bool
|
|
CreatedAt string
|
|
LastReplyAt string
|
|
//LastReplyBy int
|
|
ParentID int
|
|
Status string // Deprecated. Marked for removal.
|
|
IpAddress string
|
|
PostCount int
|
|
LikeCount int
|
|
ClassName string
|
|
Data string // Used for report metadata
|
|
|
|
UserLink string
|
|
CreatedByName string
|
|
Group int
|
|
Avatar string
|
|
ContentLines int
|
|
Tag string
|
|
URL string
|
|
URLPrefix string
|
|
URLName string
|
|
Level int
|
|
Liked bool
|
|
}
|
|
|
|
type TopicsRow struct
|
|
{
|
|
ID int
|
|
Link string
|
|
Title string
|
|
Content string
|
|
CreatedBy int
|
|
Is_Closed bool
|
|
Sticky bool
|
|
CreatedAt string
|
|
LastReplyAt string
|
|
//LastReplyBy int
|
|
ParentID int
|
|
Status string // Deprecated. Marked for removal. -Is there anything we could use it for?
|
|
IpAddress string
|
|
PostCount int
|
|
LikeCount int
|
|
ClassName string
|
|
|
|
UserLink string
|
|
CreatedByName string
|
|
Avatar string
|
|
Css template.CSS
|
|
ContentLines int
|
|
Tag string
|
|
URL string
|
|
URLPrefix string
|
|
URLName string
|
|
Level int
|
|
|
|
ForumName string //TopicsRow
|
|
ForumLink string
|
|
}
|
|
|
|
func get_topicuser(tid int) (TopicUser,error) {
|
|
if config.CacheTopicUser != CACHE_SQL {
|
|
topic, err := topics.Get(tid)
|
|
if err == nil {
|
|
user, err := users.CascadeGet(topic.CreatedBy)
|
|
if err != nil {
|
|
return TopicUser{ID:tid}, err
|
|
}
|
|
init_user_perms(user)
|
|
|
|
// We might be better off just passing seperate topic and user structs to the caller?
|
|
return copy_topic_to_topicuser(topic, user), nil
|
|
} else if users.GetLength() < users.GetCapacity() {
|
|
topic, err = topics.CascadeGet(tid)
|
|
if err != nil {
|
|
return TopicUser{ID:tid}, err
|
|
}
|
|
user, err := users.CascadeGet(topic.CreatedBy)
|
|
if err != nil {
|
|
return TopicUser{ID:tid}, err
|
|
}
|
|
init_user_perms(user)
|
|
tu := copy_topic_to_topicuser(topic, user)
|
|
return tu, nil
|
|
}
|
|
}
|
|
|
|
tu := TopicUser{ID:tid}
|
|
err := get_topic_user_stmt.QueryRow(tid).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.Is_Closed, &tu.Sticky, &tu.ParentID, &tu.IpAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level)
|
|
tu.Link = build_topic_url(name_to_slug(tu.Title),tu.ID)
|
|
tu.UserLink = build_profile_url(name_to_slug(tu.CreatedByName),tu.CreatedBy)
|
|
|
|
the_topic := Topic{ID:tu.ID, Link:tu.Link, Title:tu.Title, Content:tu.Content, CreatedBy:tu.CreatedBy, Is_Closed:tu.Is_Closed, Sticky:tu.Sticky, CreatedAt:tu.CreatedAt, LastReplyAt:tu.LastReplyAt, ParentID:tu.ParentID, IpAddress:tu.IpAddress, PostCount:tu.PostCount, LikeCount:tu.LikeCount}
|
|
//fmt.Printf("%+v\n", the_topic)
|
|
tu.Tag = groups[tu.Group].Tag
|
|
topics.Add(&the_topic)
|
|
return tu, err
|
|
}
|
|
|
|
func copy_topic_to_topicuser(topic *Topic, user *User) (tu TopicUser) {
|
|
tu.UserLink = user.Link
|
|
tu.CreatedByName = user.Name
|
|
tu.Group = user.Group
|
|
tu.Avatar = user.Avatar
|
|
tu.URLPrefix = user.URLPrefix
|
|
tu.URLName = user.URLName
|
|
tu.Level = user.Level
|
|
|
|
tu.ID = topic.ID
|
|
tu.Link = topic.Link
|
|
tu.Title = topic.Title
|
|
tu.Content = topic.Content
|
|
tu.CreatedBy = topic.CreatedBy
|
|
tu.Is_Closed = topic.Is_Closed
|
|
tu.Sticky = topic.Sticky
|
|
tu.CreatedAt = topic.CreatedAt
|
|
tu.LastReplyAt = topic.LastReplyAt
|
|
tu.ParentID = topic.ParentID
|
|
tu.IpAddress = topic.IpAddress
|
|
tu.PostCount = topic.PostCount
|
|
tu.LikeCount = topic.LikeCount
|
|
tu.Data = topic.Data
|
|
|
|
return tu
|
|
}
|
|
|
|
func get_topic_by_reply(rid int) (*Topic, error) {
|
|
topic := Topic{ID:0}
|
|
err := get_topic_by_reply_stmt.QueryRow(rid).Scan(&topic.ID, &topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.Is_Closed, &topic.Sticky, &topic.ParentID, &topic.IpAddress, &topic.PostCount, &topic.LikeCount, &topic.Data)
|
|
topic.Link = build_topic_url(name_to_slug(topic.Title),topic.ID)
|
|
return &topic, err
|
|
}
|
|
|
|
func build_topic_url(slug string, tid int) string {
|
|
if slug == "" {
|
|
return "/topic/" + strconv.Itoa(tid)
|
|
}
|
|
return "/topic/" + slug + "." + strconv.Itoa(tid)
|
|
}
|
|
|
|
func get_topic_url_prefix() string {
|
|
return "/topic/"
|
|
}
|