diff --git a/controllers/deleteOfficeHourHandler.go b/controllers/deleteOfficeHourHandler.go
index 352ff02..4b609b7 100644
--- a/controllers/deleteOfficeHourHandler.go
+++ b/controllers/deleteOfficeHourHandler.go
@@ -2,26 +2,55 @@
package controllers
import (
+ "database/sql"
+ "errors"
"net/http"
- //"officeHours/models"
+ "officeHours/models"
"officeHours/templating"
"strconv"
)
func (b *BaseHandler) DeleteOfficeHourHandler(w http.ResponseWriter, req *http.Request) {
- // TODO: error handling here is by no means sufficient, furthermore
- // 400 BadRequest is for technically wrong stuff (most promimently GET instead of POST)
if req.FormValue("id") != "" {
- _, err := strconv.Atoi(req.FormValue("id"))
+ id, err := strconv.Atoi(req.FormValue("id"))
if err != nil {
w.WriteHeader(http.StatusBadRequest)
+ templating.ServeTemplate(w, "deleteFailure", struct{ Error string }{"Id konnte nicht gelesen werden."})
+ return
}
- //officeHour, err := b.officeHourRepo.FindById(id)
+ officeHour, err := b.officeHourRepo.FindById(id)
if err != nil {
- w.WriteHeader(http.StatusBadRequest)
+ if errors.Is(err, sql.ErrNoRows) {
+ w.WriteHeader(http.StatusNotFound)
+ templating.ServeTemplate(w, "deleteFailure", struct{ Error string }{"Sprechstunde wurde nicht gefunden."})
+ } else {
+ w.WriteHeader(http.StatusInternalServerError)
+ templating.ServeTemplate(w, "deleteFailure", struct{ Error error }{err})
+ }
+ return
}
- //_, err = b.requestRepo.Add(officeHour, models.RequestDelete)
- templating.ServeTemplate(w, "deleteDisabled", nil)
+ if req.FormValue("email") == "" {
+ templating.ServeTemplate(w, "deleteMailForm", struct {
+ Error string
+ OfficeHour models.OfficeHour
+ }{"", officeHour})
+ return
+ }
+ if req.FormValue("email") != officeHour.Tutor.Email {
+ w.WriteHeader(http.StatusUnauthorized)
+ templating.ServeTemplate(w, "deleteMailForm", struct {
+ Error string
+ OfficeHour models.OfficeHour
+ }{"Die Sprechstunde wurde nicht mit dieser Mailadresse angegeben.", officeHour})
+ return
+ }
+ _, err = b.requestRepo.Add(officeHour, models.RequestDelete)
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ templating.ServeTemplate(w, "deleteFailure", struct{ Error error }{err})
+ return
+ }
+ templating.ServeTemplate(w, "deleteSuccess", nil)
} else {
officeHours, _ := b.officeHourRepo.GetAll(true)
timetable, slots := b.GetTimetable(officeHours)
diff --git a/templating/templates.go b/templating/templates.go
index 210ec5a..7642af5 100644
--- a/templating/templates.go
+++ b/templating/templates.go
@@ -43,8 +43,9 @@ func InitTemplates() error {
"addFailure": {"addFailure.html", false},
"addMask": {"addMask.html", false},
"addSuccess": {"addSuccess.html", false},
+ "deleteFailure": {"deleteFailure.html", false},
+ "deleteMailForm": {"deleteMailForm.html", false},
"deleteSuccess": {"deleteSuccess.html", false},
- "deleteDisabled": {"deleteDisabled.html", false},
"executeFailure": {"executeFailure.html", false},
"executeSuccess": {"executeSuccess.html", false},
"index": {"index.html", false},
diff --git a/templating/templates/deleteDisabled.html b/templating/templates/deleteDisabled.html
deleted file mode 100644
index bd4b1b7..0000000
--- a/templating/templates/deleteDisabled.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{{define "title"}}Sprechstunde löschen{{end}}
-
-{{define "content"}}
-Sprechstunden zu löschen wurde wegen zu viel Spam deaktiviert.
-Falls du deine Sprechstunde löschen möchtest, melde dich bitte unter sprechstundentool@mathebau.de.
-{{end}}
diff --git a/templating/templates/deleteFailure.html b/templating/templates/deleteFailure.html
new file mode 100644
index 0000000..88b95c5
--- /dev/null
+++ b/templating/templates/deleteFailure.html
@@ -0,0 +1,5 @@
+{{define "title"}}Sprechstunde löschen{{end}}
+
+{{define "content"}}
+Das Löschen der Sprechstunde ist fehlgeschlagen: {{.Error}}
+{{end}}
diff --git a/templating/templates/deleteMailForm.html b/templating/templates/deleteMailForm.html
new file mode 100644
index 0000000..af4b8ff
--- /dev/null
+++ b/templating/templates/deleteMailForm.html
@@ -0,0 +1,19 @@
+{{define "title"}}Sprechstunde löschen{{end}}
+
+{{define "content"}}
+{{.Error}}
+
+Willst du die Sprechstunde
+ {{printf "%02d" .OfficeHour.Date.Hour}}:{{printf "%02d" .OfficeHour.Date.Minute}} - {{printf "%02d" .OfficeHour.EndDate.Hour}}:{{printf "%02d" .OfficeHour.EndDate.Minute}}
+ {{if eq .OfficeHour.Date.Week 1}}in ungeraden Vorlesungswochen
{{end}}{{if eq .OfficeHour.Date.Week 2}}in geraden Vorlesungswochen
{{end}}
+ {{.OfficeHour.Course.Name}}
+ {{.OfficeHour.Tutor.Name}}
+ {{.OfficeHour.Room.Name}}
+wirklich löschen? Bitte bestätige dies durch Angabe der Mailadresse, mit der die Sprechstunde angelegt wurde:
+