1

merge visibility and grouptype + merge createorga and createstudent + adapt to changes + finish create refactor

This commit is contained in:
Christoph
2020-04-10 23:48:31 +02:00
parent 5612dfba52
commit 344a284039
18 changed files with 229 additions and 370 deletions

View File

@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="de" xmlns:th="http://www.thymeleaf.org" th:replace="~{mopslayout :: html(
name='Gruppenbildung',
title='Neue Gruppe',
headcontent=~{fragments/general :: headcontent(style='none')},
navigation=~{fragments/general :: nav(current='create')},
bodycontent=~{:: bodycontent})}">
<body>
<main th:fragment="bodycontent">
<div class="container-fluid">
<h1 class="def-cursor">Neue Gruppe</h1>
<div class="content">
<h3 class="def-cursor">Eigenschaften:</h3>
<form enctype="multipart/form-data" method="post" th:action="@{/gruppen2/create}">
<div class="content-text">
<!--Gruppentitel-->
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Gruppentitel:</span>
</div>
<input type="text" class="form-control" th:name="title" required>
</div>
<!--Gruppenbeschreibung-->
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Beschreibung:</span>
</div>
<textarea class="form-control" th:name="description" required></textarea>
</div>
</div>
<!--TODO: Enter AsciiDoc Description-->
<div class="content-text-in">
<!--Gruppentyp-->
<label for="grouptype">Gruppentyp:</label>
<div class="btn-toolbar row mb-2" id="grouptype">
<div class="btn-group btn-group-toggle col-sm-4" data-toggle="buttons">
<label class="btn btn-secondary active" onclick="enableParent()">
<input type="radio" name="type" value="PRIVATE" checked> Privat
</label>
<label class="btn btn-secondary" onclick="enableParent()">
<input type="radio" name="type" value="PUBLIC"> Öffentlich
</label>
<label class="btn btn-secondary" onclick="disableParent()"
th:if="${account.getRoles().contains('orga')}">
<input type="radio" name="type" value="LECTURE"> Veranstaltung
</label>
</div>
<div class="input-group col-sm-8">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Gehört zu:</span>
</div>
<select class="custom-select" id="parentselect" name="parent">
<option value="" selected>Keiner</option>
<option th:each="lecture : ${lectures}" th:value="${lecture.getId()}"
th:text="${lecture.getTitle()}"></option>
</select>
</div>
</div>
<!--Benutzerlimit-->
<label for="userlimit">Teilnehmeranzahl:</label>
<div class="btn-toolbar row" id="userlimit">
<div class="btn-group btn-group-toggle col-sm-4" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="limit" value="INFINITE" checked>
Unbegrenzt
</label>
<label class="btn btn-secondary">
<input type="radio" name="limit" value="LOCKED"> Begrenzt
</label>
</div>
<div class="input-group col-sm-8">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Limit:</span>
</div>
<input type="number" class="form-control" th:name="userlimit" value="1"
min="1" max="100000" required>
<div class="input-group-append">
<span class="input-group-text text-monospace">Teilnehmer</span>
</div>
</div>
</div>
</div>
<div class="content-text" th:if="${account.getRoles().contains('orga')}">
<!--CSV-->
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">CSV:</span>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" id="file" th:name="file">
<label class="custom-file-label" for="file">Datei auswählen</label>
</div>
</div>
</div>
<!--Submit-->
<button class="btn btn-primary btn-block" type="submit">Gruppe Erstellen</button>
<!--<div class="custom-control custom-checkbox" id="privateCheckbox">
&lt;!&ndash;DUMMY&ndash;&gt;
<input type="hidden" id="visibilityDummy" name="visibility" value="0"/>
<input class="custom-control-input" type="checkbox" id="visibility" onchange="$('#visibilityDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="visibility">Privat</label>
</div>
<div class="custom-control custom-checkbox" id="lectureCheckbox">
&lt;!&ndash;DUMMY&ndash;&gt;
<input type="hidden" id="lectureDummy" name="lecture" value="0"/>
<input class="custom-control-input" type="checkbox" id="lecture" onchange="$('#lectureDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="lecture">Veranstaltung</label>
</div>
<div class="form-group mt-3" id="lectureParent">
<label for="parent">Veranstaltungszugehörigkeit</label>
<select class="form-control" id="parent" th:name="parent">
<option value="" selected>&#45;&#45;Keine&#45;&#45;</option>
<option th:each="lecture : ${lectures}" name="parent" th:value="${lecture.getId()}" th:text="${lecture.getTitle()}"></option>
</select>
</div>
<div class="custom-control custom-checkbox">
&lt;!&ndash;DUMMY&ndash;&gt;
<input type="hidden" id="maxInfiniteUsersDummy" name="maxInfiniteUsers" value="0"/>
<input class="custom-control-input" type="checkbox" id="maxInfiniteUsers"
onchange="$('#maxInfiniteUsersDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="maxInfiniteUsers">Anzahl
unbegrenzt</label>
</div>
<div class="form-group mt-3" id="userMaximum">
<label for="userMax">Teilnehmeranzahl</label>
<input class="form-control" id="userMax" th:name="userMaximum" type="number" min="1" max="100000" value="1">
</div>-->
</form>
</div>
</div>
<script>
// Add the following code if you want the name of the file appear on select
$(".custom-file-input").on("change", function () {
const fileName = $(this).val().split("\\").pop();
$(this).siblings(".custom-file-label").addClass("selected").html(fileName);
});
function disableParent() {
$('#parentselect').prop('disabled', true);
}
function enableParent() {
$('#parentselect').prop('disabled', false);
}
</script>
</main>
</body>
</html>

