mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-17 10:56:24 -07:00
More postgres fixes (building, deletion)
This commit is contained in:
parent
813b194f27
commit
d1f7769cc7
7 changed files with 72 additions and 87 deletions
|
@ -18,6 +18,10 @@ import (
|
|||
|
||||
func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.Request) {
|
||||
// Delete a post or thread
|
||||
errEv := gcutil.LogError(nil).
|
||||
Str("IP", gcutil.GetRealIP(request))
|
||||
|
||||
defer errEv.Discard()
|
||||
password := request.FormValue("password")
|
||||
passwordMD5 := gcutil.Md5Sum(password)
|
||||
rank := manage.GetStaffRank(request)
|
||||
|
@ -30,21 +34,18 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
}
|
||||
boardid, err := strconv.Atoi(request.FormValue("boardid"))
|
||||
if err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", gcutil.GetRealIP(request)).
|
||||
errEv.Err(err).Caller().
|
||||
Str("boardid", request.FormValue("boardid")).
|
||||
Msg("Invalid form data (boardid)")
|
||||
writer.WriteHeader(http.StatusBadRequest)
|
||||
serverutil.ServeError(writer, err.Error(), wantsJSON, nil)
|
||||
return
|
||||
}
|
||||
|
||||
errEv.Int("boardid", boardid)
|
||||
board, err := gcsql.GetBoardFromID(boardid)
|
||||
if err != nil {
|
||||
serverutil.ServeErrorPage(writer, "Invalid form data: "+err.Error())
|
||||
gcutil.LogError(err).
|
||||
Str("IP", gcutil.GetRealIP(request)).
|
||||
Int("boardid", boardid).
|
||||
errEv.Err(err).Caller().
|
||||
Msg("Invalid form data (error populating data")
|
||||
return
|
||||
}
|
||||
|
@ -63,14 +64,11 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
})
|
||||
return
|
||||
} else if err != nil {
|
||||
gcutil.Logger().Error().
|
||||
Str("requestType", "deletePost").
|
||||
Err(err).
|
||||
Int("postid", post.ID).
|
||||
Int("boardid", board.ID).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", checkedPostID).
|
||||
Msg("Error deleting post")
|
||||
serverutil.ServeError(writer, "Error deleting post: "+err.Error(), wantsJSON, map[string]interface{}{
|
||||
"postid": post.ID,
|
||||
"postid": checkedPostID,
|
||||
"boardid": board.ID,
|
||||
})
|
||||
return
|
||||
|
@ -87,8 +85,7 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
if fileOnly {
|
||||
upload, err := post.GetUpload()
|
||||
if err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", gcutil.GetRealIP(request)).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", post.ID).
|
||||
Msg("Unable to get file upload info")
|
||||
serverutil.ServeError(writer, "Error getting file uplaod info: "+err.Error(),
|
||||
|
@ -99,8 +96,7 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
if upload != nil && upload.Filename != "deleted" {
|
||||
filePath := path.Join(documentRoot, board.Dir, "src", upload.Filename)
|
||||
if err = os.Remove(filePath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", gcutil.GetRealIP(request)).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", post.ID).
|
||||
Str("filename", upload.Filename).
|
||||
Msg("Unable to delete file")
|
||||
|
@ -111,8 +107,7 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
// delete the file's thumbnail
|
||||
thumbPath := path.Join(documentRoot, board.Dir, "thumb", upload.ThumbnailPath("thumb"))
|
||||
if err = os.Remove(thumbPath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", gcutil.GetRealIP(request)).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", post.ID).
|
||||
Str("thumbnail", upload.ThumbnailPath("thumb")).
|
||||
Msg("Unable to delete thumbnail")
|
||||
|
@ -124,8 +119,7 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
if post.IsTopPost {
|
||||
thumbPath := path.Join(documentRoot, board.Dir, "thumb", upload.ThumbnailPath("catalog"))
|
||||
if err = os.Remove(thumbPath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", gcutil.GetRealIP(request)).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", post.ID).
|
||||
Str("catalogThumb", upload.ThumbnailPath("catalog")).
|
||||
Msg("Unable to delete catalog thumbnail")
|
||||
|
@ -135,7 +129,7 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
}
|
||||
}
|
||||
if err = post.UnlinkUploads(true); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("requestType", "deleteFile").
|
||||
Int("postid", post.ID).
|
||||
Msg("Error unlinking post uploads")
|
||||
|
@ -144,27 +138,21 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
return
|
||||
}
|
||||
}
|
||||
// _board, err := post.GetBoard()
|
||||
// if err != nil {
|
||||
// gcutil.LogError(err).
|
||||
// Int("postid", post.ID).
|
||||
// Str("IP", post.IP).
|
||||
// Msg("Unable to get board info from post")
|
||||
// serverutil.ServeError(writer, "Unable to get board info from post: "+err.Error(), wantsJSON, map[string]interface{}{
|
||||
// "postid": post.ID,
|
||||
// })
|
||||
// }
|
||||
// building.BuildBoardPages(_board)
|
||||
building.BuildBoardPages(board)
|
||||
if err = building.BuildBoardPages(board); err != nil {
|
||||
errEv.Err(err).Caller().Send()
|
||||
serverutil.ServeError(writer, "Unable to build board pages for /"+board.Dir+"/: "+err.Error(), wantsJSON, map[string]interface{}{
|
||||
"boardDir": board.Dir,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var opPost *gcsql.Post
|
||||
if post.IsTopPost {
|
||||
opPost = post
|
||||
} else {
|
||||
if opPost, err = post.GetTopPost(); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", post.ID).
|
||||
Str("IP", post.IP).
|
||||
Msg("Unable to get thread information from post")
|
||||
serverutil.ServeError(writer, "Unable to get thread info from post: "+err.Error(), wantsJSON, map[string]interface{}{
|
||||
"postid": post.ID,
|
||||
|
@ -173,9 +161,8 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
}
|
||||
}
|
||||
if building.BuildThreadPages(opPost); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Int("postid", post.ID).
|
||||
Str("IP", post.IP).
|
||||
Msg("Unable to build thread pages")
|
||||
serverutil.ServeError(writer, "Unable to get board info from post: "+err.Error(), wantsJSON, map[string]interface{}{
|
||||
"postid": post.ID,
|
||||
|
@ -185,7 +172,7 @@ func deletePosts(checkedPosts []int, writer http.ResponseWriter, request *http.R
|
|||
} else {
|
||||
// delete the post
|
||||
if err = post.Delete(); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("requestType", "deletePost").
|
||||
Int("postid", post.ID).
|
||||
Msg("Error deleting post")
|
||||
|
|
|
@ -210,9 +210,6 @@ func BuildBoardPages(board *gcsql.Board) error {
|
|||
"currentPage": catalog.currentPage,
|
||||
"board": board,
|
||||
"board_config": boardCfg,
|
||||
"posts": []interface{}{
|
||||
gcsql.Post{},
|
||||
},
|
||||
}, currentPageFile, "text/html"); err != nil {
|
||||
errEv.Err(err).
|
||||
Caller().Send()
|
||||
|
@ -373,7 +370,6 @@ func buildBoard(board *gcsql.Board, force bool) error {
|
|||
}
|
||||
|
||||
if err = BuildBoardPages(board); err != nil {
|
||||
errEv.Err(err).Caller().Send()
|
||||
return err
|
||||
}
|
||||
if err = BuildThreads(true, board.ID, 0); err != nil {
|
||||
|
|
|
@ -32,6 +32,7 @@ func getRecentPosts() ([]recentPost, error) {
|
|||
siteCfg := config.GetSiteConfig()
|
||||
query := `SELECT
|
||||
DBPREFIXposts.id,
|
||||
DBPREFIXposts.message,
|
||||
DBPREFIXposts.message_raw,
|
||||
(SELECT dir FROM DBPREFIXboards WHERE id = t.board_id) AS dir,
|
||||
p.id AS top_post
|
||||
|
@ -54,9 +55,9 @@ func getRecentPosts() ([]recentPost, error) {
|
|||
|
||||
for rows.Next() {
|
||||
var post recentPost
|
||||
var id, threadID, topPostID string
|
||||
var id, topPostID string
|
||||
var message, boardDir, filename string
|
||||
err = rows.Scan(&id, &threadID, &message, &boardDir, &filename, &topPostID)
|
||||
err = rows.Scan(&id, &message, &boardDir, &filename, &topPostID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -84,13 +84,13 @@ func BuildCatalog(boardID int) error {
|
|||
catalogFile, err := os.OpenFile(catalogPath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0777)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Send()
|
||||
return fmt.Errorf("failed opening /%s/catalog.html: %s<br/>", board.Dir, err.Error())
|
||||
return fmt.Errorf("failed opening /%s/catalog.html: %s", board.Dir, err.Error())
|
||||
}
|
||||
|
||||
threadOPs, err := getBoardTopPosts(boardID)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Send()
|
||||
return fmt.Errorf("failed building catalog for /%s/: %s<br/>", board.Dir, err.Error())
|
||||
return fmt.Errorf("failed building catalog for /%s/: %s", board.Dir, err.Error())
|
||||
}
|
||||
boardConfig := config.GetBoardConfig(board.Dir)
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package building
|
|||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"os"
|
||||
"path"
|
||||
|
@ -35,8 +34,9 @@ const (
|
|||
SELECT id, board_id FROM DBPREFIXthreads
|
||||
) t ON t.id = DBPREFIXposts.thread_id
|
||||
INNER JOIN (
|
||||
SELECT id, thread_id FROM DBPREFIXposts where is_top_post
|
||||
) p on p.thread_id = DBPREFIXposts.thread_id`
|
||||
SELECT id, thread_id FROM DBPREFIXposts WHERE is_top_post
|
||||
) p on p.thread_id = DBPREFIXposts.thread_id
|
||||
WHERE is_deleted = FALSE `
|
||||
)
|
||||
|
||||
func truncateString(msg string, limit int, ellipsis bool) string {
|
||||
|
@ -163,10 +163,9 @@ func GetBuildablePostsByIP(ip string, limit int) ([]Post, error) {
|
|||
}
|
||||
|
||||
func getBoardTopPosts(boardID int) ([]Post, error) {
|
||||
const query = postQueryBase + " WHERE is_top_post AND t.board_id = ?"
|
||||
const query = postQueryBase + " AND is_top_post AND t.board_id = ?"
|
||||
rows, err := gcsql.QuerySQL(query, boardID)
|
||||
if err != nil {
|
||||
fmt.Println(query)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
@ -176,7 +175,7 @@ func getBoardTopPosts(boardID int) ([]Post, error) {
|
|||
var threadID int
|
||||
err = rows.Scan(
|
||||
&post.ID, &threadID, &post.IP, &post.Name, &post.Tripcode, &post.Email, &post.Subject, &post.Timestamp,
|
||||
&post.LastModified, &post.ParentID, &post.Message, &post.MessageRaw, &post.BoardID, &post.BoardDir,
|
||||
&post.LastModified, &post.ParentID, &post.Message, &post.MessageRaw, &post.BoardDir,
|
||||
&post.OriginalFilename, &post.Filename, &post.Checksum, &post.Filesize,
|
||||
&post.ThumbnailWidth, &post.ThumbnailHeight, &post.UploadWidth, &post.UploadHeight,
|
||||
)
|
||||
|
@ -202,7 +201,7 @@ func getThreadPosts(thread *gcsql.Thread) ([]Post, error) {
|
|||
var threadID int
|
||||
err = rows.Scan(
|
||||
&post.ID, &threadID, &post.IP, &post.Name, &post.Tripcode, &post.Email, &post.Subject, &post.Timestamp,
|
||||
&post.LastModified, &post.ParentID, &post.Message, &post.MessageRaw, &post.BoardID, &post.BoardDir,
|
||||
&post.LastModified, &post.ParentID, &post.Message, &post.MessageRaw, &post.BoardDir,
|
||||
&post.OriginalFilename, &post.Filename, &post.Checksum, &post.Filesize,
|
||||
&post.ThumbnailWidth, &post.ThumbnailHeight, &post.UploadWidth, &post.UploadHeight,
|
||||
)
|
||||
|
|
|
@ -34,7 +34,7 @@ var (
|
|||
func GetPostFromID(id int, onlyNotDeleted bool) (*Post, error) {
|
||||
query := selectPostsBaseSQL + "WHERE id = ?"
|
||||
if onlyNotDeleted {
|
||||
query += " AND is_deleted = 0"
|
||||
query += " AND is_deleted = FALSE"
|
||||
}
|
||||
post := new(Post)
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(
|
||||
|
@ -54,7 +54,7 @@ func GetPostFromID(id int, onlyNotDeleted bool) (*Post, error) {
|
|||
func GetPostsFromIP(ip string, limit int, onlyNotDeleted bool) ([]Post, error) {
|
||||
sql := selectPostsBaseSQL + ` WHERE DBPREFIXposts.ip = ?`
|
||||
if onlyNotDeleted {
|
||||
sql += " AND is_deleted = 0"
|
||||
sql += " AND is_deleted = FALSE"
|
||||
}
|
||||
|
||||
sql += " ORDER BY id DESC LIMIT ?"
|
||||
|
@ -349,14 +349,20 @@ func (p *Post) Insert(bumpThread bool, boardID int, locked bool, stickied bool,
|
|||
|
||||
func (p *Post) WebPath() string {
|
||||
webRoot := config.GetSystemCriticalConfig().WebRoot
|
||||
var threadID, opID, boardID int
|
||||
var opID int
|
||||
var boardDir string
|
||||
const query = `SELECT thread_id as threadid,
|
||||
(SELECT id from DBPREFIXposts WHERE thread_id = threadid AND is_top_post = TRUE LIMIT 1) as op,
|
||||
(SELECT board_id from DBPREFIXthreads WHERE id = threadid) AS boardid,
|
||||
(SELECT dir FROM DBPREFIXboards WHERE id = boardid) AS dir
|
||||
FROM DBPREFIXposts WHERE id = ?`
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(&threadID, &opID, &boardID, &boardDir))
|
||||
const query = `SELECT
|
||||
op.id,
|
||||
(SELECT dir FROM DBPREFIXboards WHERE id = t.board_id) AS dir
|
||||
FROM DBPREFIXposts
|
||||
LEFT JOIN (
|
||||
SELECT id, board_id FROM DBPREFIXthreads
|
||||
) t ON t.id = DBPREFIXposts.thread_id
|
||||
INNER JOIN (
|
||||
SELECT id, thread_id FROM DBPREFIXposts WHERE is_top_post
|
||||
) op on op.thread_id = DBPREFIXposts.thread_id
|
||||
WHERE DBPREFIXposts.id = ?`
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(&opID, &boardDir))
|
||||
if err != nil {
|
||||
return webRoot
|
||||
}
|
||||
|
|
|
@ -294,9 +294,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
|
||||
data, err := io.ReadAll(file)
|
||||
if err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", post.IP).
|
||||
Str("upload", "read").Send()
|
||||
errEv.Err(err).Caller().Send()
|
||||
serverutil.ServeErrorPage(writer, "Error while trying to read file: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
@ -324,9 +322,8 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
catalogThumbPath = path.Join(systemCritical.DocumentRoot, postBoard.Dir, "thumb", upload.ThumbnailPath("catalog"))
|
||||
|
||||
if err = os.WriteFile(filePath, data, 0644); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("posting", "upload").
|
||||
Str("IP", post.IP).
|
||||
Str("filename", upload.Filename).
|
||||
Str("originalFilename", upload.OriginalFilename).
|
||||
Send()
|
||||
|
@ -335,14 +332,12 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
}
|
||||
|
||||
if ext == "webm" || ext == "mp4" {
|
||||
gcutil.LogInfo().
|
||||
Str("post", "withVideo").
|
||||
Str("IP", post.IP).
|
||||
infoEv.Str("post", "withVideo").
|
||||
Str("filename", handler.Filename).
|
||||
Str("referer", request.Referer()).Send()
|
||||
if post.IsTopPost {
|
||||
if err := createVideoThumbnail(filePath, thumbPath, boardConfig.ThumbWidth); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("filePath", filePath).
|
||||
Str("thumbPath", thumbPath).
|
||||
Int("thumbWidth", boardConfig.ThumbWidth).
|
||||
|
@ -352,7 +347,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
}
|
||||
} else {
|
||||
if err := createVideoThumbnail(filePath, thumbPath, boardConfig.ThumbWidthReply); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("filePath", filePath).
|
||||
Str("thumbPath", thumbPath).
|
||||
Int("thumbWidth", boardConfig.ThumbWidthReply).
|
||||
|
@ -363,7 +358,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
}
|
||||
|
||||
if err := createVideoThumbnail(filePath, catalogThumbPath, boardConfig.ThumbWidthCatalog); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("filePath", filePath).
|
||||
Str("thumbPath", thumbPath).
|
||||
Int("thumbWidth", boardConfig.ThumbWidthCatalog).
|
||||
|
@ -463,9 +458,8 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
thumbnail = createImageThumbnail(img, postBoard.Dir, "op")
|
||||
catalogThumbnail = createImageThumbnail(img, postBoard.Dir, "catalog")
|
||||
if err = imaging.Save(catalogThumbnail, catalogThumbPath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("thumbPath", catalogThumbPath).
|
||||
Str("IP", post.IP).
|
||||
Msg("Couldn't generate catalog thumbnail")
|
||||
serverutil.ServeErrorPage(writer, "Couldn't generate catalog thumbnail: "+err.Error())
|
||||
return
|
||||
|
@ -474,9 +468,8 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
thumbnail = createImageThumbnail(img, postBoard.Dir, "reply")
|
||||
}
|
||||
if err = imaging.Save(thumbnail, thumbPath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("thumbPath", thumbPath).
|
||||
Str("IP", post.IP).
|
||||
Msg("Couldn't generate catalog thumbnail")
|
||||
serverutil.ServeErrorPage(writer, "Couldn't save thumbnail: "+err.Error())
|
||||
return
|
||||
|
@ -486,9 +479,8 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
upload.ThumbnailWidth = img.Bounds().Max.X
|
||||
upload.ThumbnailHeight = img.Bounds().Max.Y
|
||||
if err := syscall.Symlink(filePath, thumbPath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("thumbPath", thumbPath).
|
||||
Str("IP", post.IP).
|
||||
Msg("Couldn't generate catalog thumbnail")
|
||||
serverutil.ServeErrorPage(writer, "Couldn't create thumbnail: "+err.Error())
|
||||
return
|
||||
|
@ -497,9 +489,8 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
// Generate catalog thumbnail
|
||||
catalogThumbnail := createImageThumbnail(img, postBoard.Dir, "catalog")
|
||||
if err = imaging.Save(catalogThumbnail, catalogThumbPath); err != nil {
|
||||
gcutil.LogError(err).
|
||||
errEv.Err(err).Caller().
|
||||
Str("thumbPath", catalogThumbPath).
|
||||
Str("IP", post.IP).
|
||||
Msg("Couldn't generate catalog thumbnail")
|
||||
serverutil.ServeErrorPage(writer, "Couldn't generate catalog thumbnail: "+err.Error())
|
||||
return
|
||||
|
@ -510,8 +501,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
}
|
||||
|
||||
if err = post.Insert(emailCommand != "sage", postBoard.ID, false, false, false, false); err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", post.IP).
|
||||
errEv.Err(err).Caller().
|
||||
Str("sql", "postInsertion").
|
||||
Msg("Unable to insert post")
|
||||
if upload != nil {
|
||||
|
@ -524,8 +514,7 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
}
|
||||
|
||||
if err = post.AttachFile(upload); err != nil {
|
||||
gcutil.LogError(err).
|
||||
Str("IP", post.IP).
|
||||
errEv.Err(err).Caller().
|
||||
Str("sql", "postInsertion").
|
||||
Msg("Unable to attach upload to post")
|
||||
os.Remove(filePath)
|
||||
|
@ -536,8 +525,15 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
|
|||
}
|
||||
|
||||
// rebuild the board page
|
||||
building.BuildBoards(false, postBoard.ID)
|
||||
building.BuildFrontPage()
|
||||
if err = building.BuildBoards(false, postBoard.ID); err != nil {
|
||||
serverutil.ServeErrorPage(writer, "Error building boards: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err = building.BuildFrontPage(); err != nil {
|
||||
serverutil.ServeErrorPage(writer, "Error building front page: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if emailCommand == "noko" {
|
||||
if post.IsTopPost {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue