dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

club.go (4541B)


      1 package handlers
      2 
      3 import (
      4 	"dkforest/pkg/database"
      5 	"dkforest/pkg/utils"
      6 	"github.com/asaskevich/govalidator"
      7 	"github.com/labstack/echo"
      8 	"net/http"
      9 )
     10 
     11 func ClubHandler(c echo.Context) error {
     12 	authUser := c.Get("authUser").(*database.User)
     13 	db := c.Get("database").(*database.DkfDB)
     14 	var data clubData
     15 	data.ActiveTab = "home"
     16 	data.ForumThreads, _ = db.GetClubForumThreads(authUser.ID)
     17 	return c.Render(http.StatusOK, "club.home", data)
     18 }
     19 
     20 func ClubNewThreadHandler(c echo.Context) error {
     21 	authUser := c.Get("authUser").(*database.User)
     22 	db := c.Get("database").(*database.DkfDB)
     23 	var data clubNewThreadData
     24 	data.ActiveTab = "home"
     25 
     26 	if c.Request().Method == http.MethodPost {
     27 		data.ThreadName = c.Request().PostFormValue("thread_name")
     28 		data.Message = c.Request().PostFormValue("message")
     29 		if !govalidator.RuneLength(data.ThreadName, "3", "255") {
     30 			data.ErrorThreadName = "Thread name must have 3-255 characters"
     31 			return c.Render(http.StatusOK, "club.new-thread", data)
     32 		}
     33 		if !govalidator.RuneLength(data.Message, "3", "10000") {
     34 			data.ErrorMessage = "Thread name must have at least 3 characters"
     35 			return c.Render(http.StatusOK, "club.new-thread", data)
     36 		}
     37 		thread := database.MakeForumThread(data.ThreadName, authUser.ID, 0)
     38 		db.DB().Create(&thread)
     39 		message := database.MakeForumMessage(data.Message, authUser.ID, thread.ID)
     40 		db.DB().Create(&message)
     41 		return c.Redirect(http.StatusFound, "/club/threads/"+utils.FormatInt64(int64(thread.ID)))
     42 	}
     43 
     44 	return c.Render(http.StatusOK, "club.new-thread", data)
     45 }
     46 
     47 func ClubThreadReplyHandler(c echo.Context) error {
     48 	authUser := c.Get("authUser").(*database.User)
     49 	db := c.Get("database").(*database.DkfDB)
     50 	threadID := database.ForumThreadID(utils.DoParseInt64(c.Param("threadID")))
     51 	thread, err := db.GetForumThread(threadID)
     52 	if err != nil {
     53 		return c.Redirect(http.StatusFound, "/")
     54 	}
     55 	var data clubNewThreadReplyData
     56 	data.ActiveTab = "home"
     57 	data.Thread = thread
     58 
     59 	if c.Request().Method == http.MethodPost {
     60 		data.Message = c.Request().PostFormValue("message")
     61 		if !govalidator.RuneLength(data.Message, "3", "10000") {
     62 			data.ErrorMessage = "Message must have at least 3 characters"
     63 			return c.Render(http.StatusOK, "club.new-thread", data)
     64 		}
     65 		message := database.MakeForumMessage(data.Message, authUser.ID, thread.ID)
     66 		db.DB().Create(&message)
     67 		return c.Redirect(http.StatusFound, "/club/threads/"+utils.FormatInt64(int64(thread.ID)))
     68 	}
     69 
     70 	return c.Render(http.StatusOK, "club.thread-reply", data)
     71 }
     72 
     73 func ClubThreadEditMessageHandler(c echo.Context) error {
     74 	authUser := c.Get("authUser").(*database.User)
     75 	db := c.Get("database").(*database.DkfDB)
     76 	threadID := database.ForumThreadID(utils.DoParseInt64(c.Param("threadID")))
     77 	messageID := database.ForumMessageID(utils.DoParseInt64(c.Param("messageID")))
     78 	thread, err := db.GetForumThread(threadID)
     79 	if err != nil {
     80 		return c.Redirect(http.StatusFound, "/")
     81 	}
     82 	msg, err := db.GetForumMessage(messageID)
     83 	if err != nil {
     84 		return c.Redirect(http.StatusFound, "/")
     85 	}
     86 	if msg.UserID != authUser.ID && !authUser.IsAdmin {
     87 		return c.Redirect(http.StatusFound, "/")
     88 	}
     89 	var data clubNewThreadReplyData
     90 	data.ActiveTab = "home"
     91 	data.IsEdit = true
     92 	data.Thread = thread
     93 	data.Message = msg.Message
     94 
     95 	if c.Request().Method == http.MethodPost {
     96 		data.Message = c.Request().PostFormValue("message")
     97 		if !govalidator.RuneLength(data.Message, "3", "10000") {
     98 			data.ErrorMessage = "Message must have at least 3 characters"
     99 			return c.Render(http.StatusOK, "club.new-thread", data)
    100 		}
    101 		msg.Message = data.Message
    102 		msg.DoSave(db)
    103 		return c.Redirect(http.StatusFound, "/club/threads/"+utils.FormatInt64(int64(thread.ID)))
    104 	}
    105 
    106 	return c.Render(http.StatusOK, "club.thread-reply", data)
    107 }
    108 
    109 func ClubMembersHandler(c echo.Context) error {
    110 	db := c.Get("database").(*database.DkfDB)
    111 	var data clubMembersData
    112 	data.ActiveTab = "members"
    113 	data.Members, _ = db.GetClubMembers()
    114 	return c.Render(http.StatusOK, "club.members", data)
    115 }
    116 
    117 func ClubThreadHandler(c echo.Context) error {
    118 	authUser := c.Get("authUser").(*database.User)
    119 	db := c.Get("database").(*database.DkfDB)
    120 	threadID := database.ForumThreadID(utils.DoParseInt64(c.Param("threadID")))
    121 	thread, err := db.GetForumThread(threadID)
    122 	if err != nil {
    123 		return c.Redirect(http.StatusFound, "/")
    124 	}
    125 	var data clubThreadData
    126 	data.ActiveTab = "home"
    127 	data.Thread = thread
    128 	data.Messages, _ = db.GetThreadMessages(threadID)
    129 
    130 	// Update read record
    131 	db.UpdateForumReadRecord(authUser.ID, threadID)
    132 
    133 	return c.Render(http.StatusOK, "club.thread", data)
    134 }