View File

@ -1,183 +0,0 @@
<!DOCTYPE html>
<html lang="de" xmlns:th="http://www.thymeleaf.org" th:replace="~{mopslayout :: html(
name='Gruppenbildung',
title='Neue Gruppe',
headcontent=~{fragments/general :: headcontent},
navigation=~{fragments/general :: nav(current='create')},
bodycontent=~{:: bodycontent})}">
<body>
<main th:fragment="bodycontent">
<div class="container-fluid">
<h1 class="def-cursor">Neue Gruppe</h1>
<div class="content p-2 mt-3">
<form enctype="multipart/form-data" method="post" th:action="@{/gruppen2/create/orga}">
<!--Gruppentitel-->
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Gruppentitel:</span>
</div>
<input type="text" class="form-control" th:name="title" required>
</div>
<!--Gruppenbeschreibung-->
<div class="input-group mb-5">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Beschreibung:</span>
</div>
<textarea class="form-control" th:name="description" required></textarea>
</div>
<!--TODO: Enter AsciiDoc Description-->
<!--Gruppentyp-->
<label for="grouptype">Gruppentyp:</label>
<div class="btn-toolbar row mb-3" id="grouptype">
<div class="btn-group btn-group-toggle col-sm-4" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="type" id="type_private" checked> Privat
</label>
<label class="btn btn-secondary">
<input type="radio" name="type" id="type_public"> Öffentlich
</label>
<label class="btn btn-secondary">
<input type="radio" name="type" id="type_lecture"> Veranstaltung
</label>
</div>
<div class="input-group col-sm-8">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Gehört zu:</span>
</div>
<select class="custom-select" id="parent" name="parent">
<option value="" selected>Keiner</option>
<option th:each="lecture : ${lectures}" th:value="${lecture.getId()}"
name="parent" th:text="${lecture.getTitle()}"></option>
</select>
</div>
</div>
<!--Benutzerlimit-->
<label for="userlimit">Teilnehmeranzahl:</label>
<div class="btn-toolbar row mb-5" id="userlimit">
<div class="btn-group btn-group-toggle col-sm-4" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="limit" id="limit_no" checked> Unbegrenzt
</label>
<label class="btn btn-secondary">
<input type="radio" name="limit" id="limit_yes"> Begrenzt
</label>
</div>
<div class="input-group col-sm-8">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">Limit:</span>
</div>
<input type="number" class="form-control" th:name="userlimit" value="1"
min="1" max="100000" required>
<div class="input-group-append">
<span class="input-group-text text-monospace">Teilnehmer</span>
</div>
</div>
</div>
<!--CSV-->
<div class="input-group mb-5">
<div class="input-group-prepend">
<span class="input-group-text text-monospace">CSV:</span>
</div>
<div class="custom-file">
<input class="custom-file-input" id="file" th:name="file" type="file">
<label class="custom-file-label" for="file">Choose file</label>
</div>
</div>
<!--Submit-->
<div class="form-group">
<button class="btn btn-primary btn-block" type="submit">Erstellen</button>
</div>
<!--<div class="custom-control custom-checkbox" id="privateCheckbox">
&lt;!&ndash;DUMMY&ndash;&gt;
<input type="hidden" id="visibilityDummy" name="visibility" value="0"/>
<input class="custom-control-input" type="checkbox" id="visibility" onchange="$('#visibilityDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="visibility">Privat</label>
</div>
<div class="custom-control custom-checkbox" id="lectureCheckbox">
&lt;!&ndash;DUMMY&ndash;&gt;
<input type="hidden" id="lectureDummy" name="lecture" value="0"/>
<input class="custom-control-input" type="checkbox" id="lecture" onchange="$('#lectureDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="lecture">Veranstaltung</label>
</div>
<div class="form-group mt-3" id="lectureParent">
<label for="parent">Veranstaltungszugehörigkeit</label>
<select class="form-control" id="parent" th:name="parent">
<option value="" selected>&#45;&#45;Keine&#45;&#45;</option>
<option th:each="lecture : ${lectures}" name="parent" th:value="${lecture.getId()}" th:text="${lecture.getTitle()}"></option>
</select>
</div>
<div class="custom-control custom-checkbox">
&lt;!&ndash;DUMMY&ndash;&gt;
<input type="hidden" id="maxInfiniteUsersDummy" name="maxInfiniteUsers" value="0"/>
<input class="custom-control-input" type="checkbox" id="maxInfiniteUsers"
onchange="$('#maxInfiniteUsersDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="maxInfiniteUsers">Anzahl
unbegrenzt</label>
</div>
<div class="form-group mt-3" id="userMaximum">
<label for="userMax">Teilnehmeranzahl</label>
<input class="form-control" id="userMax" th:name="userMaximum" type="number" min="1" max="100000" value="1">
</div>-->
</form>
</div>
</div>
<script>
// Add the following code if you want the name of the file appear on select
$(".custom-file-input").on("change", function () {
const fileName = $(this).val().split("\\").pop();
$(this).siblings(".custom-file-label").addClass("selected").html(fileName);
});
// Collapse lectureParent if lecture
$(document).ready(function () {
$('#lecture').change(function () {
$('#parent').prop('disable', function (i, v) { return !v; });
});
});
// Collapse provateCheckbox if lecture
$(document).ready(function () {
$('#lecture').change(function () {
$('#visibility').prop('disabled', function (i, v) { return !v; });
});
});
// Collapse lectureCheckbox if private
$(document).ready(function () {
$('#visibility').change(function () {
$('#lecture').prop('disabled', function (i, v) { return !v; });
});
});
// Collapse userMaximum if infinite
$(document).ready(function () {
$('#maxInfiniteUsers').change(function () {
$('#userMax').prop('readonly', function (i, v) { return !v; });
});
});
</script>
</main>
</body>
</html>

