diff --git a/src/templates/src/education_article_delete.html b/src/templates/src/education_article_delete.html
new file mode 100644
index 0000000..95c7edb
--- /dev/null
+++ b/src/templates/src/education_article_delete.html
@@ -0,0 +1,15 @@
+{{ template "base.html" . }}
+
+{{ define "content" }}
+
+
Are you sure you want to delete this article?
+
+
{{ .Article.Title }}
+ {{ .Article.Content }}
+
+
+
+{{ end }}
diff --git a/src/website/education.go b/src/website/education.go
index b6b387e..446212e 100644
--- a/src/website/education.go
+++ b/src/website/education.go
@@ -191,13 +191,39 @@ func EducationArticleEditSubmit(c *RequestContext) ResponseData {
}
func EducationArticleDelete(c *RequestContext) ResponseData {
- // TODO
- panic("not implemented yet")
+ article, err := fetchEduArticle(c, c.Conn, c.PathParams["slug"], 0)
+ if errors.Is(err, db.NotFound) {
+ return FourOhFour(c)
+ } else if err != nil {
+ panic(err)
+ }
+
+ type deleteData struct {
+ templates.BaseData
+ Article templates.EduArticle
+ SubmitUrl string
+ }
+
+ baseData := getBaseData(c, fmt.Sprintf("Deleting \"%s\"", article.Title), nil)
+
+ var res ResponseData
+ res.MustWriteTemplate("education_article_delete.html", deleteData{
+ BaseData: baseData,
+ Article: templates.EducationArticleToTemplate(article),
+ SubmitUrl: hmnurl.BuildEducationArticleDelete(article.Slug),
+ }, c.Perf)
+ return res
}
func EducationArticleDeleteSubmit(c *RequestContext) ResponseData {
- // TODO
- panic("not implemented yet")
+ _, err := c.Conn.Exec(c, `DELETE FROM education_article WHERE slug = $1`, c.PathParams["slug"])
+ if err != nil {
+ panic(err)
+ }
+
+ res := c.Redirect(hmnurl.BuildEducationIndex(), http.StatusSeeOther)
+ res.AddFutureNotice("success", "Article deleted.")
+ return res
}
func fetchEduArticle(ctx context.Context, dbConn db.ConnOrTx, slug string, t models.EduArticleType) (*models.EduArticle, error) {
diff --git a/src/website/routes.go b/src/website/routes.go
index 8064e86..c89e4ca 100644
--- a/src/website/routes.go
+++ b/src/website/routes.go
@@ -126,7 +126,7 @@ func NewWebsiteRoutes(conn *pgxpool.Pool) http.Handler {
hmnOnly.GET(hmnurl.RegexEducationArticleEdit, educationAuthorsOnly(EducationArticleEdit))
hmnOnly.POST(hmnurl.RegexEducationArticleEdit, educationAuthorsOnly(EducationArticleEditSubmit))
hmnOnly.GET(hmnurl.RegexEducationArticleDelete, educationAuthorsOnly(EducationArticleDelete))
- hmnOnly.POST(hmnurl.RegexEducationArticleDelete, educationAuthorsOnly(EducationArticleDeleteSubmit))
+ hmnOnly.POST(hmnurl.RegexEducationArticleDelete, educationAuthorsOnly(csrfMiddleware(EducationArticleDeleteSubmit)))
hmnOnly.POST(hmnurl.RegexAPICheckUsername, csrfMiddleware(APICheckUsername))