Sprechstunden löschen

This commit is contained in:
Gonne 2022-09-05 20:10:35 +02:00
parent 78af58a51d
commit 2ce7a1fae1
15 changed files with 100 additions and 34 deletions

View file

@ -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{}{})
}
}

View file

@ -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))
}
}

View file

@ -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) {

View file

@ -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 += "<tr>"
@ -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()
}

View file

@ -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)

View file

@ -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 {

View file

@ -6,5 +6,9 @@
Irgendetwas ist schief gegangen. Bitte sende folgende Daten an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a> mit einer Beschreibung, was du tun wolltest.
<br />
{{.}}
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>
</html>

View file

@ -45,5 +45,9 @@
{{range $room := .Rooms}}
<dt>{{$room.Name}}</dt><dl>{{$room.MaxOccupy}} Sprechstunde{{if gt $room.MaxOccupy 1}}n{{end}}</dl><br />{{end}}
</dl>
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>
</html>

View file

@ -5,6 +5,9 @@
<body>
Die Sprechstunde wurde angelegt. Du solltest eine Mail mit einem Aktivierungslink erhalten haben.
<br />
{{.}}
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>
</html>

View file

@ -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.

View file

@ -0,0 +1,13 @@
<html>
<head>
<title>Sprechstunde löschen</title>
</head>
<body>
Du solltest eine Mail mit einem Bestätigungslink erhalten haben.
<br />
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>
</html>

View file

@ -6,5 +6,9 @@
Irgendetwas ist schief gegangen. Bitte sende folgende Daten an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a> mit einer Beschreibung, was du tun wolltest.
<br />
{{.}}
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>
</html>

View file

@ -24,6 +24,7 @@
{{.Timetable}}
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
<a href="/deleteOfficeHour">Sprechstunde löschen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>

View file

@ -3,6 +3,17 @@
<title>Anfrage bestätigen fehlgeschlagen</title>
</head>
<body>
Dieser Bestätigungscode ist nicht verfügbar.
<p>
Dieser Bestätigungscode ist nicht verfügbar. <br />
Bitte gib deinen Bestätigungscode hier ein.
</p>
<form action="/confirmRequest">
<label for="code">Bestätigungscode</label>: <input type="text" name="code"/>
<input type="submit" />
</form>
<footer>
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
</footer>
</body>
</html>

View file

@ -1,6 +1,7 @@
<td rowspan="{{.Rowspan}}" style="border: 1px solid">
{{.StartHour}}:{{printf "%02d" .StartMinute}} - {{.EndHour}}:{{printf "%02d" .EndMinute}}<br />
{{.CourseName}}<br />
{{.TutorName}}<br />
{{.RoomName}}
<td rowspan="{{divide .OfficeHour.Duration .MinuteGranularity}}" style="border: 1px solid">
{{if .DeleteIcons}}<div style="text-align: right;"><a href="/deleteOfficeHour?id={{.OfficeHour.Id}}"></a></div>{{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)}}<br />
{{.OfficeHour.Course.Name}}<br />
{{.OfficeHour.Tutor.Name}}<br />
{{.OfficeHour.Room.Name}}
</td>