From 2ce7a1fae1adb3eb1c3d252e6121c3c7b1dbf85d Mon Sep 17 00:00:00 2001 From: Gonne Date: Mon, 5 Sep 2022 20:10:35 +0200 Subject: [PATCH] =?UTF-8?q?Sprechstunden=20l=C3=B6schen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/addOfficeHourHandlers.go | 2 +- controllers/deleteOfficeHourHandler.go | 29 ++++++++++++++++++++++++++ controllers/getHandlers.go | 6 ++++-- controllers/timetable.go | 28 ++++++++----------------- main.go | 1 + repositories/request.go | 5 +++++ templates/addFailure.html | 4 ++++ templates/addMask.html | 4 ++++ templates/addSuccess.html | 5 ++++- templates/confirmationMail | 8 +++---- templates/deleteSuccess.html | 13 ++++++++++++ templates/executeFailure.html | 4 ++++ templates/index.html | 1 + templates/requestNotFound.html | 13 +++++++++++- templates/td.html | 11 +++++----- 15 files changed, 100 insertions(+), 34 deletions(-) create mode 100644 controllers/deleteOfficeHourHandler.go create mode 100644 templates/deleteSuccess.html diff --git a/controllers/addOfficeHourHandlers.go b/controllers/addOfficeHourHandlers.go index 089abcd..dcbcb27 100644 --- a/controllers/addOfficeHourHandlers.go +++ b/controllers/addOfficeHourHandlers.go @@ -155,7 +155,7 @@ func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Requ } officeHour, _ = b.officeHourRepo.FindById(id) b.requestRepo.Add(officeHour, models.RequestActivate) - tmpl, _ := template.ParseFiles("template/addSuccess.html") + tmpl, err := template.ParseFiles("templates/addSuccess.html") tmpl.Execute(w, struct{}{}) } } diff --git a/controllers/deleteOfficeHourHandler.go b/controllers/deleteOfficeHourHandler.go new file mode 100644 index 0000000..e0d29ae --- /dev/null +++ b/controllers/deleteOfficeHourHandler.go @@ -0,0 +1,29 @@ +// deleteOfficeHourHandler +package controllers + +import ( + "html/template" + "net/http" + "sprechstundentool/models" + "strconv" +) + +func (b *BaseHandler) DeleteOfficeHourHandler(w http.ResponseWriter, req *http.Request) { + if req.FormValue("id") != "" { + id, err := strconv.Atoi(req.FormValue("id")) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + } + officeHour, err := b.officeHourRepo.FindById(id) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + } + _, err = b.requestRepo.Add(officeHour, models.RequestDelete) + tmpl, _ := template.New("deleteSuccess.html").ParseFiles("templates/deleteSuccess.html") + tmpl.Execute(w, struct{}{}) + } else { + officeHours, _ := b.officeHourRepo.GetAll(true) + timetable, slots := GetTimetable(officeHours) + b.writeTimetablePage(w, req, printTimetable(timetable, slots, true)) + } +} diff --git a/controllers/getHandlers.go b/controllers/getHandlers.go index 6ca0560..4aa4359 100644 --- a/controllers/getHandlers.go +++ b/controllers/getHandlers.go @@ -20,7 +20,8 @@ func (b *BaseHandler) GetByRoomHandler(w http.ResponseWriter, req *http.Request) return } officeHours, _ := b.officeHourRepo.FindByRoom(room, true) - b.writeTimetablePage(w, req, printTimetable(GetTimetable(officeHours))) + timetable, slots := GetTimetable(officeHours) + b.writeTimetablePage(w, req, printTimetable(timetable, slots, false)) } func (b *BaseHandler) GetByCourseHandler(w http.ResponseWriter, req *http.Request) { @@ -34,7 +35,8 @@ func (b *BaseHandler) GetByCourseHandler(w http.ResponseWriter, req *http.Reques return } officeHours, _ := b.officeHourRepo.FindByCourse(course, true) - b.writeTimetablePage(w, req, printTimetable(GetTimetable(officeHours))) + timetable, slots := GetTimetable(officeHours) + b.writeTimetablePage(w, req, printTimetable(timetable, slots, false)) } func (b *BaseHandler) writeTimetablePage(w http.ResponseWriter, req *http.Request, timetable template.HTML) { diff --git a/controllers/timetable.go b/controllers/timetable.go index bb044e7..37a0da6 100644 --- a/controllers/timetable.go +++ b/controllers/timetable.go @@ -47,10 +47,13 @@ func GetTimetable(officeHours []models.OfficeHour) (timetable map[models.Date]ma return fullTimetable, slots } -func printTimetable(timetable map[models.Date]map[int]models.OfficeHour, slots []int) template.HTML { +func printTimetable(timetable map[models.Date]map[int]models.OfficeHour, slots []int, deleteIcons bool) template.HTML { var tableBody string - tableCell, _ := template.ParseFiles("templates/td.html") + tableCell, _ := template.New("td.html"). + Funcs(template.FuncMap{"mod": func(i int, j int) int { return i % j }, + "add": func(i int, j int) int { return i + j }, + "divide": func(i int, j int) int { return i / j }}).ParseFiles("templates/td.html") for hour := 8; hour < 19; hour += 1 { for minute := 0; minute < 60; minute += models.MinuteGranularity { tableBody += "" @@ -82,23 +85,10 @@ func printTimetable(timetable map[models.Date]map[int]models.OfficeHour, slots [ } else { var celldata bytes.Buffer data := struct { - Rowspan int - StartHour int - StartMinute int - EndHour int - EndMinute int - CourseName string - TutorName string - RoomName string - }{current.Duration / models.MinuteGranularity, - current.Hour, - current.Minute, - current.Hour + ((current.Minute + current.Duration) / 60), - (current.Minute + current.Duration) % 60, - template.HTMLEscapeString(current.Course.Name), - current.Tutor.Name, - current.Room.Name, - } + OfficeHour models.OfficeHour + MinuteGranularity int + DeleteIcons bool + }{current, models.MinuteGranularity, deleteIcons} tableCell.Execute(&celldata, data) tableBody += celldata.String() } diff --git a/main.go b/main.go index 7afd916..eb2f7b8 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,7 @@ func main() { http.HandleFunc("/getByCourse", h.GetByCourseHandler) http.HandleFunc("/addOfficeHour", h.AddOfficeHourHandler) http.HandleFunc("/confirmRequest", h.ConfirmRequestHandler) + http.HandleFunc("/deleteOfficeHour", h.DeleteOfficeHourHandler) http.HandleFunc("/", h.RootHandler) http.ListenAndServe(":8080", nil) diff --git a/repositories/request.go b/repositories/request.go index 115545d..a2efd3b 100644 --- a/repositories/request.go +++ b/repositories/request.go @@ -50,6 +50,10 @@ func (r *RequestRepo) FindByOfficeHour(officeHour models.OfficeHour) ([]models.R if err := rows.Scan(&request.Id, &officeHourId, &request.Action, &request.Secret); err != nil { return requests, err } + request.OfficeHour, err = r.officeHourRepo.FindById(officeHourId) + if err != nil { + return requests, err + } requests = append(requests, request) } return requests, nil @@ -118,6 +122,7 @@ func (r *RequestRepo) newSecret() (string, error) { func sendConfirmationMail(request models.Request) error { to := []string{request.OfficeHour.Tutor.Email} tmpl, err := template.New("confirmationMail").Funcs(template.FuncMap{"DayName": models.DayName}).ParseFiles("templates/confirmationMail") + var message bytes.Buffer err = tmpl.Execute(&message, request) if err != nil { diff --git a/templates/addFailure.html b/templates/addFailure.html index 6ec9f8b..bd00fde 100644 --- a/templates/addFailure.html +++ b/templates/addFailure.html @@ -6,5 +6,9 @@ Irgendetwas ist schief gegangen. Bitte sende folgende Daten an sprechstundentool@mathebau.de mit einer Beschreibung, was du tun wolltest.
{{.}} + \ No newline at end of file diff --git a/templates/addMask.html b/templates/addMask.html index 8efab4e..bfa3e9a 100644 --- a/templates/addMask.html +++ b/templates/addMask.html @@ -45,5 +45,9 @@ {{range $room := .Rooms}}
{{$room.Name}}
{{$room.MaxOccupy}} Sprechstunde{{if gt $room.MaxOccupy 1}}n{{end}}

