Compare commits

..

8 commits

3 changed files with 223 additions and 79 deletions

View file

@ -1,58 +1,164 @@
<{{define "title"}}Sprechstunde anlegen{{end}} {{define "title"}}Sprechstunde anlegen{{end}}
{{define "content"}} {{define "content"}}
<p>
{{range .Errors}}{{.}}<br>{{end}} <div class="col-md-12">
</p> <div class="alert alert-info">
<p> Für die vorlesungsfreie Zeit müssen und können keine Sprechstunden gebucht werden.
Für die vorlesungsfreie Zeit müssen und können keine Sprechstunden gebucht werden. Nutzt die offenen Arbeitsräume in dieser Zeit, wann immer ihr sie braucht.
Nutzt die offenen Arbeitsräume in dieser Zeit, wann immer ihr sie braucht. </div>
</p> {{range .Errors}}
<form method="POST" action="addOfficeHour"> <div class="alert alert-danger">
<label for="veranstaltung">Veranstaltung</label>: <strong>Fehler: </strong> {{.}}
<select name="veranstaltung" id="veranstaltung"> </div>
{{end}}
</div>
<style>
input.required ~ label::after, select.required ~ label::after {
content: ' *';
color: red;
}
.form-control ~ .form-text {
padding-left: 12px;
padding-right: 12px;
}
</style>
<div class="row">
<div class="col-lg-8 mb-4">
<form method="POST" action="addOfficeHour">
<div class="form-floating mb-3">
<input class="form-control required" required name="name" id="name" type="text" value="{{.Name}}" placeholder="">
<label for="name">Name</label>
</div>
<div class="form-floating mb-3">
<input class="form-control required" required name="email" id="email" type="email" value="{{.Email}}" placeholder="">
<label for="email">Email-Adresse</label>
<div class="form-text">
{{if ne .Config.Tutor.MailSuffix ""}}
Du musst hier eine Email-Adresse angeben, die auf „{{.Config.Tutor.MailSuffix}}“ endet.<br />
{{end}}
Die Email-Adresse dient der Vermeidung von Spam und wird nicht veröffentlicht.
</div>
</div>
<div class="form-floating mb-3">
<select class="form-control form-select required" required name="veranstaltung" id="veranstaltung">
{{range $course := .Courses}} {{range $course := .Courses}}
<option value="{{$course.Id}}"{{if eq $course.Id $.SelectedCourse}} selected{{end}}>{{$course.Name}}</option> <option value="{{$course.Id}}"{{if eq $course.Id $.SelectedCourse}} selected{{end}}>{{$course.Name}}</option>
{{end}} {{end}}
</select><br> </select>
<small><span class="text-muted">Wenn du eine Veranstaltung hier vermisst, schreibe an <label for="veranstaltung">Veranstaltung</label>
<a href="mailto:sprechstundentool@mathebau.de?subject=Sprechstundentool: Neue Veranstaltung&body=Hey liebe Sprechstundentool-Admins,%0D%0A%0D%0Ameine Veranstaltung fehlt im Auswahlmenü.%0D%0AEs ist die Veranstaltung%0D%0A%0D%0AViele Grüße%0D%0A">sprechstundentool@mathebau.de</a>.</span></small><br> <div class="form-text">
<label for="woche">Vorlesungswoche</label>: Wenn du eine Veranstaltung hier vermisst, schreibe an
<select name="woche" id="woche"> <a href="mailto:sprechstundentool@mathebau.de?subject=Sprechstundentool: Neue Veranstaltung&body=Hey liebe Sprechstundentool-Admins,%0D%0A%0D%0Ameine Veranstaltung fehlt im Auswahlmenü.%0D%0AEs ist die Veranstaltung%0D%0A%0D%0AViele Grüße%0D%0A" tabindex="-1">sprechstundentool@mathebau.de</a>.
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-floating mb-3">
<select class="form-control form-select required" required name="woche" id="woche">
<option value="0"{{if eq 0 $.Date.Week}} selected{{end}}>Jede</option> <option value="0"{{if eq 0 $.Date.Week}} selected{{end}}>Jede</option>
<option value="1"{{if eq 1 $.Date.Week}} selected{{end}}>Ungerade</option> <option value="1"{{if eq 1 $.Date.Week}} selected{{end}}>Ungerade</option>
<option value="2"{{if eq 2 $.Date.Week}} selected{{end}}>Gerade</option> <option value="2"{{if eq 2 $.Date.Week}} selected{{end}}>Gerade</option>
</select><br> </select>
<label for="tag">Tag</label>: <select name="tag" id="tag"> <label for="woche">Vorlesungswoche</label>
</div>
</div>
<div class="col-md-6">
<div class="form-floating mb-3">
<select class="form-control form-select required" required name="tag" id="tag">
<option value="0"{{if eq 0 $.Date.Day}} selected{{end}}>Montag</option> <option value="0"{{if eq 0 $.Date.Day}} selected{{end}}>Montag</option>
<option value="1"{{if eq 1 $.Date.Day}} selected{{end}}>Dienstag</option> <option value="1"{{if eq 1 $.Date.Day}} selected{{end}}>Dienstag</option>
<option value="2"{{if eq 2 $.Date.Day}} selected{{end}}>Mittwoch</option> <option value="2"{{if eq 2 $.Date.Day}} selected{{end}}>Mittwoch</option>
<option value="3"{{if eq 3 $.Date.Day}} selected{{end}}>Donnerstag</option> <option value="3"{{if eq 3 $.Date.Day}} selected{{end}}>Donnerstag</option>
<option value="4"{{if eq 4 $.Date.Day}} selected{{end}}>Freitag</option> <option value="4"{{if eq 4 $.Date.Day}} selected{{end}}>Freitag</option>
</select><br> </select>
<label for="startzeit">Startzeit</label>: <input type="time" name="startzeit" id="startzeit" min="{{printf "%02d" .EarliestStartTime.Hour}}:{{printf "%02d" .EarliestStartTime.Minute}}" max="{{printf "%02d" .LatestStartTime.Hour}}:{{printf "%02d" .LatestStartTime.Minute}}" {{if ge $.Date.Hour .EarliestStartTime.Hour}}value="{{printf "%02d" $.Date.Hour}}:{{printf "%02d" $.Date.Minute}}"{{end}} required><br> <label for="tag">Tag</label>
<label for="dauer">Dauer in Minuten</label>: <input name="dauer" id="dauer" type="number" min="{{.MinuteGranularity}}" max="120" step="{{.MinuteGranularity}}" value="{{.Duration}}" required><br> </div>
<label for="raum">Raum</label>:
<select name="raum" id="raum"> </div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-floating mb-3">
<input class="form-control required" required type="time" name="startzeit" id="startzeit"
min="{{printf "%02d" .EarliestStartTime.Hour}}:{{printf "%02d" .EarliestStartTime.Minute}}"
max="{{printf "%02d" .LatestStartTime.Hour}}:{{printf "%02d" .LatestStartTime.Minute}}"
{{if ge $.Date.Hour .EarliestStartTime.Hour}}value="{{printf "%02d" $.Date.Hour}}:{{printf "%02d" $.Date.Minute}}" {{end}}>
<label for="startzeit">Startzeit</label>
</div>
</div>
<div class="col-md-6">
<div class="form-floating mb-3">
<input class="form-control required" required name="dauer" id="dauer" type="number"
min="{{.MinuteGranularity}}" max="120" step="{{.MinuteGranularity}}"
{{ if ne .Duration 0}}value="{{.Duration}}"{{end}} placeholder="">
<label for="dauer">Dauer in Minuten</label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-floating mb-3">
<select class="form-control form-select required" required name="raum" id="raum">
{{range $room := .Rooms}} {{range $room := .Rooms}}
<option value="{{$room.Id}}"{{if eq $room.Id $.SelectedRoom}} selected{{end}}>{{$room.Name}}</option> <option value="{{$room.Id}}"{{if eq $room.Id $.SelectedRoom}} selected{{end}}>{{$room.Name}}</option>
{{end}} {{end}}
</select><br> </select>
<label for="raumname">Raumname (für Sonderräume)</label>: <input type="text" name="raumname" id="raumname" value="{{.Roomname}}"><br> <label for="raum">Raum</label>
<label for="name">Name</label>: <input name="name" id="name" type="text" size="50" value="{{.Name}}" required><br> </div>
<label for="email">Email-Adresse</label>:
<input name="email" id="email" type="email" size="50" value="{{.Email}}" required><br> </div>
<label for="info">Info</label>: <input name="info" id="info" type="text" size="50" value="{{.Info}}"><br> <div class="col-md-6">
<input type="submit">
</form> <div class="form-floating mb-3">
{{if ne .Config.Tutor.MailSuffix ""}} <input class="form-control" type="text" name="raumname" id="raumname" value="{{.Roomname}}" placeholder="">
Du musst hier eine Email-Adresse angeben, die auf „{{.Config.Tutor.MailSuffix}}“ endet.<br> <label for="raumname">Raumname (für Sonderräume)</label>
{{end}} </div>
Außerdem dürfen in Räumen nur begrenzt viele Sprechstunden gleichzeitig stattfinden, nämlich
<dl> </div>
</div>
<div class="form-floating mb-3">
<input class="form-control" name="info" id="info" type="text" value="{{.Info}}" placeholder="">
<label for="info">Info</label>
</div>
<div class="text-center">
<button class="btn btn-primary" type="submit">Sprechstunde erstellen</button>
</div>
</form>
</div>
<div class="col-lg-4">
<p>
Beachte, dass in den Arbeitsräumen nur begrenzt viele Sprechstunden gleichzeitig stattfinden dürfen.
Das Formular wird dich warnen, falls du versuchst deine Sprechstunde in einem zu vollen Raum anzulegen.
</p>
<ul class="list-group">
{{range $room := .Rooms}} {{range $room := .Rooms}}
<dt>{{$room.Name}}</dt> {{ if ge 42 $room.MaxOccupy}}
<dd>{{$room.MaxOccupy}} Sprechstunde{{if gt $room.MaxOccupy 1}}n{{end}}</dd> <li class="list-group-item d-flex justify-content-between align-items-center">
{{$room.Name}}
<span class="badge bg-secondary rounded-pill">
{{$room.MaxOccupy}} Sprechstunde{{if gt $room.MaxOccupy 1}}n{{end}}
</span>
</li>
{{end}} {{end}}
</dl> {{end}}
</ul>
</div>
</div>
{{end}} {{end}}

