1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-26 23:06:25 -07:00
gochan/pkg/gcsql/templatefuncs.go

118 lines
2.8 KiB
Go
Raw Normal View History

package gcsql
import (
"strconv"
"text/template"
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/gctemplates"
"github.com/gochan-org/gochan/pkg/gcutil"
)
func init() {
gctemplates.AddTemplateFuncs(template.FuncMap{
"bannedForever": func(ban *IPBan) bool {
return ban.IsActive && ban.Permanent && !ban.CanAppeal
},
"isBanned": func(ban *IPBan, board string) bool {
return ban.IsActive && ban.BoardID != nil
},
"banMask": func(ban 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()
},
"getBoardDirFromID": func(id int) string {
dir, _ := GetBoardDir(id)
return dir
},
"intPtrToBoardDir": func(id *int, ifNil string, ifErr string) string {
if id == nil {
return ifNil
}
dir, err := GetBoardDir(*id)
if err != nil {
return ifErr
}
return dir
},
"getStaffNameFromID": func(id int) string {
username, err := GetStaffUsernameFromID(id)
if err != nil {
return "?"
}
return username
},
"getAppealBanIP": func(appealID int) string {
ban, err := 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()
},
"getTopPostID": func(post *Post) int {
id, _ := post.TopPostID()
return id
},
"numReplies": func(boardid, opID int) int {
num, err := GetThreadReplyCountFromOP(opID)
if err != nil {
return 0
}
return num
},
"getBoardDir": func(id int) string {
dir, err := GetBoardDir(id)
if err != nil {
return ""
}
return dir
},
"boardPagePath": func(board *Board, page int) string {
return config.WebPath(board.Dir, strconv.Itoa(page)+".html")
},
"getBoardDefaultStyle": func(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 := 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
},
"sectionBoards": func(sectionID int) []Board {
var boards []Board
for _, board := range AllBoards {
if board.SectionID == sectionID && !board.IsHidden(false) {
boards = append(boards, board)
}
}
return boards
},
})
}