838 lines
27 KiB
HTML
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 %}
|