View file

@ -12,16 +12,32 @@
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="col-md-8 offset-md-2 bg-secondary bg-gradient mt-3 mb-2 p-3 rounded" style="--bs-bg-opacity: .3;">
<h5 class="text-center m-1">Sprechstunden für Matheveranstaltungen an der TU Darmstadt</h5>
<p class="text-center mb-0">
<a href="/">Startseite</a>
&bullet;
<a href="/addOfficeHour">Sprechstunde anlegen</a>
&bull;
<a href="/deleteOfficeHour">Sprechstunde löschen</a>
</p>
</div>
<div id="content">
<h1 class="h3 m-1 mb-3">{{template "title" .}}</h1>
{{block "content" .}}Du solltest dies nicht sehen.{{end}} {{block "content" .}}Du solltest dies nicht sehen.{{end}}
</div> </div>
</div>
<footer class="container"> <footer class="container">
<a href="/">Startseite</a><br> <div class="col-md-8 offset-md-2 bg-secondary bg-gradient my-3 p-3 rounded" style="--bs-bg-opacity: .3;">
<a href="/addOfficeHour">Sprechstunde anlegen</a><br> &COPY; <a class="text-body" href="https://mathebau.de/">Fachschaft Mathematik, TU Darmstadt</a>
<a href="/deleteOfficeHour">Sprechstunde löschen</a><br> <br />
<!-- NOTE: when updating this hard coded email adress, also update it in addMask.html --> <!-- NOTE: when updating this hard coded email adress, also update it in addMask.html -->
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a><br> Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
Quellcode und Featurewünsche: <a href="https://gitea.mathebau.de/Fachschaft/sprechstunden-go">Gitea-Repository</a> <br />
Quellcode und Featurewünsche:&nbsp;<a href="https://gitea.mathebau.de/Fachschaft/sprechstunden-go">Gitea-Repository</a>
</div>
</footer> </footer>
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>

