fft/templates/admin.html
2025-08-08 19:56:12 +02:00

838 lines
27 KiB
HTML

{% extends "template.html" %}
{% block css %}
<style>
.align-vertical {
vertical-align: middle;
}
.badge-sm {
font-size: 1rem;
}
.hidden {
display: none;
}
</style>
{% endblock css %}
{% block content %}
<div class="modal fade" id="ChangeTagModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="changeTag">
<div class="modal-header">
<h1 class="modal-title fs-5">Changer le Admin Tag</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="text" name="tag" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Tag</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<input type="hidden" name="user_id">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="ChangeUserTagModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="setUserTag">
<div class="modal-header">
<h1 class="modal-title fs-5">Changer le Tag</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3 hidden" id="changeUserTagLogin">
<input type="text" name="login" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Login</label>
</div>
<div class="form-floating mb-3">
<input type="text" name="tag" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Tag</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<input type="hidden" name="user_id">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="changeCustomImageModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="changeCustomImage">
<div class="modal-header">
<h1 class="modal-title fs-5">Changer L'image</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3 hidden" id="changeCustomImageLogin">
<input type="text" name="login" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Login</label>
</div>
<div class="form-floating mb-3">
<input type="text" name="link" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Lien</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="createPiscineModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="createPiscine">
<div class="modal-header">
<h1 class="modal-title fs-5">Créer une piscine</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="number" name="campus" class="form-control" id="input-campus" value="1" placeholder="">
<label for="input-campus">ID Campus</label>
</div>
<div class="form-floating mb-3">
<input type="text" name="cluster" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Cluster</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="addWhitelistModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="CreateWhitelist">
<div class="modal-header">
<h1 class="modal-title fs-5">Ajouter une personne sur la Whitelist</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="text" name="login" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">login</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="createSilentModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="createSilent">
<div class="modal-header">
<h1 class="modal-title fs-5">Créer un cluster slientieux</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="number" name="campus" class="form-control" id="input-campus" value="1" placeholder="">
<label for="input-campus">ID Campus</label>
</div>
<div class="form-floating mb-3">
<input type="text" name="cluster" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Cluster</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="createTutorStationModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="createTutorStation">
<div class="modal-header">
<h1 class="modal-title fs-5">Créer un poste Tuteur</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="number" name="campus" class="form-control" id="input-campus" value="1" placeholder="">
<label for="input-campus">ID Campus</label>
</div>
<div class="form-floating mb-3">
<input type="text" name="station" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Location</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="createPiscineDateModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="createPiscineDate">
<div class="modal-header">
<h1 class="modal-title fs-5">Ajouter une date de Piscine</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="text" name="month" class="form-control" id="input-campus" placeholder="Lorem ipsum...">
<label for="input-campus">Month</label>
</div>
<div class="form-floating mb-3">
<input type="text" name="year" class="form-control" id="input-desc" placeholder="Lorem ipsum...">
<label for="input-desc">Year</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="createNoteAccessModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="createNoteAccess">
<div class="modal-header">
<h1 class="modal-title fs-5">Ajouter une personne au note Tuteurs</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="form-floating mb-3">
<input type="text" name="login" class="form-control" id="input-login" placeholder="Lorem ipsum...">
<label for="input-campus">Login</label>
</div>
</div>
<input type="hidden" name="csrf" value="{{ create_csrf() }}">
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</form>
</div>
</div>
</div>
<div class="p-5 mb-3 text-center bg-body-tertiary rounded-3 align-vertical">
<img class="bi mt-4 mb-3 rounded-circle" src="{{ user.custom_image_link if user.custom_image_link else user.image_medium }}" width="100" height="100" alt="pp">
<h1 class="text-body-emphasis"> {{ user.login }} [perm:{{ user.admin.level }}]
{%- if user.tag -%}
<span class="badge badge-sm align-vertical bg-info text-dark">{{ user.tag | safe }}</span>
{%- endif -%}
<span class="badge badge-sm align-vertical bg-danger">{{ user.admin.tag | safe }}</span></h1>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary text-center">
<button class="btn btn-outline-danger text-center" onclick="updateLocation()">Force Refresh Clusters</button>
<button class="btn btn-outline-danger text-center" onclick="updateTutors()">Force Refresh Tutors</button>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<form method="post" id="changetagforme">
<div class="input-group mb-3">
<input type="text" name="tag" class="form-control" value='{{ user.admin.tag }}'>
<input type="hidden" name="csrf" class="form-control" value='{{ create_csrf() }}'>
<button class="btn btn-outline-secondary" type="submit">Validate</button>
</div>
</form>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Admin</h4>
<table class="table">
<thead>
<tr>
<th scope="col">User ID</th>
<th scope="col">Level</th>
<th scope="col">Tag</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for user in admins %}
<tr>
<th scope="row">{{ user.user_id }}</th>
<td>{{ user.level }}</td>
<td> <span class="badge badge-sm align-vertical bg-danger">{{ user.tag | safe }}</span> </td>
<td>
<button class="btn btn-info btn-sm" onclick="openChangeTagFor({{ user.user_id }} , '{{ user.tag }}')">Edit</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Whitelist
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#addWhitelistModal">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">User ID</th>
<th scope="col">Login</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for user in whitelist %}
<tr>
<th scope="row">{{ user.id }}</th>
<td>{{ user.user_id }}</td>
<td>{{ user.user_login }}</td>
<td>
<button onclick="del_whitelist({{ user.id }})" class="btn btn-danger btn-sm">-</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Tags
<button class="btn btn-success btn-sm" onclick="openChangeUserTagFor(null, '')">+</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">User ID</th>
<th scope="col">Login</th>
<th scope="col">Tag</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for user in tags %}
<tr>
<th scope="row">{{ user.id }}</th>
<td> {{ user.name }}</td>
<td> <span class="badge badge-sm align-vertical bg-info text-dark">{{ user.tag | safe }}</span> </td>
<td>
<button class="btn btn-info btn-sm" onclick='openChangeUserTagFor({{ user.name | tojson }}, {{ user.tag | tojson }})'>Edit</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Piscines
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#createPiscineModal">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Campus</th>
<th scope="col">Cluster</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for piscine in piscines %}
<tr>
<th scope="row">{{ piscine.id }}</th>
<td>{{ piscine.campus }}</td>
<td>{{ piscine.cluster }}</td>
<td>
<button onclick="del_piscine({{ piscine.id }})" class="btn btn-danger btn-sm">-</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Date Piscines
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#createPiscineDateModal">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Month</th>
<th scope="col">Year</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for p in piscines_dates %}
<tr>
<th scope="row">{{ p.id }}</th>
<td>{{ p.month }}</td>
<td>{{ p.year }}</td>
<td>
<button onclick="del_piscine_dates({{ p.id }})" class="btn btn-danger btn-sm">-</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Clusters Sliencieux
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#createSilentModal">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Campus</th>
<th scope="col">Cluster</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for silent in silents %}
<tr>
<th scope="row">{{ silent.id }}</th>
<td>{{ silent.campus }}</td>
<td>{{ silent.cluster }}</td>
<td>
<button onclick="del_silent({{ silent.id }})" class="btn btn-danger btn-sm">-</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Post Tutors
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#createTutorStationModal">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Campus</th>
<th scope="col">Location</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for station in tutor_stations %}
<tr>
<th scope="row">{{ station.id }}</th>
<td>{{ station.campus }}</td>
<td>{{ station.station }}</td>
<td>
<button onclick="del_tutor_station({{ station.id }})" class="btn btn-danger btn-sm">-</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Custom Image
<button class="btn btn-success btn-sm" onclick="openCustomImage(null, null)">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">User ID</th>
<th scope="col">Login</th>
<th scope="col">Lien</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for element in custom_images %}
<tr>
<th>{{ element.id }}</th>
<td>{{ element.name }}</td>
<td>{{ element.custom_image_link }}</td>
<td>
<button onclick="openCustomImage('{{ element.name }}', '{{ element.custom_image_link }}')" class="btn btn-info btn-sm">Edit</button>
<button onclick="del_custom_image({{ element.id }})" class="btn btn-danger btn-sm">-</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="container mb-2 p-2 shadow rounded bg-body-tertiary">
<h4>Note Access
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#createNoteAccessModal">+
</button>
</h4>
<table class="table">
<thead>
<tr>
<th scope="col">User ID</th>
<th scope="col">Login</th>
<th scope="col">Reason</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
{% for element in note_access %}
<tr>
<th>{{ element.id }}</th>
<td>{{ element.name }}</td>
<td>
{% if element.reason == "admin" %}
<span class="badge badge-sm align-vertical bg-danger text-dark">ADMIN</span>
{% elif element.reason == "tutor" %}
<span class="badge badge-sm align-vertical bg-info text-dark">TUTOR</span>
{% elif element.reason == "added" %}
<span class="badge badge-sm align-vertical bg-success text-dark">ADDED</span>
{% else %}
<span class="badge badge-sm align-vertical bg-secondary text-dark">UNKNOWN</span>
{% endif %}
</td>
<td>
{% if element.can_remove %}
<button onclick="del_note_access({{ element.id }})" class="btn btn-danger btn-sm">-</button>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %}
{% block scripts %}
<script>
function del_whitelist(user_id) {
fetch(`/admin/remove/whitelist/${user_id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
function del_piscine(piscine_id) {
fetch(`/admin/remove/piscine/${piscine_id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
function del_silent(silent_id) {
fetch(`/admin/remove/silent/${silent_id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
function del_tutor_station(tutor_station_id) {
fetch(`/admin/remove/tutor_station/${tutor_station_id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
function del_piscine_dates(id) {
fetch(`/admin/remove/piscine_date/${id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
function del_custom_image(id) {
fetch(`/admin/remove/custom_image/${id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
function del_note_access(id) {
fetch(`/admin/remove/note_access/${id}/{{ create_csrf() }}`).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload()
}).catch(error => {
triggerToast(`Une erreur s'est produite (${error.status})`, false);
console.log(error)
});
}
document.getElementById('changetagforme').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/set/admin_tag', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
function openChangeTagFor(user_id, current_tag)
{
let modalElem = document.querySelector("#ChangeTagModal");
if (!modalElem)
return ;
modalElem.querySelector("input[name='user_id']").value = user_id.toString();
modalElem.querySelector("input[name='tag']").value = current_tag;
let modal = new bootstrap.Modal(modalElem).show();
}
function openCustomImage(login, current_image)
{
let modalElem = document.querySelector("#changeCustomImageModal");
if (!modalElem)
return ;
if (login !== null)
{
modalElem.querySelector("input[name='login']").value = login.toString();
modalElem.querySelector("input[name='link']").value = current_image;
} else {
modalElem.querySelector("input[name='login']").value = "";
modalElem.querySelector("#changeCustomImageLogin").classList.remove("hidden");
modalElem.querySelector("input[name='link']").value = "";
}
let modal = new bootstrap.Modal(modalElem).show();
}
function openChangeUserTagFor(login, current_tag)
{
let modalElem = document.querySelector("#ChangeUserTagModal");
if (!modalElem)
return ;
if (login !== null)
{
modalElem.querySelector("input[name='login']").value = login.toString();
}
else
{
modalElem.querySelector("input[name='login']").type = "";
modalElem.querySelector("#changeUserTagLogin").classList.remove("hidden");
}
modalElem.querySelector("input[name='tag']").value = current_tag;
let modal = new bootstrap.Modal(modalElem).show();
}
document.getElementById('changeTag').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/set/admin_tag', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('setUserTag').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/set/user_tag', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('createPiscine').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/piscine', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('CreateWhitelist').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/whitelist', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('createSilent').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/silent', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('createTutorStation').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/tutor_station', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('createPiscineDate').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/piscine_date', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('createNoteAccess').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/note_access', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
document.getElementById('changeCustomImage').addEventListener('submit', function (event) {
event.preventDefault();
const formData = new FormData(event.target);
fetch('/admin/add/custom_image', {
method: 'POST',
body: formData
}).then(async response => {
triggerToast(await response.text(), response.status === 200);
location.reload();
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
});
const UPDATE_KEY={{ update_key|tojson }};
function updateLocation()
{
fetch(`/locations/${UPDATE_KEY}/1`).then(async response => {
triggerToast("Locations has been refreshed", response.status === 200);
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
}
function updateTutors()
{
fetch(`/admin/update/tutors/${UPDATE_KEY}`).then(async response => {
triggerToast("Tutors has been refreshed", response.status === 200);
}).catch(error => triggerToast(`Une erreur s'est produite (${error.status})`, false));
}
</script>
{% endblock scripts %}