diff --git a/notifications.go b/notifications.go index f1dbc0d..3961195 100644 --- a/notifications.go +++ b/notifications.go @@ -52,6 +52,11 @@ func (db *database) deleteNotification(id int) error { return err } +func (db *database) deleteAllNotifications() error { + _, err := db.exec("delete from notifications") + return err +} + type notificationsRequestConfig struct { offset, limit int } @@ -165,15 +170,25 @@ func (a *goBlog) notificationsAdmin(w http.ResponseWriter, r *http.Request) { } func (a *goBlog) notificationsAdminDelete(w http.ResponseWriter, r *http.Request) { - id, err := strconv.Atoi(r.FormValue("notificationid")) - if err != nil { - a.serveError(w, r, err.Error(), http.StatusBadRequest) - return - } - err = a.db.deleteNotification(id) - if err != nil { - a.serveError(w, r, err.Error(), http.StatusInternalServerError) - return + if idString := r.FormValue("notificationid"); idString != "" { + // Delete single notification with id + id, err := strconv.Atoi(idString) + if err != nil { + a.serveError(w, r, err.Error(), http.StatusBadRequest) + return + } + err = a.db.deleteNotification(id) + if err != nil { + a.serveError(w, r, err.Error(), http.StatusInternalServerError) + return + } + } else { + // Delete all notifications + err := a.db.deleteAllNotifications() + if err != nil { + a.serveError(w, r, err.Error(), http.StatusInternalServerError) + return + } } http.Redirect(w, r, ".", http.StatusFound) } diff --git a/strings/de.yaml b/strings/de.yaml index f302936..71befb0 100644 --- a/strings/de.yaml +++ b/strings/de.yaml @@ -10,6 +10,7 @@ contactagreesend: "Akzeptieren & Senden" contactsend: "Senden" create: "Erstellen" delete: "Löschen" +deleteall: "Alle löschen" deletedposts: "Gelöschte Posts" deletedpostsdesc: "Gelöschte Posts, die nach 7 Tagen endgültig gelöscht werden." docomment: "Kommentieren" diff --git a/strings/default.yaml b/strings/default.yaml index 21d6fc6..48163e4 100644 --- a/strings/default.yaml +++ b/strings/default.yaml @@ -13,6 +13,7 @@ contactagreesend: "Accept & Send" contactsend: "Send" create: "Create" delete: "Delete" +deleteall: "Delete all" deletedposts: "Deleted posts" deletedpostsdesc: "Deleted posts that will be permanently deleted after 7 days." docomment: "Comment" diff --git a/ui.go b/ui.go index 003ed7e..e7a3f85 100644 --- a/ui.go +++ b/ui.go @@ -1148,6 +1148,10 @@ func (a *goBlog) renderNotificationsAdmin(hb *htmlBuilder, rd *renderData) { hb.writeElementOpen("h1") hb.writeEscaped(a.ts.GetTemplateStringVariant(rd.Blog.Lang, "notifications")) hb.writeElementClose("h1") + // Delete all form + hb.writeElementOpen("form", "class", "actions", "method", "post", "action", "/notifications/delete") + hb.writeElementOpen("input", "type", "submit", "value", a.ts.GetTemplateStringVariant(rd.Blog.Lang, "deleteall")) + hb.writeElementClose("form") // Notifications tdLocale := matchTimeDiffLocale(rd.Blog.Lang) for _, n := range nrd.notifications {