diff --git a/cmd/gochan/main.go b/cmd/gochan/main.go index 679a4295..a9757b2d 100644 --- a/cmd/gochan/main.go +++ b/cmd/gochan/main.go @@ -15,9 +15,11 @@ import ( "github.com/gochan-org/gochan/pkg/gcplugin" "github.com/gochan-org/gochan/pkg/gcsql" + _ "github.com/gochan-org/gochan/pkg/gcsql/initsql" "github.com/gochan-org/gochan/pkg/gctemplates" "github.com/gochan-org/gochan/pkg/posting" "github.com/gochan-org/gochan/pkg/posting/geoip" + _ "github.com/gochan-org/gochan/pkg/posting/uploads/inituploads" "github.com/gochan-org/gochan/pkg/server/serverutil" ) diff --git a/pkg/gcsql/initsql/init.go b/pkg/gcsql/initsql/init.go index 581bb189..8933e876 100644 --- a/pkg/gcsql/initsql/init.go +++ b/pkg/gcsql/initsql/init.go @@ -11,105 +11,127 @@ import ( "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.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": func(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() - }, - "getBoardDirFromID": func(id int) string { - dir, _ := gcsql.GetBoardDir(id) - return dir - }, - "intPtrToBoardDir": func(id *int, ifNil string, ifErr string) string { - if id == nil { - return ifNil - } - dir, err := gcsql.GetBoardDir(*id) - if err != nil { - return ifErr - } - return dir - }, - "getStaffNameFromID": func(id int) string { - username, err := gcsql.GetStaffUsernameFromID(id) - if err != nil { - return "?" - } - return username - }, - "getAppealBanIP": func(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() - }, - "getTopPostID": func(post *gcsql.Post) int { - id, _ := post.TopPostID() - return id - }, - "numReplies": func(boardid, opID int) int { - num, err := gcsql.GetThreadReplyCountFromOP(opID) - if err != nil { - return 0 - } - return num - }, - "getBoardDir": func(id int) string { - dir, err := gcsql.GetBoardDir(id) - if err != nil { - return "" - } - return dir - }, - "boardPagePath": func(board *gcsql.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.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 - }, - "sectionBoards": func(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 - }, + "banMask": banMaskTmplFunc, + "getBoardDirFromID": getBoardDirFromIDTmplFunc, + "intPtrToBoardDir": intPtrToBoardDirTmplFunc, + "getStaffNameFromID": getStaffNameFromIDTmplFunc, + "getAppealBanIP": getAppealBanIPTmplFunc, + "getTopPostID": getTopPostIDTmplFunc, + "numReplies": numRepliesTmplFunc, + "getBoardDir": getBoardDirTmplFunc, + "boardPagePath": boardPagePathTmplFunc, + "getBoardDefaultStyle": getBoardDefaultStyleTmplFunc, + "sectionBoards": sectionBoardsTmplFunc, }) } diff --git a/pkg/posting/uploads/inituploads/init.go b/pkg/posting/uploads/inituploads/init.go index 534edf02..7d87d187 100644 --- a/pkg/posting/uploads/inituploads/init.go +++ b/pkg/posting/uploads/inituploads/init.go @@ -11,27 +11,35 @@ import ( "github.com/gochan-org/gochan/pkg/posting/uploads" ) +func getCatalogThumbnailTmplFunc(img string) string { + _, catalogThumb := uploads.GetThumbnailFilenames(img) + return catalogThumb +} + +func getThreadThumbnailTmplFunc(img string) string { + thumb, _ := uploads.GetThumbnailFilenames(img) + return thumb +} + +func getUploadTypeTmplFunc(name string) string { + return uploads.GetThumbnailExtension(path.Ext(name)) +} + +func getThumbnailWebPathTmplFunc(postID int) string { + filename, board, err := gcsql.GetUploadFilenameAndBoard(postID) + if err != nil { + gcutil.LogError(err).Caller().Int("postID", postID).Send() + return "" + } + filename, _ = uploads.GetThumbnailFilenames(filename) + return config.WebPath(board, "thumb", filename) +} + func init() { gctemplates.AddTemplateFuncs(template.FuncMap{ - "getCatalogThumbnail": func(img string) string { - _, catalogThumb := uploads.GetThumbnailFilenames(img) - return catalogThumb - }, - "getThreadThumbnail": func(img string) string { - thumb, _ := uploads.GetThumbnailFilenames(img) - return thumb - }, - "getUploadType": func(name string) string { - return uploads.GetThumbnailExtension(path.Ext(name)) - }, - "getThumbnailWebPath": func(postID int) string { - filename, board, err := gcsql.GetUploadFilenameAndBoard(postID) - if err != nil { - gcutil.LogError(err).Caller().Int("postID", postID).Send() - return "" - } - filename, _ = uploads.GetThumbnailFilenames(filename) - return config.WebPath(board, "thumb", filename) - }, + "getCatalogThumbnail": getCatalogThumbnailTmplFunc, + "getThreadThumbnail": getThreadThumbnailTmplFunc, + "getUploadType": getUploadTypeTmplFunc, + "getThumbnailWebPath": getThumbnailWebPathTmplFunc, }) }