1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-09-04 10:06:24 -07:00

Add Board property to MessagePostContainer

This commit is contained in:
Eggbertx 2022-07-25 09:29:00 -07:00
parent 454ce0ab05
commit 84ad96e465
6 changed files with 46 additions and 21 deletions

View file

@ -311,7 +311,7 @@ func utilHandler(writer http.ResponseWriter, request *http.Request) {
}
if err = gcsql.UpdatePost(postid, request.FormValue("editemail"), request.FormValue("editsubject"),
posting.FormatMessage(request.FormValue("editmsg")), request.FormValue("editmsg")); err != nil {
posting.FormatMessage(request.FormValue("editmsg"), board.Dir), request.FormValue("editmsg")); err != nil {
serverutil.ServeErrorPage(writer, gclog.Print(gclog.LErrorLog,
"Unable to edit post: ", err.Error()))
return

View file

@ -23,8 +23,9 @@ var (
// GetAllNondeletedMessageRaw gets all the raw message texts from the database, saved per id
func GetAllNondeletedMessageRaw() ([]MessagePostContainer, error) {
const sql = `select posts.id, posts.message, posts.message_raw from DBPREFIXposts as posts
WHERE posts.is_deleted = FALSE`
const sql = `SELECT posts.id, posts.message, posts.message_raw, DBPREFIXboards.dir as dir
FROM DBPREFIXposts as posts, DBPREFIXboards
where posts.is_deleted = FALSE`
rows, err := QuerySQL(sql)
if err != nil {
return nil, err
@ -33,7 +34,7 @@ func GetAllNondeletedMessageRaw() ([]MessagePostContainer, error) {
for rows.Next() {
var message MessagePostContainer
var formattedHTML template.HTML
if err = rows.Scan(&message.ID, &formattedHTML, &message.MessageRaw); err != nil {
if err = rows.Scan(&message.ID, &formattedHTML, &message.MessageRaw, &message.Board); err != nil {
return nil, err
}
message.Message = template.HTML(formattedHTML)
@ -447,19 +448,19 @@ func (wf *WordFilter) StaffName() string {
return staff.Username
}
// Apply runs the current wordfilter on the given post, without checking the board or (re)building the post
// Apply runs the current wordfilter on the given string, without checking the board or (re)building the post
// It returns an error if it is a regular expression and regexp.Compile failed to parse it
func (wf *WordFilter) Apply(p *Post) error {
func (wf *WordFilter) Apply(message string) (string, error) {
if wf.IsRegex {
re, err := regexp.Compile(wf.Search)
if err != nil {
return err
return message, err
}
p.MessageText = re.ReplaceAllString(p.MessageText, wf.ChangeTo)
message = re.ReplaceAllString(message, wf.ChangeTo)
} else {
p.MessageText = strings.Replace(p.MessageText, wf.Search, wf.ChangeTo, -1)
message = strings.Replace(message, wf.Search, wf.ChangeTo, -1)
}
return nil
return message, nil
}
//getDatabaseVersion gets the version of the database, or an error if none or multiple exist

View file

@ -386,6 +386,7 @@ type MessagePostContainer struct {
ID int
MessageRaw string
Message template.HTML
Board string
}
// Deprecated. Struct was made for use with old database, deprecated since refactor of april 2020.

View file

@ -599,7 +599,7 @@ var actions = []Action{
}
for i := range messages {
messages[i].Message = posting.FormatMessage(messages[i].MessageRaw)
messages[i].Message = posting.FormatMessage(messages[i].MessageRaw, messages[i].Board)
}
if err = gcsql.SetFormattedInDatabase(messages); err != nil {
return "", err

View file

@ -32,9 +32,6 @@ type MessageFormatter struct {
}
func (mf *MessageFormatter) InitBBcode() {
if config.GetBoardConfig("").DisableBBcode {
return
}
mf.bbCompiler = bbcode.NewCompiler(true, true)
mf.bbCompiler.SetTag("center", nil)
mf.bbCompiler.SetTag("code", nil)
@ -44,15 +41,34 @@ func (mf *MessageFormatter) InitBBcode() {
mf.bbCompiler.SetTag("size", nil)
}
func (mf *MessageFormatter) Compile(msg string) string {
if config.GetBoardConfig("").DisableBBcode {
func (mf *MessageFormatter) ApplyWordFilters(message string, boardDir string) (string, error) {
var filters []gcsql.WordFilter
var err error
if boardDir == "" {
filters, err = gcsql.GetWordFilters()
} else {
filters, err = gcsql.GetBoardWordFilters(boardDir)
}
if err != nil {
return message, err
}
for _, wf := range filters {
if message, err = wf.Apply(message); err != nil {
return message, err
}
}
return message, nil
}
func (mf *MessageFormatter) Compile(msg string, boardDir string) string {
if config.GetBoardConfig(boardDir).DisableBBcode {
return msg
}
return mf.bbCompiler.Compile(msg)
}
func FormatMessage(message string) template.HTML {
message = msgfmtr.Compile(message)
func FormatMessage(message string, boardDir string) template.HTML {
message = msgfmtr.Compile(message, boardDir)
// prepare each line to be formatted
postLines := strings.Split(message, "<br>")
for i, line := range postLines {

View file

@ -51,6 +51,13 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
post.ParentID, _ = strconv.Atoi(request.FormValue("threadid"))
post.BoardID, _ = strconv.Atoi(request.FormValue("boardid"))
var postBoard gcsql.Board
postBoard, err := gcsql.GetBoardFromID(post.BoardID)
if err != nil {
serverutil.ServeErrorPage(writer, gclog.Print(gclog.LErrorLog,
"Error getting board info: ", err.Error()))
return
}
var emailCommand string
formName = request.FormValue("postname")
@ -79,7 +86,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
post.Subject = request.FormValue("postsubject")
post.MessageText = strings.Trim(request.FormValue("postmsg"), "\r\n")
var err error
if maxMessageLength, err = gcsql.GetMaxMessageLength(post.BoardID); err != nil {
serverutil.ServeErrorPage(writer, gclog.Print(gclog.LErrorLog,
"Error getting board info: ", err.Error()))
@ -89,7 +96,8 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
serverutil.ServeErrorPage(writer, "Post body is too long")
return
}
post.MessageHTML = FormatMessage(post.MessageText)
post.MessageHTML = FormatMessage(post.MessageText, postBoard.Dir)
password := request.FormValue("postpassword")
if password == "" {
password = gcutil.RandomString(8)
@ -159,7 +167,6 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
boards, _ := gcsql.GetAllBoards()
postBoard, _ := gcsql.GetBoardFromID(post.BoardID)
if banStatus != nil && banStatus.IsBanned(postBoard.Dir) {
var banpageBuffer bytes.Buffer