diff --git a/controllers/addOfficeHourHandler.go b/controllers/addOfficeHourHandler.go index 4e498e1..7b53a98 100644 --- a/controllers/addOfficeHourHandler.go +++ b/controllers/addOfficeHourHandler.go @@ -69,13 +69,6 @@ func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Requ errors = append(errors, "Der Raum muss existieren.") } //Parse date - week, err := strconv.Atoi(req.FormValue("woche")) - if err != nil { - errors = append(errors, "Die Vorlesungswoche muss eine ganze Zahl sein.") - } - if !(week >= 0 && week <= 5) { - errors = append(errors, "Bitte wähle eine der vorgegebenen Optionen für Vorlesungswochen.") - } day, err := strconv.Atoi(req.FormValue("tag")) if err != nil { errors = append(errors, "Der Tag muss eine ganze Zahl sein.") @@ -106,7 +99,7 @@ func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Requ errors = append(errors, fmt.Sprintf("Sprechstunden dürfen nur alle %d Minuten starten.", b.config.Date.MinuteGranularity)) } } - date := models.Date{Week: week, Day: day, Hour: hour, Minute: minute} + date := models.Date{Week: req.FormValue("woche"), Day: day, Hour: hour, Minute: minute} duration, err := strconv.Atoi(req.FormValue("dauer")) if err != nil { errors = append(errors, "Die Dauer muss eine ganze Zahl sein.") diff --git a/controllers/timetable.go b/controllers/timetable.go index 5393709..92bebb2 100644 --- a/controllers/timetable.go +++ b/controllers/timetable.go @@ -61,16 +61,16 @@ func (b *BaseHandler) printTimetable(timetable map[models.Date]map[int]models.Of } for day := 0; day < 5; day += 1 { for slot := 0; slot < slots[day]; slot += 1 { - current, currentExists := timetable[models.Date{Week: 0, Day: day, Hour: hour, Minute: minute}][slot] + current, currentExists := timetable[models.Date{Week: "", Day: day, Hour: hour, Minute: minute}][slot] if currentExists { // This slot is taken by some office hour var continued bool = false // is this slot occupied by the same office hour the previous minute? var predecessorExists bool var predecessor models.OfficeHour if hour > 0 && minute < b.config.Date.MinuteGranularity { - predecessor, predecessorExists = timetable[models.Date{Week: 0, Day: day, Hour: hour - 1, Minute: 60 - b.config.Date.MinuteGranularity}][slot] + predecessor, predecessorExists = timetable[models.Date{Week: "", Day: day, Hour: hour - 1, Minute: 60 - b.config.Date.MinuteGranularity}][slot] } else { - predecessor, predecessorExists = timetable[models.Date{Week: 0, Day: day, Hour: hour, Minute: minute - b.config.Date.MinuteGranularity}][slot] + predecessor, predecessorExists = timetable[models.Date{Week: "", Day: day, Hour: hour, Minute: minute - b.config.Date.MinuteGranularity}][slot] } if predecessorExists { continued = (predecessor == current) diff --git a/models/date.go b/models/date.go index bea4dc4..40801c7 100644 --- a/models/date.go +++ b/models/date.go @@ -5,7 +5,7 @@ import ( ) type Date struct { - Week int // Set whether the date is all weeks (0), weeks with exercise session (1) or weeks without exercise session (2), even weeks (3), odd weeks (4) or other (5). + Week string Day int Hour int Minute int @@ -54,7 +54,7 @@ func DateLess(first Date, second Date) bool { func GetEndDate(date Date, duration int, ignoreWeek bool) Date { var endDate Date if ignoreWeek { - endDate = Date{0, date.Day, date.Hour, date.Minute} // deep copy + endDate = Date{"", date.Day, date.Hour, date.Minute} // deep copy } else { endDate = Date{date.Week, date.Day, date.Hour, date.Minute} } diff --git a/models/date_test.go b/models/date_test.go index 43c54bd..e64d02d 100644 --- a/models/date_test.go +++ b/models/date_test.go @@ -11,11 +11,11 @@ func TestEndDate(t *testing.T) { duration int endDate Date }{ - {Date{Week: 0, Day: 0, Hour: 8, Minute: 0}, 10, Date{Week: 0, Day: 0, Hour: 8, Minute: 10}}, - {Date{Week: 0, Day: 0, Hour: 8, Minute: 0}, 90, Date{Week: 0, Day: 0, Hour: 9, Minute: 30}}, // More than one hour - {Date{Week: 0, Day: 0, Hour: 8, Minute: 0}, 130, Date{Week: 0, Day: 0, Hour: 10, Minute: 10}}, // More than two hours - {Date{Week: 0, Day: 0, Hour: 8, Minute: 15}, 90, Date{Week: 0, Day: 0, Hour: 9, Minute: 45}}, // More than one hour and start not 0 - {Date{Week: 0, Day: 0, Hour: 23, Minute: 15}, 90, Date{Week: 0, Day: 1, Hour: 0, Minute: 45}}, // More than one day + {Date{Week: "", Day: 0, Hour: 8, Minute: 0}, 10, Date{Week: "", Day: 0, Hour: 8, Minute: 10}}, + {Date{Week: "", Day: 0, Hour: 8, Minute: 0}, 90, Date{Week: "", Day: 0, Hour: 9, Minute: 30}}, // More than one hour + {Date{Week: "", Day: 0, Hour: 8, Minute: 0}, 130, Date{Week: "", Day: 0, Hour: 10, Minute: 10}}, // More than two hours + {Date{Week: "", Day: 0, Hour: 8, Minute: 15}, 90, Date{Week: "", Day: 0, Hour: 9, Minute: 45}}, // More than one hour and start not 0 + {Date{Week: "", Day: 0, Hour: 23, Minute: 15}, 90, Date{Week: "", Day: 1, Hour: 0, Minute: 45}}, // More than one day } for _, tc := range testCases { t.Run(fmt.Sprintf("%d:%d, Dauer %d", tc.startDate.Hour, tc.startDate.Minute, tc.duration), func(t *testing.T) { @@ -35,21 +35,21 @@ func TestDateLess(t *testing.T) { less bool }{ {"earlier day", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 0, Hour: 7, Minute: 10}, false}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 0, Hour: 7, Minute: 10}, false}, {"earlier hour", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 1, Hour: 7, Minute: 10}, false}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 1, Hour: 7, Minute: 10}, false}, {"earlier minute", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 1, Hour: 8, Minute: 0}, false}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 1, Hour: 8, Minute: 0}, false}, {"same date", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, false}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 1, Hour: 8, Minute: 10}, false}, {"later minute", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 1, Hour: 8, Minute: 20}, true}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 1, Hour: 8, Minute: 20}, true}, {"later hour", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 1, Hour: 9, Minute: 10}, true}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 1, Hour: 9, Minute: 10}, true}, {"later day", - Date{Week: 0, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 2, Hour: 8, Minute: 10}, true}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "", Day: 2, Hour: 8, Minute: 10}, true}, {"week should not matter", - Date{Week: 1, Day: 1, Hour: 8, Minute: 10}, Date{Week: 0, Day: 1, Hour: 9, Minute: 30}, true}, + Date{Week: "", Day: 1, Hour: 8, Minute: 10}, Date{Week: "every", Day: 1, Hour: 9, Minute: 30}, true}, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { diff --git a/officeHoursMysql.sql b/officeHoursMysql.sql index 9583ab1..e7379b3 100644 --- a/officeHoursMysql.sql +++ b/officeHoursMysql.sql @@ -47,7 +47,7 @@ CREATE TABLE `officeHour` ( `room` int DEFAULT NULL, `roomname` text DEFAULT NULL, `course` int DEFAULT NULL, - `week` int DEFAULT NULL, + `week` varchar(255) DEFAULT NULL, `info` text DEFAULT NULL, `active` bool DEFAULT NULL, `duration` int DEFAULT NULL, diff --git a/officeHoursSQLite.sql b/officeHoursSQLite.sql index 39b54e6..1b8f2dc 100644 --- a/officeHoursSQLite.sql +++ b/officeHoursSQLite.sql @@ -36,7 +36,7 @@ CREATE TABLE `officeHour` ( `room` int DEFAULT NULL, `roomname` text DEFAULT NULL, `course` int DEFAULT NULL, - `week` int DEFAULT NULL, + `week` tinytext DEFAULT NULL, `info` text DEFAULT NULL, `active` bool DEFAULT NULL, `duration` int DEFAULT NULL, diff --git a/repositories/officeHour.go b/repositories/officeHour.go index 4a0243a..8cdb59f 100644 --- a/repositories/officeHour.go +++ b/repositories/officeHour.go @@ -157,7 +157,8 @@ func (r *OfficeHourRepo) Delete(officeHour models.OfficeHour) error { func (r *OfficeHourRepo) getFromRow(row *sql.Row) (models.OfficeHour, error) { var officeHour models.OfficeHour - var week, day, hour, minute, tutorId, courseId, roomId int + var day, hour, minute, tutorId, courseId, roomId int + var week string err := row.Scan(&officeHour.Id, &tutorId, &day, &hour, &minute, &roomId, &officeHour.RoomName, &courseId, &week, &officeHour.Info, &officeHour.Active, &officeHour.Duration) if err != nil { err = fmt.Errorf("error getting single officeHour row from database: %w", err) @@ -190,7 +191,8 @@ func (r *OfficeHourRepo) getFromRows(rows *sql.Rows) ([]models.OfficeHour, error var officeHours []models.OfficeHour for rows.Next() { var officeHour models.OfficeHour - var week, day, hour, minute, tutorId, roomId, courseId int + var day, hour, minute, tutorId, roomId, courseId int + var week string var err error if err := rows.Scan(&officeHour.Id, &tutorId, &day, &hour, &minute, &roomId, &officeHour.RoomName, &courseId, &week, &officeHour.Info, &officeHour.Active, &officeHour.Duration); err != nil { return officeHours, fmt.Errorf("error getting multiple officeHour rows from database: %w", err) diff --git a/templating/templates/addMask.html b/templating/templates/addMask.html index eda37d7..1080de6 100644 --- a/templating/templates/addMask.html +++ b/templating/templates/addMask.html @@ -58,15 +58,13 @@
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 0 $.Date.Week}}>Jede Woche
{{end}}{{if eq 1 $.Date.Week}}In Wochen mit Übung
{{end}}{{if eq 2 $.Date.Week}}In Wochen ohne Übung
{{end}}{{if eq 3 $.Date.Week}}In geraden Vorlesungswochen
{{end}}{{if eq 4 $.Date.Week}}In ungeraden Vorlesungswochen
{{end}}
+ {{if not (eq .OfficeHour.Date.Week "")}}{{ .OfficeHour.Date.Week }}
{{end}}
{{.OfficeHour.Course.Name}}
{{.OfficeHour.Tutor.Name}}
{{.OfficeHour.Room.Name}}
diff --git a/templating/templates/td.html b/templating/templates/td.html
index 76fc5e1..e08659d 100644
--- a/templating/templates/td.html
+++ b/templating/templates/td.html
@@ -1,7 +1,7 @@