wp-go/app/theme/wp/detail.go

129 lines
3.3 KiB
Go
Raw Permalink Normal View History

2023-03-01 05:17:12 +00:00
package wp
import (
2023-02-27 14:58:35 +00:00
"errors"
"fmt"
2023-05-04 12:37:06 +00:00
"github.com/fthvgb1/wp-go/app/pkg/cache"
"github.com/fthvgb1/wp-go/app/pkg/constraints"
"github.com/fthvgb1/wp-go/app/pkg/logs"
"github.com/fthvgb1/wp-go/app/pkg/models"
"github.com/fthvgb1/wp-go/app/plugins"
"github.com/fthvgb1/wp-go/app/plugins/wpposts"
"github.com/fthvgb1/wp-go/app/wpconfig"
str "github.com/fthvgb1/wp-go/helper/strings"
)
type DetailHandle struct {
*Handle
CommentRender plugins.CommentHtml
Comments []models.Comments
Post models.Posts
}
func NewDetailHandle(handle *Handle) *DetailHandle {
return &DetailHandle{Handle: handle}
}
func (d *DetailHandle) BuildDetailData() (err error) {
2023-02-28 15:38:23 +00:00
d.ginH["title"] = wpconfig.GetOption("blogname")
err = d.CheckAndGetPost()
if err != nil {
return
}
d.Comment()
d.ContextPost()
return
}
func (d *DetailHandle) CheckAndGetPost() (err error) {
id := str.ToInteger[uint64](d.C.Param("id"), 0)
maxId, err := cache.GetMaxPostId(d.C)
2023-04-07 14:59:07 +00:00
logs.IfError(err, "get max post id")
2023-02-27 14:58:35 +00:00
if id > maxId || id <= 0 {
d.Stats = constraints.ParamError
err = errors.New("无效的文档id")
}
if err != nil {
return
}
post, err := cache.GetPostById(d.C, id)
if post.Id == 0 || err != nil || post.PostStatus != "publish" {
2023-02-27 14:58:35 +00:00
d.Stats = constraints.Error404
2023-04-07 14:59:07 +00:00
logs.IfError(err, "获取id失败")
2023-02-27 14:58:35 +00:00
err = errors.New(str.Join("无效的文档id "))
return
}
d.Post = post
2023-02-28 15:38:23 +00:00
d.ginH["user"] = cache.GetUserById(d.C, post.PostAuthor)
d.ginH["title"] = fmt.Sprintf("%s-%s", post.PostTitle, wpconfig.GetOption("blogname"))
return
}
func (d *DetailHandle) PasswordProject() {
if d.Post.PostPassword != "" {
2023-03-02 15:49:28 +00:00
wpposts.PasswordProjectTitle(&d.Post)
2023-05-03 15:57:49 +00:00
if d.GetPassword() != d.Post.PostPassword {
2023-03-02 15:49:28 +00:00
wpposts.PasswdProjectContent(&d.Post)
}
}
}
func (d *DetailHandle) Comment() {
comments, err := cache.PostComments(d.C, d.Post.Id)
2023-04-07 14:59:07 +00:00
logs.IfError(err, "get d.Post comment", d.Post.Id)
2023-02-28 15:38:23 +00:00
d.ginH["comments"] = comments
d.Comments = comments
}
func (d *DetailHandle) RenderComment() {
2023-02-23 10:21:51 +00:00
if d.CommentRender == nil {
d.CommentRender = plugins.CommentRender()
}
ableComment := true
if d.Post.CommentStatus != "open" ||
2023-05-03 15:57:49 +00:00
(d.Post.PostPassword != "" && d.GetPassword() != d.Post.PostPassword) {
ableComment = false
}
2023-02-28 15:38:23 +00:00
d.ginH["showComment"] = ableComment
if len(d.Comments) > 0 && ableComment {
dep := str.ToInteger(wpconfig.GetOption("thread_comments_depth"), 5)
2023-02-28 15:38:23 +00:00
d.ginH["comments"] = plugins.FormatComments(d.C, d.CommentRender, d.Comments, dep)
}
}
func (d *DetailHandle) ContextPost() {
prev, next, err := cache.GetContextPost(d.C, d.Post.Id, d.Post.PostDate)
2023-04-07 14:59:07 +00:00
logs.IfError(err, "get pre and next post", d.Post.Id, d.Post.PostDate)
2023-02-28 15:38:23 +00:00
d.ginH["next"] = next
d.ginH["prev"] = prev
}
2023-02-14 15:28:45 +00:00
func DetailRender(h *Handle) {
if h.Stats != constraints.Ok {
return
}
d := h.Detail
d.PasswordProject()
d.RenderComment()
d.ginH["post"] = d.Post
}
2023-05-05 12:45:20 +00:00
func Detail(h *Handle) {
err := h.Detail.BuildDetailData()
if err != nil {
h.Detail.SetErr(err)
}
h.SetData("scene", h.Scene())
2023-02-14 15:28:45 +00:00
}
2023-04-29 14:05:24 +00:00
func ReplyCommentJs(h *Handle) {
2023-04-30 13:17:33 +00:00
h.PushFooterScript(constraints.Detail, NewComponent("comment-reply.js", "", false, 10, func(h *Handle) string {
2023-04-29 14:05:24 +00:00
reply := ""
if h.Detail.Post.CommentStatus == "open" && wpconfig.GetOption("thread_comments") == "1" {
reply = `<script src='/wp-includes/js/comment-reply.min.js' id='comment-reply-js'></script>`
}
return reply
}))
}