prepared file upload
This commit is contained in:
@ -1,28 +1,38 @@
|
||||
@font-face {
|
||||
font-family: 'Cabin Sketch';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url('../fonts/Cabin-Sketch-700.eot'); /* IE9 */
|
||||
src: url('../fonts/Cabin-Sketch-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('../fonts/Cabin-Sketch-700.woff2') format('woff2'), /* Modern Browsers */
|
||||
url('../fonts/Cabin-Sketch-700.woff') format('woff'), /* Modern Browsers */
|
||||
url('../fonts/Cabin-Sketch-700.ttf') format('truetype'), /* Safari, Android, iOS */
|
||||
url('../fonts/Cabin-Sketch-700.svg#CabinSketch') format('svg'); /* Legacy iOS */
|
||||
font-family: 'Cabin Sketch';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url('../fonts/Cabin-Sketch-700.eot'); /* IE9 */
|
||||
src: url('../fonts/Cabin-Sketch-700.eot?#iefix')
|
||||
format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('../fonts/Cabin-Sketch-700.woff2') format('woff2'),
|
||||
/* Modern Browsers */
|
||||
url('../fonts/Cabin-Sketch-700.woff') format('woff'),
|
||||
/* Modern Browsers */
|
||||
url('../fonts/Cabin-Sketch-700.ttf') format('truetype'),
|
||||
/* Safari, Android, iOS */
|
||||
url('../fonts/Cabin-Sketch-700.svg#CabinSketch') format('svg');
|
||||
/* Legacy iOS */
|
||||
}
|
||||
|
||||
/* fira-sans-regular - latin */
|
||||
@font-face {
|
||||
font-family: 'Fira Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('../fonts/fira-sans-v16-latin-regular.eot'); /* IE9 Compat Modes */
|
||||
src: local(''),
|
||||
url('../fonts/fira-sans-v16-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('../fonts/fira-sans-v16-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
|
||||
url('../fonts/fira-sans-v16-latin-regular.woff') format('woff'), /* Modern Browsers */
|
||||
url('../fonts/fira-sans-v16-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
|
||||
url('../fonts/fira-sans-v16-latin-regular.svg#FiraSans') format('svg'); /* Legacy iOS */
|
||||
font-family: 'Fira Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('../fonts/fira-sans-v16-latin-regular.eot');
|
||||
/* IE9 Compat Modes */
|
||||
src: local(''), url('../fonts/fira-sans-v16-latin-regular.eot?#iefix')
|
||||
format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('../fonts/fira-sans-v16-latin-regular.woff2') format('woff2'),
|
||||
/* Super Modern Browsers */
|
||||
url('../fonts/fira-sans-v16-latin-regular.woff') format('woff'),
|
||||
/* Modern Browsers */
|
||||
url('../fonts/fira-sans-v16-latin-regular.ttf')
|
||||
format('truetype'), /* Safari, Android, iOS */
|
||||
url('../fonts/fira-sans-v16-latin-regular.svg#FiraSans')
|
||||
format('svg'); /* Legacy iOS */
|
||||
}
|
||||
|
||||
html {
|
||||
@ -34,6 +44,11 @@ body {
|
||||
background-image: url('../images/background.jpg');
|
||||
}
|
||||
|
||||
.navbar-background {
|
||||
background-image: url('../images/background.jpg');
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
a {
|
||||
font-family: 'Fira Sans';
|
||||
}
|
||||
@ -96,19 +111,23 @@ div {
|
||||
}
|
||||
|
||||
.acc_over {
|
||||
background-image: linear-gradient(to bottom right, #ccc, #aaa) !important;
|
||||
background-image: linear-gradient(to bottom right, #ccc, #aaa)
|
||||
!important;
|
||||
}
|
||||
|
||||
.acc_true {
|
||||
background-image: linear-gradient(to bottom right, #cfc, #afa) !important;
|
||||
background-image: linear-gradient(to bottom right, #cfc, #afa)
|
||||
!important;
|
||||
}
|
||||
|
||||
.acc_false {
|
||||
background-image: linear-gradient(to bottom right, #fcc, #faa) !important;
|
||||
background-image: linear-gradient(to bottom right, #fcc, #faa)
|
||||
!important;
|
||||
}
|
||||
|
||||
.acc_null {
|
||||
background-image: linear-gradient(to bottom right, #fdb, #fca) !important;
|
||||
background-image: linear-gradient(to bottom right, #fdb, #fca)
|
||||
!important;
|
||||
}
|
||||
|
||||
.right-dist {
|
||||
@ -183,7 +202,7 @@ div {
|
||||
background: transparent;
|
||||
border: 2px solid transparent;
|
||||
padding: 8px;
|
||||
font-family: 'Cabin Sketch';
|
||||
font-family: 'Cabin Sketch';
|
||||
}
|
||||
|
||||
.linkbtn:hover {
|
||||
@ -360,3 +379,19 @@ div {
|
||||
text-align: center;
|
||||
padding-top: 45vh;
|
||||
}
|
||||
|
||||
.roleflag {
|
||||
border-radius: 24px;
|
||||
border: 1px solid gray;
|
||||
padding: 4px;
|
||||
margin: 2px;
|
||||
background-image: linear-gradient(to right bottom, silver, white);
|
||||
}
|
||||
|
||||
.tablebox {
|
||||
margin: 8px;
|
||||
background-color: rgba(255, 255, 255, 0.5) !important;
|
||||
padding: 6px;
|
||||
border-radius: 8px;
|
||||
border: 1px solid gray;
|
||||
}
|
58
src/main/resources/templates/admin/document.html
Normal file
58
src/main/resources/templates/admin/document.html
Normal file
@ -0,0 +1,58 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org" layout:decorate="~{template}" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/rss/admin}" class="btn btn-seconary btn-icon-silent"><i class="fas fa-rss"></i></a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/admin}" class="btn btn-secondary btn-icon-silent">Administration</a></li>
|
||||
</ul>
|
||||
</th:block>
|
||||
<th:block layout:fragment="content">
|
||||
<div class="tablebox" sec:authorize="hasRole('admin')">
|
||||
<table id="docs" class="table table-striped" style="width: 100% !important">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Name</td>
|
||||
<td>Dokumententyp</td>
|
||||
<td>Zielgruppe</td>
|
||||
<th>Inhalt</th>
|
||||
<th>Dateityp</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="d : ${documents}">
|
||||
<td><a th:href="@{/admin/document/edit/{id}(id=${d.pk})}"><span th:text="${d.name}"></span></a></td>
|
||||
<td><span th:if="${d.doctype.literal == 'location'}">Wegbeschreibung</span> <span th:if="${d.doctype.literal == 'camp'}">Bestätigung</span><span
|
||||
th:if="${d.doctype.literal == 'camppass'}">Freizeitpass</span></td>
|
||||
<td><th:block th:each="r : ${d.roles}">
|
||||
<span th:if="${r.literal == 'student'}" class="roleflag">Teilnehmer</span>
|
||||
<span th:if="${r.literal == 'teacher'}" class="roleflag">Mitarbeiter</span>
|
||||
<span th:if="${r.literal == 'director'}" class="roleflag">Leiter</span>
|
||||
<span th:if="${r.literal == 'feeder'}" class="roleflag">Küche</span>
|
||||
</th:block></td>
|
||||
<td><a th:href="@{/document/{id}(id=${d.pk})}"><i class="fas fa-download"></i></a></td>
|
||||
<td><span th:text="${d.filetype.literal}" th:if="${d.filetype}"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="6" style="text-align: center"><a th:href="@{/admin/document/add}" class="btn btn-outline-primary">neues Dokument anlegen</a></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#docs").DataTable({
|
||||
language : locale_de
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</th:block>
|
||||
</body>
|
||||
</html>
|
92
src/main/resources/templates/admin/document_edit.html
Normal file
92
src/main/resources/templates/admin/document_edit.html
Normal file
@ -0,0 +1,92 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org" layout:decorate="~{template}" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/rss/admin}" class="btn btn-seconary btn-icon-silent"><i class="fas fa-rss"></i></a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/admin}" class="btn btn-secondary btn-icon-silent">Administration</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/admin/document}" class="btn btn-secondary btn-icon-silent">Dokumente</a></li>
|
||||
</ul>
|
||||
</th:block>
|
||||
<th:block layout:fragment="content">
|
||||
<div sec:authorize="hasRole('admin')">
|
||||
<form th:action="@{/admin/document/update}" th:object="${bean}" method="post" enctype="multipart/form-data">
|
||||
<div class="tablebox">
|
||||
<div class="container">
|
||||
<input type="hidden" th:field="*{pk}" />
|
||||
<div class="row mb-2">
|
||||
<label for="inputName" class="col-sm-2 col-form-label">Name</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="error" th:each="error : ${#fields.errors('name')}">[[${error}]]<br /></span> <input id="inputName" type="text" th:field="*{name}"
|
||||
th:class="${'form-control ' + (#fields.hasErrors('name') ? 'inputerror' : '')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<label for="inputDoctype" class="col-sm-2 col-form-label">Dokumententyp</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="error" th:each="error : ${#fields.errors('doctype')}">[[${error}]]<br /></span> <select id="inputDoctype" th:field="*{doctype}"
|
||||
th:class="${'form-select ' + (#fields.hasErrors('doctype') ? 'inputerror' : '')}">
|
||||
<option value="">--- bitte wählen ---</option>
|
||||
<option value="location">Wegbeschreibung</option>
|
||||
<option value="camp">Bestätigung</option>
|
||||
<option value="camppass">Freizeitpass</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<label for="inputRole" class="col-sm-2 col-form-label">Zielgruppe</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="error" th:each="error : ${#fields.errors('roles')}">[[${error}]]<br /></span> <select id="inputRole" th:field="*{roles}"
|
||||
th:class="${'form-control ' + (#fields.hasErrors('roles') ? 'inputerror' : '')}" multiple>
|
||||
<option value="student">Teilnehmer</option>
|
||||
<option value="teacher">Mitarbeiter</option>
|
||||
<option value="director">Leiter</option>
|
||||
<option value="feeder">Küche</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<label for="inputFile" class="col-sm-2 col-form-label">Dokument</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="error" th:each="error : ${#fields.errors('uploadfile')}">[[${error}]]<br /></span>
|
||||
<input type="file" id="inputFile" th:field="*{uploadfile}" th:class="${'form-control ' + (#fields.hasErrors('uploadfile') ? 'inputerror' : '')}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<label for="inputFiletype" class="col-sm-2 col-form-label">Dateityp</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="error" th:each="error : ${#fields.errors('filetype')}">[[${error}]]<br /></span> <select id="inputFiletype" th:field="*{filetype}"
|
||||
th:class="${'form-select ' + (#fields.hasErrors('filetype') ? 'inputerror' : '')}">
|
||||
<option value="">--- bitte wählen ---</option>
|
||||
<option value="pdf">PDF</option>
|
||||
<option value="png">PNG</option>
|
||||
<option value="jpg">JPG</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-2"></div>
|
||||
<div class="col-sm-10">
|
||||
<input type="submit" class="btn btn-success" value="Ok" />
|
||||
<a th:href="@{/admin/document}" class="btn btn-outline-secondary">Abbrechen</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- TODO:
|
||||
|
||||
delete from db th:if="${bean.pk}"
|
||||
-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</th:block>
|
||||
</body>
|
||||
</html>
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/admin}" class="btn btn-seconary btn-icon-silent">Admin</a></li>
|
||||
|
@ -10,15 +10,18 @@
|
||||
<li class="nav-item"><a th:href="@{/rss/admin}" class="btn btn-seconary btn-icon-silent"><i class="fas fa-rss"></i></a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/admin/mail}" class="btn btn-secondary btn-icon-silent">Testmail</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0" sec:authorize="hasRole('admin')">
|
||||
<li class="nav-item"><a th:href="@{/admin/document}" class="btn btn-secondary btn-icon-silent">Dokumente</a></li>
|
||||
</ul>
|
||||
</th:block>
|
||||
<th:block layout:fragment="content">
|
||||
<div sec:authorize="hasRole('admin')">
|
||||
TODO: implement
|
||||
TODO: implement; list number of camps, registrations and documents or such
|
||||
</div>
|
||||
</th:block>
|
||||
</body>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent">Finanzübersicht</a></li>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent">Finanzübersicht</a></li>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/business/bookings}" class="btn btn-secondary btn-icon-silent" sec:authorize="hasRole('business_booking')">Buchungsübersicht</a></li>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent">Finanzübersicht</a></li>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent">Finanzübersicht</a></li>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<li class="nav-item"><a th:href="@{/rss/registrator}" class="btn btn-seconary btn-icon-silent"><i class="fas fa-rss"></i></a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
</th:block>
|
||||
<th:block layout:fragment="content">
|
||||
|
@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<th:block layout:fragment="header">
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
<li class="nav-item"><a th:href="@{/dashboard}" class="btn btn-secondary btn-icon-silent">Hauptseite</a></li>
|
||||
</ul>
|
||||
<ul class="navbar-nav mb-2 mb-lg-0">
|
||||
<li class="nav-item"><a th:href="@{/confirmation}" class="btn btn-secondary btn-icon-silent">Anmeldungen</a></li>
|
||||
|
@ -18,10 +18,10 @@
|
||||
<script th:src="@{/js/mytoggle.js}"></script>
|
||||
<script th:src="@{/js/myAjax.js}"></script>
|
||||
<script th:src="@{/js/progress.js}"></script>
|
||||
<th:block layout:fragment="libs"></th:block>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg bg-light">
|
||||
<nav class="navbar navbar-expand-lg bg-light navbar-background">
|
||||
<span class="navbar-brand"><img th:src="@{/images/logo.png}" width="128px" /></span>
|
||||
<div class="container-fluid">
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
@ -41,7 +41,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div layout:fragment="content">Layout content</div>
|
||||
<div layout:fragment="content">content</div>
|
||||
<div class="versionclip">
|
||||
<a href="https://gitlab.com/jottyfan/camporganizer2/-/issues" class="versionlink" target="_blank" th:text="${'Version ' + @manifestBean.getVersion()}"></a>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user