View File

@ -1,95 +0,0 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
th:replace="~{mopslayout :: html(name='Gruppenbildung', headcontent=~{:: headcontent}, navigation=~{:: navigation}, bodycontent=~{:: bodycontent})}"
xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="utf-8">
<title>Gruppenerstellung</title>
<th:block th:fragment="headcontent">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</th:block>
</head>
<body>
<header>
<nav class="navigation navigation-secondary" is="mops-navigation" th:fragment="navigation">
<ul>
<li>
<a th:href="@{/gruppen2}">Gruppen</a>
</li>
<li class="active">
<a th:href="@{/gruppen2/create}">Erstellen</a>
</li>
<li>
<a th:href="@{/gruppen2/search}">Suche</a>
</li>
</ul>
</nav>
</header>
<main th:fragment="bodycontent">
<div class="container-fluid">
<div class="row">
<div class="col-10">
<h1>Gruppenerstellung</h1>
<form method="post" th:action="@{/gruppen2/create/student}">
<div class="shadow-sm p-2"
style=" border: 10px solid aliceblue; border-radius: 5px; background: aliceblue;">
<div class="form-group">
<label for="titel">Titel</label>
<input class="form-control" id="titel" required th:name="title" type="text">
</div>
<div class="form-group">
<label for="description">Beschreibung</label>
<textarea class="form-control" id="description" required rows="3" th:name="description"></textarea>
</div>
<div class="custom-control custom-checkbox">
<!--DUMMY-->
<input type="hidden" id="maxInfiniteUsersDummy" name="maxInfiniteUsers" value="0"/>
<input class="custom-control-input" type="checkbox" id="maxInfiniteUsers" onchange="$('#maxInfiniteUsersDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="maxInfiniteUsers">Anzahl
unbegrenzt</label>
</div>
<div class="form-group mt-3" id="userMaximum">
<label for="userMax">Teilnehmeranzahl</label>
<input class="form-control" th:name="userMaximum"
type="number" min="1" max="10000" id="userMax">
</div>
<div class="custom-control custom-checkbox">
<!--DUMMY-->
<input type="hidden" id="visibilityDummy" name="visibility" value="0"/>
<input class="custom-control-input" type="checkbox" id="visibility" onchange="$('#visibilityDummy').val(this.checked ? 1 : 0)"/>
<label class="custom-control-label" for="visibility">Privat</label>
</div>
<div class="form-group" id="lectureParent">
<label for="parent">Veranstaltungszugehörigkeit</label>
<select class="form-control" id="parent" name="parent">
<option value="" selected>--Keine--</option>
<option th:each="lecture : ${lectures}" th:name="parent" th:value="${lecture.getId()}" th:text="${lecture.getTitle()}">
</option>
</select>
</div>
<div class="form-group pt-4">
<button class="btn btn-primary"
style="background: #52a1eb; border-style: none;"
type="submit">Erstellen
</button>
</div>
</div>
</form>
</div>
</div>
</div>
<script>
$(document).ready(function () {
$('#maxInfiniteUsers').change(function () {
$('#userMaximum').fadeToggle();
});
});
</script>
</main>
</body>
</html>

View File

@ -3,11 +3,12 @@
<html lang="de" xmlns:th="http://www.thymeleaf.org">
<!--Stylesheets, Javascript etc.-->
<th:block th:fragment="headcontent">
<th:block th:fragment="headcontent(style)">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
<link th:href="@{/style.css}" rel="stylesheet"/>
<link th:unless="${style == 'none'}" th:href="@{${style}}" rel="stylesheet"/>
</th:block>
<!--Left navigation bar-->

View File

@ -5,9 +5,9 @@
<!--Grouptype Badges-->
<th:block th:fragment="badges">
<span class="badge badge-pill private float-right"
th:if='${group.getVisibility() == private}'>Privat</span>
<span class="badge badge-pill public float-right" th:if="${group.getVisibility() == public}"
th:unless="${group.getType() == lecture}">Öffentlich</span>
th:if='${group.getType() == private}'>Privat</span>
<span class="badge badge-pill public float-right"
th:if="${group.getType() == public}">Öffentlich</span>
<span class="badge badge-pill lecture float-right"
th:if='${group.getType() == lecture}'>Veranstaltung</span>