View file

@ -1,25 +1,47 @@
{{define "title"}}Übersicht{{end}} {{define "title"}}
Sprechstunden
{{- range $course := .Courses -}}
{{- if eq $course.Id $.SelectedCourse}} für {{$course.Name}}{{- end -}}
{{- end -}}
{{- range $room := .Rooms -}}
{{- if eq $room.Id $.SelectedRoom}} in Raum {{$room.Name}}{{- end -}}
{{- end -}}
{{end}}
{{define "content"}} {{define "content"}}
<form method="GET" action="/getByCourse"> <form method="GET" action="/getByCourse">
<label for="veranstaltung">Veranstaltung: </label> <div class="input-group mb-3">
<select name="veranstaltung" id="veranstaltung" size="1" onchange="document.forms[0].submit()"> <div class="form-floating col-lg-8">
<option value="">Alle</option> <select class="form-control form-select" name="veranstaltung" id="veranstaltung" size="1" onchange="document.forms[0].submit()">
<option value=""> auswählen </option>
{{range $course := .Courses}} {{range $course := .Courses}}
<option value="{{$course.Id}}"{{if eq $course.Id $.SelectedCourse}} selected{{end}}>{{$course.Name}}</option> <option value="{{$course.Id}}"{{if eq $course.Id $.SelectedCourse}} selected{{end}}>{{$course.Name}}</option>
{{end}} {{end}}
</select> </select>
<input type="submit" value="Auswählen"> <label for="veranstaltung">Veranstaltung</label>
</div>
<noscript>
<button class="btn btn-sm btn-outline-secondary col-lg-4" type="submit">Los!</button>
</noscript>
</div>
</form> </form>
<form method="GET" action="/getByRoom"> <form method="GET" action="/getByRoom">
<label for="raum">Raum: </label> <div class="input-group mb-3">
<select name="raum" id="raum" size="1" onchange="document.forms[1].submit()"> <div class="form-floating">
<option value="">Alle</option> <select class="form-control form-select" name="raum" id="raum" size="1" onchange="document.forms[1].submit()">
<option value=""> auswählen </option>
{{range $room := .Rooms}} {{range $room := .Rooms}}
<option value="{{$room.Id}}"{{if eq $room.Id $.SelectedRoom}} selected{{end}}>{{$room.Name}}</option> <option value="{{$room.Id}}"{{if eq $room.Id $.SelectedRoom}} selected{{end}}>{{$room.Name}}</option>
{{end}} {{end}}
</select> </select>
<input type="submit" value="Auswählen"> <label for="raum">Raum</label>
</div>
<noscript>
<button class="btn btn-outline-secondary col-lg-4" type="submit">Los!</button>
</noscript>
</div>
</form> </form>
{{.Timetable}} <div id="timetable" style="overflow-x: scroll;">
{{.Timetable}}
</div>
{{end}} {{end}}