{{end}} + \ No newline at end of file diff --git a/templates/addSuccess.html b/templates/addSuccess.html index c5c3ce6..f0a7a03 100644 --- a/templates/addSuccess.html +++ b/templates/addSuccess.html @@ -5,6 +5,9 @@ Die Sprechstunde wurde angelegt. Du solltest eine Mail mit einem Aktivierungslink erhalten haben.
- {{.}} + \ No newline at end of file diff --git a/templates/confirmationMail b/templates/confirmationMail index bf314e7..660d629 100644 --- a/templates/confirmationMail +++ b/templates/confirmationMail @@ -1,11 +1,9 @@ To: {{.OfficeHour.Tutor.Email}} - -Subject: Sprechstunde anlegen - +Subject: Sprechstunde {{if eq .Action 1}}anlegen{{end}}{{if eq .Action 2}}löschen{{end}} Hallo {{.OfficeHour.Tutor.Name}}, -mit deiner Emailadresse soll eine Sprechstunde mit folgenden Daten angelegt werden: +mit deiner Emailadresse soll eine Sprechstunde mit folgenden Daten {{if eq .Action 1}}angelegt werden{{end}}{{if eq .Action 2}}gelöscht werden{{end}}: {{.OfficeHour.Course.Name}} {{DayName .OfficeHour.Date.Day}} @@ -13,7 +11,7 @@ ab {{.OfficeHour.Date.Hour}}:{{printf "%02d" .OfficeHour.Date.Minute}} Uhr {{.OfficeHour.Duration}} Minuten {{.OfficeHour.Tutor.Name}} -Wenn diese Daten richtig sind, so bestätige die Sprechstunde durch Abrufen der folgenden URL: +Wenn dies richtig ist, so bestätige die Sprechstunde durch Abrufen der folgenden URL: https://sprechstunden.mathebau.de/confirmRequest?code={{.Secret}} Solltest du diese Email nicht erwartet haben, so kannst du sie einfach ignorieren. diff --git a/templates/deleteSuccess.html b/templates/deleteSuccess.html new file mode 100644 index 0000000..668f9e4 --- /dev/null +++ b/templates/deleteSuccess.html @@ -0,0 +1,13 @@ + + + Sprechstunde löschen + + + Du solltest eine Mail mit einem Bestätigungslink erhalten haben. +
+ + + \ No newline at end of file diff --git a/templates/executeFailure.html b/templates/executeFailure.html index 7c20ab0..63eb321 100644 --- a/templates/executeFailure.html +++ b/templates/executeFailure.html @@ -6,5 +6,9 @@ Irgendetwas ist schief gegangen. Bitte sende folgende Daten an sprechstundentool@mathebau.de mit einer Beschreibung, was du tun wolltest.
{{.}} + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 6931aca..6e199a6 100644 --- a/templates/index.html +++ b/templates/index.html @@ -24,6 +24,7 @@ {{.Timetable}} diff --git a/templates/requestNotFound.html b/templates/requestNotFound.html index 7c655a8..3763b2c 100644 --- a/templates/requestNotFound.html +++ b/templates/requestNotFound.html @@ -3,6 +3,17 @@ Anfrage bestätigen fehlgeschlagen - Dieser Bestätigungscode ist nicht verfügbar. +

+ Dieser Bestätigungscode ist nicht verfügbar.
+ Bitte gib deinen Bestätigungscode hier ein. +

+
+ : + +
+ \ No newline at end of file diff --git a/templates/td.html b/templates/td.html index c822ed5..ad24b5e 100644 --- a/templates/td.html +++ b/templates/td.html @@ -1,6 +1,7 @@ - - {{.StartHour}}:{{printf "%02d" .StartMinute}} - {{.EndHour}}:{{printf "%02d" .EndMinute}}
- {{.CourseName}}
- {{.TutorName}}
- {{.RoomName}} + + {{if .DeleteIcons}}
{{end}} + {{printf "%02d" .OfficeHour.Date.Hour}}:{{printf "%02d" .OfficeHour.Date.Minute}} - {{printf "%02d" (add .OfficeHour.Date.Hour (divide .OfficeHour.Duration 60))}}:{{printf "%02d" (mod (add .OfficeHour.Date.Minute .OfficeHour.Duration) 60)}}
+ {{.OfficeHour.Course.Name}}
+ {{.OfficeHour.Tutor.Name}}
+ {{.OfficeHour.Room.Name}} \ No newline at end of file