1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-20 01:06:24 -07:00
gochan/pkg/gcsql/initsql/init.go
2024-03-26 17:49:22 -07:00

137 lines
3.3 KiB
Go

package initsql
import (
"strconv"
"text/template"
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/events"
"github.com/gochan-org/gochan/pkg/gcsql"
"github.com/gochan-org/gochan/pkg/gctemplates"
"github.com/gochan-org/gochan/pkg/gcutil"
)
func banMaskTmplFunc(ban gcsql.IPBan) string {
if ban.ID < 1 {
if ban.RangeStart == ban.RangeEnd {
return ban.RangeStart
}
return ""
}
ipn, err := gcutil.GetIPRangeSubnet(ban.RangeStart, ban.RangeEnd)
if err != nil {
return "?"
}
return ipn.String()
}
func getBoardDirFromIDTmplFunc(id int) string {
dir, _ := gcsql.GetBoardDir(id)
return dir
}
func intPtrToBoardDirTmplFunc(id *int, ifNil string, ifErr string) string {
if id == nil {
return ifNil
}
dir, err := gcsql.GetBoardDir(*id)
if err != nil {
return ifErr
}
return dir
}
func getStaffNameFromIDTmplFunc(id int) string {
username, err := gcsql.GetStaffUsernameFromID(id)
if err != nil {
return "?"
}
return username
}
func getAppealBanIPTmplFunc(appealID int) string {
ban, err := gcsql.GetIPBanByID(appealID)
if err != nil || ban == nil {
return "?"
}
if ban.RangeStart == ban.RangeEnd {
return ban.RangeStart
}
ipn, err := gcutil.GetIPRangeSubnet(ban.RangeStart, ban.RangeEnd)
if err != nil {
return "?"
}
return ipn.String()
}
func getTopPostIDTmplFunc(post *gcsql.Post) int {
id, _ := post.TopPostID()
return id
}
func numRepliesTmplFunc(boardid, opID int) int {
num, err := gcsql.GetThreadReplyCountFromOP(opID)
if err != nil {
return 0
}
return num
}
func getBoardDirTmplFunc(id int) string {
dir, err := gcsql.GetBoardDir(id)
if err != nil {
return ""
}
return dir
}
func boardPagePathTmplFunc(board *gcsql.Board, page int) string {
return config.WebPath(board.Dir, strconv.Itoa(page)+".html")
}
func getBoardDefaultStyleTmplFunc(dir string) string {
boardCfg := config.GetBoardConfig(dir)
if !boardCfg.IsGlobal() {
// /<board>/board.json exists, overriding the default them and theme set in SQL
return boardCfg.DefaultStyle
}
var defaultStyle string
err := gcsql.QueryRowSQL(`SELECT default_style FROM DBPREFIXboards WHERE dir = ?`,
[]any{dir}, []any{&defaultStyle})
if err != nil || defaultStyle == "" {
gcutil.LogError(err).Caller().
Str("board", dir).
Msg("Unable to get default style attribute of board")
return boardCfg.DefaultStyle
}
return defaultStyle
}
func sectionBoardsTmplFunc(sectionID int) []gcsql.Board {
var boards []gcsql.Board
for _, board := range gcsql.AllBoards {
if board.SectionID == sectionID && !board.IsHidden(false) {
boards = append(boards, board)
}
}
return boards
}
func init() {
events.RegisterEvent([]string{"reset-boards-sections"}, func(trigger string, i ...interface{}) error {
return gcsql.ResetBoardSectionArrays()
})
gctemplates.AddTemplateFuncs(template.FuncMap{
"banMask": banMaskTmplFunc,
"getBoardDirFromID": getBoardDirFromIDTmplFunc,
"intPtrToBoardDir": intPtrToBoardDirTmplFunc,
"getStaffNameFromID": getStaffNameFromIDTmplFunc,
"getAppealBanIP": getAppealBanIPTmplFunc,
"getTopPostID": getTopPostIDTmplFunc,
"numReplies": numRepliesTmplFunc,
"getBoardDir": getBoardDirTmplFunc,
"boardPagePath": boardPagePathTmplFunc,
"getBoardDefaultStyle": getBoardDefaultStyleTmplFunc,
"sectionBoards": sectionBoardsTmplFunc,
})
}