commit 29f9059377614ae50d0e98aa4a2a8b7c7748df83
parent 8ef9ea676be2e3df28fb087e5a315e373bf607e2
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 5 Jun 2023 08:42:13 -0700
Display news from database
Diffstat:
6 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/cmd/dkf/migrations/137.sql b/cmd/dkf/migrations/137.sql
@@ -0,0 +1,4 @@
+-- +migrate Up
+INSERT INTO forum_categories (name, slug) VALUES ('News', 'news');
+
+-- +migrate Down
diff --git a/pkg/database/table_forum_threads.go b/pkg/database/table_forum_threads.go
@@ -179,6 +179,12 @@ func (d *DkfDB) GetForumThreads() (out []ForumThread, err error) {
return
}
+type ForumNews struct {
+ ForumThread
+ ForumMessage
+ User
+}
+
type ForumThreadAug struct {
ForumThread
Author string
@@ -236,6 +242,20 @@ ORDER BY m.created_at DESC, t.id DESC`, userID, categoryID).Scan(&out).Error
return
}
+func (d *DkfDB) GetForumNews(categoryID ForumCategoryID) (out []ForumNews, err error) {
+ err = d.db.Raw(`SELECT t.*,
+ m.*,
+ mu.*
+FROM forum_threads t
+-- Find first message for thread
+INNER JOIN forum_messages m ON m.thread_id = t.id AND m.id = (SELECT min(id) FROM forum_messages WHERE thread_id = t.id)
+-- Join last message user
+INNER JOIN users mu ON mu.id = m.user_id
+WHERE t.category_id = ?
+ORDER BY m.created_at DESC, t.id DESC`, categoryID).Scan(&out).Error
+ return
+}
+
func (d *DkfDB) GetPublicForumThreadsSearch(userID UserID) (out []ForumThreadAug, err error) {
err = d.db.Raw(`SELECT t.*,
u.username as author,
diff --git a/pkg/web/handlers/data.go b/pkg/web/handlers/data.go
@@ -143,6 +143,7 @@ type forgotPasswordResetData struct {
}
type newsData struct {
+ News []database.ForumNews
}
type gistData struct {
@@ -302,7 +303,8 @@ type deleteLinkMirrorData struct {
}
type editForumThreadData struct {
- Thread database.ForumThread
+ Thread database.ForumThread
+ Categories []database.ForumCategory
}
type deleteForumThreadData struct {
diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go
@@ -1174,7 +1174,10 @@ func MemeHandler(c echo.Context) error {
}
func NewsHandler(c echo.Context) error {
+ db := c.Get("database").(*database.DkfDB)
var data newsData
+ category, _ := db.GetForumCategoryBySlug("news")
+ data.News, _ = db.GetForumNews(category.ID)
return c.Render(http.StatusOK, "news", data)
}
@@ -2167,6 +2170,7 @@ func ThreadEditHandler(c echo.Context) error {
}
var data editForumThreadData
data.Thread = thread
+ data.Categories, _ = db.GetForumCategories()
if c.Request().Method == http.MethodPost {
thread.CategoryID = database.ForumCategoryID(utils.DoParseInt64(c.Request().PostFormValue("category_id")))
diff --git a/pkg/web/public/views/pages/news.gohtml b/pkg/web/public/views/pages/news.gohtml
@@ -10,6 +10,21 @@
<div class="container">
+ {{ range .Data.News }}
+ <div>
+ <h3>{{ .ForumThread.Name }}</h3>
+ <div class="mb-3">
+ <time datetime="2021-08-23 00:00">{{ .ForumMessage.CreatedAt.Format "Jan 02, 2006" }}</time> |
+ <a {{ .User.GenerateChatStyle | attr }} href="/u/{{ .User.Username }}">{{ .User.Username }}</a>
+ {{- if .IsSigned -}}
+ <a href="/t/{{ .ForumThread.UUID }}/messages/{{ .ForumMessage.UUID }}/raw" class="ml-2" title="PGP signed" rel="noopener noreferrer" target="_blank">✅</a>
+ {{- end -}}
+ </div>
+ {{ .Escape $.DB | safe }}
+ </div>
+ <hr class="mt-5 mb-5" />
+ {{ end }}
+
<div>
<h3>dkforest I2P address</h3>
<div class="mb-3"><time datetime="2021-08-23 00:00">Jan 20, 2023</time></div>
diff --git a/pkg/web/public/views/pages/thread-edit.gohtml b/pkg/web/public/views/pages/thread-edit.gohtml
@@ -9,9 +9,9 @@
<input type="hidden" name="csrf" value="{{ .CSRF }}" />
<div class="form-group">
<select name="category_id" class="form-control">
- <option value="1"{{ if eq .Data.Thread.CategoryID 1 }} selected{{ end }}>General</option>
- <option value="2"{{ if eq .Data.Thread.CategoryID 2 }} selected{{ end }}>Random</option>
- <option value="3"{{ if eq .Data.Thread.CategoryID 3 }} selected{{ end }}>Retarded Area</option>
+ {{ range .Data.Categories }}
+ <option value="{{ .ID }}"{{ if eq $.Data.Thread.CategoryID .ID }} selected{{ end }}>{{ .Name }}</option>
+ {{ end }}
</select>
</div>
<div class="form-group">