Prettier templates
This commit is contained in:
parent
d98268d9d6
commit
7b1cb83742
33 changed files with 4207 additions and 4374 deletions
|
|
@ -1,122 +1,112 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Gérer mon compte utilisateur</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Gérer mon compte utilisateur</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="account" method="post">
|
||||
<form id="account" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="col-md-2 form-label"> Nom complet </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ User.Name }}"
|
||||
autofocus
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="col-md-2 form-label">
|
||||
Nom complet
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ User.Name }}"
|
||||
autofocus
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-2 form-label"> Email </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
value="{{ User.Email }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-2 form-label">
|
||||
Email
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
value="{{ User.Email }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-2 form-label"> Mot de passe </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
autocomplete="off"
|
||||
/>
|
||||
<div class="form-text">Laisser vide pour ne pas changer</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-2 form-label">
|
||||
Mot de passe
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
autocomplete="off"
|
||||
>
|
||||
<div class="form-text">
|
||||
Laisser vide pour ne pas changer
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-2 form-label">
|
||||
Confirmer le mot de passe
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="password-verify"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password-verify"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-2 form-label">
|
||||
Confirmer le mot de passe
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="password-verify"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password-verify"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascript %}
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#password").on("input", function() {
|
||||
var enable = false;
|
||||
if ($(this).val().length > 0) {
|
||||
enable = true;
|
||||
}
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$("#password").on("input", function () {
|
||||
var enable = false;
|
||||
if ($(this).val().length > 0) {
|
||||
enable = true;
|
||||
}
|
||||
|
||||
$("#password-verify").prop("disabled", !enable);
|
||||
$("#password-verify").prop("required", enable);
|
||||
});
|
||||
$("#password-verify").prop("disabled", !enable);
|
||||
$("#password-verify").prop("required", enable);
|
||||
});
|
||||
|
||||
$("#password").trigger("input");
|
||||
});
|
||||
</script>
|
||||
$("#password").trigger("input");
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
@ -1,44 +1,42 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Gérer multifacteur (TOTP)</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Gérer multifacteur (TOTP)</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<form id="account" method="post">
|
||||
<form id="account" method="post">
|
||||
<div class="mb-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="reset_totp"
|
||||
name="reset_totp"
|
||||
autocomplete="off"
|
||||
required
|
||||
/>
|
||||
<label for="reset_totp" class="form-label">
|
||||
Réinitialiser le double facteur (TOTP)
|
||||
</label>
|
||||
<div class="form-text">
|
||||
Si la case est cochée, vous devrez effectuer un nouvel enrôlement
|
||||
TOTP.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="reset_totp"
|
||||
name="reset_totp"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
<label for="reset_totp" class="form-label">
|
||||
Réinitialiser le double facteur (TOTP)
|
||||
</label>
|
||||
<div class="form-text">
|
||||
Si la case est cochée, vous devrez effectuer
|
||||
un nouvel enrôlement TOTP.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
106
views/admin.html
106
views/admin.html
|
|
@ -1,58 +1,58 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Administration</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Administration</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/sections">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-building me-2"></i>
|
||||
Gestion des sections
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/lists">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-list-check me-2"></i>
|
||||
Gestion des listes
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/fields">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-database-add me-2"></i>
|
||||
Gestion des champs supplémentaires
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/users">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-person-square me-2"></i>
|
||||
Gestion des utilisateurs
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/roles">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-briefcase me-2"></i>
|
||||
Gestion des rôles
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/sections">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-building me-2"></i>
|
||||
Gestion des sections
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/lists">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-list-check me-2"></i>
|
||||
Gestion des listes
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/fields">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-database-add me-2"></i>
|
||||
Gestion des champs supplémentaires
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/users">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-person-square me-2"></i>
|
||||
Gestion des utilisateurs
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/roles">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-briefcase me-2"></i>
|
||||
Gestion des rôles
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container text-center py-5">
|
||||
<div class="h1 mb-3">Erreur {{ Code }}</div>
|
||||
<code>{{ Message }}</code>
|
||||
</div>
|
||||
<div class="container text-center py-5">
|
||||
<div class="h1 mb-3">Erreur {{ Code }}</div>
|
||||
<code>{{ Message }}</code>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
274
views/field.html
274
views/field.html
|
|
@ -1,146 +1,150 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/fields">Champs supplémentaires</a></li>
|
||||
<li class="breadcrumb-item active">{{ Field.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/fields">Champs supplémentaires</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">{{ Field.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Nom du champ
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Field.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Nom du champ</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Field.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Population
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% for Key, Value in PersonTypes %}
|
||||
{% if Key == Field.PersonType %}
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Value }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Population</div>
|
||||
<div class="col-md-10">
|
||||
{% for Key, Value in PersonTypes %}
|
||||
{% if Key == Field.PersonType %}
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Value }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Type de champ
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% for Key, Value in FieldTypes %}
|
||||
{% if Key == Field.FieldType %}
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Value }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Type de champ</div>
|
||||
<div class="col-md-10">
|
||||
{% for Key, Value in FieldTypes %}
|
||||
{% if Key == Field.FieldType %}
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Value }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Liste
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if Field.ListID %}
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Field.List.Name }}"
|
||||
readonly
|
||||
disabled
|
||||
>
|
||||
<span class="input-group-text">
|
||||
<a href="/admin/lists/{{ Field.List.ID }}">
|
||||
Afficher
|
||||
<i class="bi-box-arrow-up-right ms-1"></i>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Liste</div>
|
||||
<div class="col-md-10">
|
||||
{% if Field.ListID %}
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Field.List.Name }}"
|
||||
readonly
|
||||
disabled
|
||||
/>
|
||||
<span class="input-group-text">
|
||||
<a href="/admin/lists/{{ Field.List.ID }}">
|
||||
Afficher
|
||||
<i class="bi-box-arrow-up-right ms-1"></i>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row my-4">
|
||||
<div class="col-6">
|
||||
<a class="btn btn-outline-primary" href="/admin/fields/{{ Field.ID }}/edit">
|
||||
<i class="bi-pencil-square"></i>
|
||||
Modifier
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row my-4">
|
||||
<div class="col-6">
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/admin/fields/{{ Field.ID }}/edit"
|
||||
>
|
||||
<i class="bi-pencil-square"></i>
|
||||
Modifier
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-danger"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-delete"
|
||||
>
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer ce champ ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-secondary"
|
||||
data-bs-dismiss="modal"
|
||||
>
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer ce champ ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form action="/admin/fields/{{ Field.ID }}/delete" method="post" class="d-inline p-0">
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form
|
||||
action="/admin/fields/{{ Field.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,148 +1,142 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/fields">Champs supplémentaires</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/fields">Champs supplémentaires</a>
|
||||
</li>
|
||||
|
||||
{% if Field.ID %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/fields/{{ Field.ID }}">{{ Field.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
{% if Field.ID %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/fields/{{ Field.ID }}">{{ Field.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="field" method="post">
|
||||
<form id="field" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2"> Nom du champ </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Field.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2">
|
||||
Nom du champ
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Field.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
{% if !Field.ID %}
|
||||
<div class="row mb-3">
|
||||
<label for="person_type" class="form-label col-md-2">
|
||||
Population
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
name="person_type"
|
||||
id="person_type"
|
||||
class="form-select"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
<option value="member">Membre</option>
|
||||
<option value="contact">Contact</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if !Field.ID %}
|
||||
<div class="row mb-3">
|
||||
<label for="person_type" class="form-label col-md-2">
|
||||
Population
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
name="person_type"
|
||||
id="person_type"
|
||||
class="form-select"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
<option value="member">Membre</option>
|
||||
<option value="contact">Contact</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="field_type" class="form-label col-md-2">
|
||||
Type de champ
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
name="field_type"
|
||||
id="field_type"
|
||||
class="form-select"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
<option value="text">Texte</option>
|
||||
<option value="longtext">Texte multiligne</option>
|
||||
<option value="number">Nombre</option>
|
||||
<option value="date">Date</option>
|
||||
<option value="list">Liste</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="field_type" class="form-label col-md-2">
|
||||
Type de champ
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
name="field_type"
|
||||
id="field_type"
|
||||
class="form-select"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
<option value="text">Texte</option>
|
||||
<option value="longtext">Texte multiligne</option>
|
||||
<option value="number">Nombre</option>
|
||||
<option value="date">Date</option>
|
||||
<option value="list">Liste</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="list" class="form-label col-md-2"> Liste </label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
name="list"
|
||||
id="list"
|
||||
class="form-select"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
{% for List in Lists %}
|
||||
<option value="{{ List.ID }}">{{ List.Name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="list" class="form-label col-md-2">
|
||||
Liste
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
name="list"
|
||||
id="list"
|
||||
class="form-select"
|
||||
autocomplete="off"
|
||||
required
|
||||
>
|
||||
{% for List in Lists %}
|
||||
<option value="{{ List.ID }}">
|
||||
{{ List.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascript %}
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#field_type").on("change", function() {
|
||||
var enable = false;
|
||||
if ($(this).val() == "list") {
|
||||
enable = true;
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$("#field_type").on("change", function () {
|
||||
var enable = false;
|
||||
if ($(this).val() == "list") {
|
||||
enable = true;
|
||||
|
||||
$("#list-disabled").remove();
|
||||
} else {
|
||||
$("#list").append("<option id=\"list-disabled\" selected></option>");
|
||||
}
|
||||
$("#list-disabled").remove();
|
||||
} else {
|
||||
$("#list").append('<option id="list-disabled" selected></option>');
|
||||
}
|
||||
|
||||
$("#list").prop("disabled", !enable);
|
||||
$("#list").prop("required", enable);
|
||||
});
|
||||
$("#list").prop("disabled", !enable);
|
||||
$("#list").prop("required", enable);
|
||||
});
|
||||
|
||||
$("#field_type").trigger("change");
|
||||
});
|
||||
</script>
|
||||
$("#field_type").trigger("change");
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
@ -1,114 +1,121 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Champs supplémentaires</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Champs supplémentaires</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/fields/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/fields/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="h4 my-2">Membres</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Nom</th>
|
||||
<th class="w-25">Type de champ</th>
|
||||
<th class="w-25"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Field in Fields %}
|
||||
{% if Field.PersonType == "member" %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/fields/{{ Field.ID }}">
|
||||
{{ Field.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% for Key, Value in FieldTypes %}
|
||||
{% if Key == Field.FieldType %}
|
||||
{{ Value }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-up">
|
||||
<i class="bi-arrow-up me-1"></i>
|
||||
Monter
|
||||
</a>
|
||||
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-down">
|
||||
<i class="bi-arrow-down me-1"></i>
|
||||
Descendre
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="h4 my-2">Membres</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Nom</th>
|
||||
<th class="w-25">Type de champ</th>
|
||||
<th class="w-25"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Field in Fields %}
|
||||
{% if Field.PersonType == "member" %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/fields/{{ Field.ID }}"> {{ Field.Name }} </a>
|
||||
</td>
|
||||
<td>
|
||||
{% for Key, Value in FieldTypes %}
|
||||
{% if Key == Field.FieldType %}
|
||||
{{ Value }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<a
|
||||
class="btn btn-sm btn-outline-primary"
|
||||
href="/admin/fields/{{ Field.ID }}/move-up"
|
||||
>
|
||||
<i class="bi-arrow-up me-1"></i>
|
||||
Monter
|
||||
</a>
|
||||
<a
|
||||
class="btn btn-sm btn-outline-primary"
|
||||
href="/admin/fields/{{ Field.ID }}/move-down"
|
||||
>
|
||||
<i class="bi-arrow-down me-1"></i>
|
||||
Descendre
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="h4 my-2">Contacts</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Nom</th>
|
||||
<th class="w-25">Type de champ</th>
|
||||
<th class="w-25"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Field in Fields %}
|
||||
{% if Field.PersonType == "contact" %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/fields/{{ Field.ID }}">
|
||||
{{ Field.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% for Key, Value in FieldTypes %}
|
||||
{% if Key == Field.FieldType %}
|
||||
{{ Value }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-up">
|
||||
<i class="bi-arrow-up me-1"></i>
|
||||
Monter
|
||||
</a>
|
||||
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-down">
|
||||
<i class="bi-arrow-down me-1"></i>
|
||||
Descendre
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="h4 my-2">Contacts</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Nom</th>
|
||||
<th class="w-25">Type de champ</th>
|
||||
<th class="w-25"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Field in Fields %}
|
||||
{% if Field.PersonType == "contact" %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/fields/{{ Field.ID }}"> {{ Field.Name }} </a>
|
||||
</td>
|
||||
<td>
|
||||
{% for Key, Value in FieldTypes %}
|
||||
{% if Key == Field.FieldType %}
|
||||
{{ Value }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<a
|
||||
class="btn btn-sm btn-outline-primary"
|
||||
href="/admin/fields/{{ Field.ID }}/move-up"
|
||||
>
|
||||
<i class="bi-arrow-up me-1"></i>
|
||||
Monter
|
||||
</a>
|
||||
<a
|
||||
class="btn btn-sm btn-outline-primary"
|
||||
href="/admin/fields/{{ Field.ID }}/move-down"
|
||||
>
|
||||
<i class="bi-arrow-down me-1"></i>
|
||||
Descendre
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,50 +1,49 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">Accueil</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">Accueil</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="row">
|
||||
{% if Globals.AllowMembersPage %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/members">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-people me-2"></i>
|
||||
Gestion des membres
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if Globals.AllowMembersPage %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/members">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-people me-2"></i>
|
||||
Gestion des membres
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Globals.AllowContactsPage %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/contacts">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-telephone me-2"></i>
|
||||
Gestion des contacts
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if Globals.AllowContactsPage %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/contacts">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-telephone me-2"></i>
|
||||
Gestion des contacts
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if Globals.UserIsAdmin %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-gear me-2"></i>
|
||||
Administration de l'application
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% if Globals.UserIsAdmin %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin">
|
||||
<div class="alert alert-primary">
|
||||
<i class="bi-gear me-2"></i>
|
||||
Administration de l'application
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,68 +1,72 @@
|
|||
<!doctype html>
|
||||
<html lang="fr" class="h-100" data-bs-theme="{{ Globals.ColorMode }}">
|
||||
{% include "partials/easter_egg.html" %}
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{% include "partials/easter_egg.html" %}
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
{% set PageTitleSuffix = "Camarades | POP Vaud" %}
|
||||
{% if PageTitle %}
|
||||
<title>{{ PageTitle }} | {{ PageTitleSuffix }}</title>
|
||||
{% else %}
|
||||
<title>{{ PageTitleSuffix }}</title>
|
||||
{% endif %}
|
||||
{% set PageTitleSuffix = "Camarades | POP Vaud" %}
|
||||
{% if PageTitle %}
|
||||
<title>{{ PageTitle }} | {{ PageTitleSuffix }}</title>
|
||||
{% else %}
|
||||
<title>{{ PageTitleSuffix }}</title>
|
||||
{% endif %}
|
||||
|
||||
<link rel="shortcut icon" href="/static/images/favicon.jpg" type="image/jpg">
|
||||
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="/static/bootstrap-icons/bootstrap-icons.min.css">
|
||||
<link rel="stylesheet" href="/static/main.css">
|
||||
{% block stylesheet %}{% endblock %}
|
||||
</head>
|
||||
<body class="d-flex flex-column h-100">
|
||||
<main class="flex-shrink-0">
|
||||
{% block body %}
|
||||
{% block header %}
|
||||
{% include "partials/header.html" %}
|
||||
{% endblock %}
|
||||
<link
|
||||
rel="shortcut icon"
|
||||
href="/static/images/favicon.jpg"
|
||||
type="image/jpg"
|
||||
/>
|
||||
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/static/bootstrap-icons/bootstrap-icons.min.css"
|
||||
/>
|
||||
<link rel="stylesheet" href="/static/main.css" />
|
||||
{% block stylesheet %}{% endblock %}
|
||||
</head>
|
||||
<body class="d-flex flex-column h-100">
|
||||
<main class="flex-shrink-0">
|
||||
{% block body %}
|
||||
{% block header %}
|
||||
{% include "partials/header.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}{% endblock %}
|
||||
{% endblock %}
|
||||
</main>
|
||||
{% block main %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer class="footer mt-auto py-2 bg-body-tertiary">
|
||||
<div class="container">
|
||||
<span class="text-body-secondary">
|
||||
<a
|
||||
class="text-body-secondary me-2"
|
||||
target="_blank"
|
||||
href="https://git.readonly.ch/bouzoure/pop-camarades"
|
||||
>
|
||||
<i class="bi-code-slash"></i>
|
||||
Code source
|
||||
</a>
|
||||
<a
|
||||
class="text-body-secondary"
|
||||
target="_blank"
|
||||
href="/licences"
|
||||
>
|
||||
<i class="bi-journal-bookmark"></i>
|
||||
Licences
|
||||
</a>
|
||||
</span>
|
||||
<footer class="footer mt-auto py-2 bg-body-tertiary">
|
||||
<div class="container">
|
||||
<span class="text-body-secondary">
|
||||
<a
|
||||
class="text-body-secondary me-2"
|
||||
target="_blank"
|
||||
href="https://git.readonly.ch/bouzoure/pop-camarades"
|
||||
>
|
||||
<i class="bi-code-slash"></i>
|
||||
Code source
|
||||
</a>
|
||||
<a class="text-body-secondary" target="_blank" href="/licenses">
|
||||
<i class="bi-journal-bookmark"></i>
|
||||
Licences
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<div class="float-end">
|
||||
<span class="text-body-secondary">
|
||||
<i class="bi-stopwatch me-1"></i>
|
||||
{{ Globals.TimeStart | time_diff }}
|
||||
<span>ms</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="float-end">
|
||||
<span class="text-body-secondary">
|
||||
<i class="bi-stopwatch me-1"></i>
|
||||
{{ Globals.TimeStart | time_diff }}
|
||||
<span>ms</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/static/jquery/jquery.min.js"></script>
|
||||
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/static/functions.js"></script>
|
||||
{% block javascript %}{% endblock %}
|
||||
</body>
|
||||
<script src="/static/jquery/jquery.min.js"></script>
|
||||
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/static/functions.js"></script>
|
||||
{% block javascript %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,20 +1,18 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div id="licenses" class="container-fluid p-3">
|
||||
{{ Markdown|safe }}
|
||||
</div>
|
||||
<div id="licenses" class="container-fluid p-3">{{ Markdown|safe }}</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block stylesheet %}
|
||||
<style>
|
||||
#licenses h2 {
|
||||
font-weight: bold;
|
||||
margin: 15px 0;
|
||||
}
|
||||
<style>
|
||||
#licenses h2 {
|
||||
font-weight: bold;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
#licenses p {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
#licenses p {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
|
|
|||
358
views/list.html
358
views/list.html
|
|
@ -1,186 +1,198 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<li class="breadcrumb-item active">{{ List.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<li class="breadcrumb-item active">{{ List.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Nom
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ List.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Nom</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ List.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Liste à choix multiples
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if List.Multi %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Oui"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Liste à choix multiples</div>
|
||||
<div class="col-md-10">
|
||||
{% if List.Multi %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Oui" disabled />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4 row">
|
||||
<div class="col-6">
|
||||
<a class="btn btn-outline-primary" href="/admin/lists/{{ List.ID }}/edit">
|
||||
<i class="bi-pencil-square"></i>
|
||||
Modifier
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-4 row">
|
||||
<div class="col-6">
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/admin/lists/{{ List.ID }}/edit"
|
||||
>
|
||||
<i class="bi-pencil-square"></i>
|
||||
Modifier
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-danger"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-delete"
|
||||
>
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-3 row">
|
||||
<div class="col-sm-9 h4">
|
||||
Contenu de la liste
|
||||
</div>
|
||||
<div class="col-sm-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/lists/{{ List.ID }}/items/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-3 row">
|
||||
<div class="col-sm-9 h4">Contenu de la liste</div>
|
||||
<div class="col-sm-3 text-end">
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/admin/lists/{{ List.ID }}/items/add"
|
||||
>
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if ListItems %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Valeur</th>
|
||||
<th class="w-25">Par défaut</th>
|
||||
<th class="w-25"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Item in ListItems %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}">
|
||||
{{ Item.Value }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if Item.Default %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<button type="button" class="btn btn-outline-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modal-delete-value-{{ Item.ID }}">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div>
|
||||
Pas encore d'éléments dans cette liste.
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if ListItems %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Valeur</th>
|
||||
<th class="w-25">Par défaut</th>
|
||||
<th class="w-25"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Item in ListItems %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}">
|
||||
{{ Item.Value }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if Item.Default %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-danger btn-sm"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-delete-value-{{ Item.ID }}"
|
||||
>
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div>Pas encore d'éléments dans cette liste.</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cette liste ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-secondary"
|
||||
data-bs-dismiss="modal"
|
||||
>
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cette liste ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
<form
|
||||
action="/admin/lists/{{ List.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="/admin/lists/{{ List.ID }}/delete" method="post" class="d-inline p-0">
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% for Item in ListItems %}
|
||||
<div id="modal-delete-value-{{ Item.ID }}" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cette valeur ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form action="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}/delete" method="post" class="d-inline p-0">
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% for Item in ListItems %}
|
||||
<div id="modal-delete-value-{{ Item.ID }}" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cette valeur ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-secondary"
|
||||
data-bs-dismiss="modal"
|
||||
>
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form
|
||||
action="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,78 +1,76 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
|
||||
{% if List.ID %}
|
||||
<li class="breadcrumb-item"><a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a></li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
{% if List.ID %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="list" method="post">
|
||||
<form id="list" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2"> Nom </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ List.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2">
|
||||
Nom
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ List.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="multi"
|
||||
name="multi"
|
||||
{% if List.Multi %}checked{% endif %}
|
||||
autocomplete="off"
|
||||
/>
|
||||
<label for="multi" class="form-label">
|
||||
Liste à choix multiples
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="multi"
|
||||
name="multi"
|
||||
{% if List.Multi %}checked{% endif %}
|
||||
autocomplete="off"
|
||||
>
|
||||
<label for="multi" class="form-label">
|
||||
Liste à choix multiples
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,80 +1,78 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a>
|
||||
</li>
|
||||
|
||||
{% if ListItem.ID %}
|
||||
<li class="breadcrumb-item active">Modifier élément</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter élément</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
{% if ListItem.ID %}
|
||||
<li class="breadcrumb-item active">Modifier élément</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter élément</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="listitem" method="post">
|
||||
<form id="listitem" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="value" class="form-label col-md-2"> Valeur </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="value"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="value"
|
||||
required
|
||||
value="{{ ListItem.Value }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="value" class="form-label col-md-2">
|
||||
Valeur
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="value"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="value"
|
||||
required
|
||||
value="{{ ListItem.Value }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="default"
|
||||
name="default"
|
||||
autocomplete="off"
|
||||
{% if ListItem.Default %}
|
||||
checked
|
||||
{% endif %}
|
||||
/>
|
||||
<label for="default" class="form-label">
|
||||
Valeur sélectionnée par défaut
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="default"
|
||||
name="default"
|
||||
autocomplete="off"
|
||||
{% if ListItem.Default %}
|
||||
checked
|
||||
{% endif %}
|
||||
>
|
||||
<label for="default" class="form-label">
|
||||
Valeur sélectionnée par défaut
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
105
views/lists.html
105
views/lists.html
|
|
@ -1,61 +1,56 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Listes</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Listes</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/lists/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/lists/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if Lists %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-75">Nom</th>
|
||||
<th class="w-25">Choix multiples</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for List in Lists %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/lists/{{ List.ID }}">
|
||||
{{ List.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if List.Multi %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">
|
||||
Pas de liste pour le moment
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% if Lists %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-75">Nom</th>
|
||||
<th class="w-25">Choix multiples</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for List in Lists %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/lists/{{ List.ID }}"> {{ List.Name }} </a>
|
||||
</td>
|
||||
<td>
|
||||
{% if List.Multi %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">Pas de liste pour le moment</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
112
views/login.html
112
views/login.html
|
|
@ -1,65 +1,57 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Authentification
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if LoginError %}
|
||||
<div class="alert alert-danger">
|
||||
{{ LoginError }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">Authentification</div>
|
||||
<div class="card-body">
|
||||
{% if LoginError %}
|
||||
<div class="alert alert-danger">{{ LoginError }}</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">
|
||||
Adresse email
|
||||
</label>
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">
|
||||
Mot de passe
|
||||
</label>
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="save_session"
|
||||
name="save_session"
|
||||
>
|
||||
<label for="save_session" class="form-label">
|
||||
Se souvenir de moi
|
||||
</label>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-box-arrow-in-right"></i>
|
||||
Connexion
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label"> Adresse email </label>
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label"> Mot de passe </label>
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="save_session"
|
||||
name="save_session"
|
||||
/>
|
||||
<label for="save_session" class="form-label">
|
||||
Se souvenir de moi
|
||||
</label>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-box-arrow-in-right"></i>
|
||||
Connexion
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,143 +1,141 @@
|
|||
<nav class="navbar navbar-expand-lg bg-danger" data-bs-theme="dark">
|
||||
<div class="container-fluid">
|
||||
<a href="/" class="navbar-brand">
|
||||
<img
|
||||
id="header-logo"
|
||||
class="me-1"
|
||||
src="/static/images/logo.png"
|
||||
alt="Logo"
|
||||
>
|
||||
</a>
|
||||
<div class="container-fluid">
|
||||
<a href="/" class="navbar-brand">
|
||||
<img
|
||||
id="header-logo"
|
||||
class="me-1"
|
||||
src="/static/images/logo.png"
|
||||
alt="Logo"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<button
|
||||
class="navbar-toggler"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#navbar-content"
|
||||
>
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<button
|
||||
class="navbar-toggler"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#navbar-content"
|
||||
>
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbar-content">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<div class="collapse navbar-collapse" id="navbar-content">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
{% if Globals.TotpVerified %}
|
||||
|
||||
{% if Globals.TotpVerified %}
|
||||
{% if Globals.AllowMembersPage %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/members">
|
||||
<i class="bi-people acti me-2"></i>Membres
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if Globals.AllowMembersPage %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/members">
|
||||
<i class="bi-people acti me-2"></i>Membres
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if Globals.AllowContactsPage %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/contacts">
|
||||
<i class="bi-telephone me-2"></i>Contacts
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if Globals.AllowContactsPage %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/contacts">
|
||||
<i class="bi-telephone me-2"></i>Contacts
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if Globals.UserIsAdmin %}
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a
|
||||
class="nav-link active dropdown-toggle"
|
||||
href="javascript:;"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
>
|
||||
<i class="bi-gear me-2"></i>Administration
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/sections">
|
||||
<i class="bi-building me-2"></i>Sections
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/lists">
|
||||
<i class="bi-list-check me-2"></i>Listes
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/fields">
|
||||
<i class="bi-database-add me-2"></i>Champs supplémentaires
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/users">
|
||||
<i class="bi-person-square me-2"></i>Utilisateurs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/roles">
|
||||
<i class="bi-briefcase me-2"></i>Rôles
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
<div class="d-flex">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<a
|
||||
class="nav-link toggle-dark-mode active"
|
||||
href="javascript:;"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="Basculer entre le mode jour et le mode nuit"
|
||||
data-bs-placement="bottom"
|
||||
>
|
||||
{% if Globals.ColorMode == "dark" %}
|
||||
<i class="bi-sun"></i>
|
||||
{% else %}
|
||||
<i class="bi-moon"></i>
|
||||
{% endif %}
|
||||
</a>
|
||||
|
||||
{% if Globals.UserIsAdmin %}
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a
|
||||
class="nav-link active dropdown-toggle"
|
||||
href="javascript:;"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
>
|
||||
<i class="bi-gear me-2"></i>Administration
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/sections">
|
||||
<i class="bi-building me-2"></i>Sections
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/lists">
|
||||
<i class="bi-list-check me-2"></i>Listes
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/fields">
|
||||
<i class="bi-database-add me-2"></i>Champs supplémentaires
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/users">
|
||||
<i class="bi-person-square me-2"></i>Utilisateurs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/roles">
|
||||
<i class="bi-briefcase me-2"></i>Rôles
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if Globals.LoggedIn %}
|
||||
<li class="nav-item dropdown">
|
||||
<a
|
||||
class="nav-link active dropdown-toggle"
|
||||
href="javascript:;"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
>
|
||||
<span class="user-photo me-2"
|
||||
>{{ Globals.UserFullname|first }}</span
|
||||
>{{ Globals.UserFullname }}
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
{% if Globals.TotpVerified %}
|
||||
<li>
|
||||
<a class="dropdown-item" href="/account/manage">
|
||||
<i class="bi-sliders me-2"></i>Gérer mon compte
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/account/totp">
|
||||
<i class="bi-phone me-2"></i>Gérer multifacteur (TOTP)
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider" />
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
</ul>
|
||||
<div class="d-flex">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<a
|
||||
class="nav-link toggle-dark-mode active"
|
||||
href="javascript:;"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="Basculer entre le mode jour et le mode nuit"
|
||||
data-bs-placement="bottom"
|
||||
>
|
||||
{% if Globals.ColorMode == "dark" %}
|
||||
<i class="bi-sun"></i>
|
||||
{% else %}
|
||||
<i class="bi-moon"></i>
|
||||
{% endif %}
|
||||
|
||||
</a>
|
||||
|
||||
{% if Globals.LoggedIn %}
|
||||
<li class="nav-item dropdown">
|
||||
<a
|
||||
class="nav-link active dropdown-toggle"
|
||||
href="javascript:;"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
>
|
||||
<span class="user-photo me-2">{{ Globals.UserFullname|first }}</span>{{ Globals.UserFullname }}
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
{% if Globals.TotpVerified %}
|
||||
<li>
|
||||
<a class="dropdown-item" href="/account/manage">
|
||||
<i class="bi-sliders me-2"></i>Gérer mon compte
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/account/totp">
|
||||
<i class="bi-phone me-2"></i>Gérer multifacteur (TOTP)
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li>
|
||||
<a class="dropdown-item" href="/logout">
|
||||
<i class="bi-box-arrow-left me-2"></i>Déconnexion
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/logout">
|
||||
<i class="bi-box-arrow-left me-2"></i>Déconnexion
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
|
|
|||
|
|
@ -1,299 +1,373 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
|
||||
{% if MembersPage %}
|
||||
<li class="breadcrumb-item active">Membres</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Contacts</li>
|
||||
{% endif %}
|
||||
{% if MembersPage %}
|
||||
<li class="breadcrumb-item active">Membres</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Contacts</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="my-3 text-end">
|
||||
{% if MembersPage %}
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-outline-primary" href="/members/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/members/export?s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-filetype-csv"></i>
|
||||
Exporter
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-outline-primary" href="/contacts/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/contacts/export?s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-filetype-csv"></i>
|
||||
Exporter
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="my-3 text-end">
|
||||
{% if MembersPage %}
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-outline-primary" href="/members/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
<a class="btn btn-outline-primary" href="/members/export?s={{ SearchJSON|urlencode }}">
|
||||
<i class="bi-filetype-csv"></i>
|
||||
Exporter
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-outline-primary" href="/contacts/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
<a class="btn btn-outline-primary" href="/contacts/export?s={{ SearchJSON|urlencode }}">
|
||||
<i class="bi-filetype-csv"></i>
|
||||
Exporter
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div
|
||||
id="search-container"
|
||||
class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3"
|
||||
>
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="name" class="form-label">Nom et prénom</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="name"
|
||||
data-search-field="name"
|
||||
data-search-advanced="false"
|
||||
name="name"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 mb-3">
|
||||
<label for="section" class="form-label">Section</label>
|
||||
<select
|
||||
class="form-select"
|
||||
id="section"
|
||||
data-search-field="section"
|
||||
data-search-type="int"
|
||||
data-search-advanced="false"
|
||||
name="section"
|
||||
>
|
||||
<option value=""></option>
|
||||
{% for Section in Sections %}
|
||||
<option value="{{ Section.ID }}">{{ Section.Name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 mb-3 pt-3">
|
||||
{% if PermShow %}
|
||||
<div class="form-check form-switch">
|
||||
<input
|
||||
class="form-check-input"
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
data-search-field="active"
|
||||
data-search-advanced="false"
|
||||
id="active"
|
||||
checked
|
||||
/>
|
||||
{% if MembersPage %}
|
||||
<label class="form-check-label" for="active"
|
||||
>Afficher membres actifs</label
|
||||
>
|
||||
{% else %}
|
||||
<label class="form-check-label" for="active"
|
||||
>Afficher contacts actifs</label
|
||||
>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div id="search-container" class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mb-3">
|
||||
{% if PermShowArchived %}
|
||||
<div class="form-check form-switch">
|
||||
<input
|
||||
class="form-check-input"
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
data-search-field="archive"
|
||||
data-search-advanced="false"
|
||||
id="archive"
|
||||
/>
|
||||
{% if MembersPage %}
|
||||
<label class="form-check-label" for="archive"
|
||||
>Afficher membres archivés</label
|
||||
>
|
||||
{% else %}
|
||||
<label class="form-check-label" for="archive"
|
||||
>Afficher contacts archivés</label
|
||||
>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="name" class="form-label">Nom et prénom</label>
|
||||
<input type="text" class="form-control" id="name" data-search-field="name" data-search-advanced="false" name="name">
|
||||
<div class="d-none" id="advanced-section">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="email"
|
||||
data-search-field="email"
|
||||
data-search-advanced="true"
|
||||
name="email"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="phone" class="form-label">Téléphone</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="phone"
|
||||
data-search-field="phone"
|
||||
data-search-advanced="true"
|
||||
name="phone"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="address" class="form-label">Adresse</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="address"
|
||||
data-search-field="address"
|
||||
data-search-advanced="true"
|
||||
name="address"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-sm-4 col-lg-2 mb-3">
|
||||
<label for="postal_code" class="form-label">Code postal</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="postal_code"
|
||||
data-search-field="postal_code"
|
||||
data-search-advanced="true"
|
||||
name="postal_code"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-sm-8 col-lg-4 mb-3">
|
||||
<label for="city" class="form-label">Lieu</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="city"
|
||||
data-search-field="city"
|
||||
data-search-advanced="true"
|
||||
name="city"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 mb-3">
|
||||
<div id="search-fields-model" class="row d-none">
|
||||
<div class="start-col col-lg-6 mb-3">
|
||||
<label class="form-label">Champ supplémentaire</label>
|
||||
<select class="form-select field-select" data-last-field="">
|
||||
<option value=""></option>
|
||||
{% for Field in Fields %}
|
||||
<option value="{{ Field.ID }}">{{ Field.Name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="end-col col-lg-6 mb-3">
|
||||
<label class="form-label">Valeur</label>
|
||||
<input type="text" class="form-control" disabled />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="section" class="form-label">Section</label>
|
||||
<select class="form-select" id="section" data-search-field="section" data-search-type="int" data-search-advanced="false" name="section">
|
||||
<option value=""></option>
|
||||
{% for Section in Sections %}
|
||||
<option value="{{ Section.ID }}">
|
||||
{{ Section.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="search-fields" class="mb-3"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 mb-3 pt-3">
|
||||
<div class="row mt-2">
|
||||
<div class="col-6">
|
||||
<button
|
||||
class="btn btn-outline-primary"
|
||||
id="advanced"
|
||||
data-state="false"
|
||||
type="button"
|
||||
>
|
||||
<i class="bi-arrow-down me-1"></i> Avancé
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-outline-primary"
|
||||
id="reset-search"
|
||||
type="button"
|
||||
>
|
||||
<i class="bi-arrow-clockwise me-1"></i> Réinitialiser
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button class="btn btn-outline-success" id="search" type="button">
|
||||
<i class="bi-search me-1"></i> Recherche
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if PermShow %}
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" data-search-field="active" data-search-advanced="false" id="active" checked>
|
||||
{% if MembersPage %}
|
||||
<label class="form-check-label" for="active">Afficher membres actifs</label>
|
||||
{% else %}
|
||||
<label class="form-check-label" for="active">Afficher contacts actifs</label>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<form id="search-form" method="get" class="d-none">
|
||||
<input
|
||||
type="hidden"
|
||||
id="search-page"
|
||||
name="p"
|
||||
value="{{ Pagination.CurrentPage }}"
|
||||
/>
|
||||
<input
|
||||
type="hidden"
|
||||
id="search-json"
|
||||
name="s"
|
||||
value="{{ SearchJSON }}"
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% if PermShowArchived %}
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" data-search-field="archive" data-search-advanced="false" id="archive">
|
||||
{% if MembersPage %}
|
||||
<label class="form-check-label" for="archive">Afficher membres archivés</label>
|
||||
{% else %}
|
||||
<label class="form-check-label" for="archive">Afficher contacts archivés</label>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-25">Nom</th>
|
||||
<th class="w-50 d-none d-sm-table-cell">Adresse</th>
|
||||
<th class="w-25">Section</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Person in People %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if Person.IsMember %}
|
||||
<a href="/members/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/contacts/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="d-none d-sm-table-cell">
|
||||
{{ Person.Address1 }}
|
||||
{% if Person.Address1 and (Person.PostalCode or Person.City) %}
|
||||
–
|
||||
{% endif %}
|
||||
{{ Person.PostalCode }}
|
||||
{{ Person.City }}
|
||||
</td>
|
||||
<td>
|
||||
{% if Person.SectionID %}
|
||||
{{ Person.Section.Name }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<nav class="mt-3 mb-5">
|
||||
<ul class="pagination justify-content-center">
|
||||
{% if Pagination.CurrentPage <= 1 %}
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-rewind"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-caret-left"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="?p=1&s={{ SearchJSON|urlencode }}">
|
||||
<i class="bi-rewind"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?&p={{ Pagination.CurrentPage - 1 }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-caret-left"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<div class="d-none" id="advanced-section">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mb-3">
|
||||
{% for i in Pagination.Pages %}
|
||||
<li class="page-item">
|
||||
<a
|
||||
{% if i == Pagination.CurrentPage %}
|
||||
class="page-link active"
|
||||
{% else %}
|
||||
class="page-link"
|
||||
{% endif %}
|
||||
href="?&p={{ i }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
{{ i }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input type="text" class="form-control" id="email" data-search-field="email" data-search-advanced="true" name="email">
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
|
||||
<label for="phone" class="form-label">Téléphone</label>
|
||||
<input type="text" class="form-control" id="phone" data-search-field="phone" data-search-advanced="true" name="phone">
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
|
||||
<label for="address" class="form-label">Adresse</label>
|
||||
<input type="text" class="form-control" id="address" data-search-field="address" data-search-advanced="true" name="address">
|
||||
|
||||
</div>
|
||||
<div class="col-sm-4 col-lg-2 mb-3">
|
||||
|
||||
<label for="postal_code" class="form-label">Code postal</label>
|
||||
<input type="text" class="form-control" id="postal_code" data-search-field="postal_code" data-search-advanced="true" name="postal_code">
|
||||
|
||||
</div>
|
||||
<div class="col-sm-8 col-lg-4 mb-3">
|
||||
|
||||
<label for="city" class="form-label">Lieu</label>
|
||||
<input type="text" class="form-control" id="city" data-search-field="city" data-search-advanced="true" name="city">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="search-fields-model" class="row d-none">
|
||||
<div class="start-col col-lg-6 mb-3">
|
||||
<label class="form-label">Champ supplémentaire</label>
|
||||
<select class="form-select field-select" data-last-field="">
|
||||
<option value=""></option>
|
||||
{% for Field in Fields %}
|
||||
<option value="{{ Field.ID }}">
|
||||
{{ Field.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="end-col col-lg-6 mb-3">
|
||||
<label class="form-label">Valeur</label>
|
||||
<input type="text" class="form-control" disabled>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="search-fields" class="mb-3"></div>
|
||||
</div>
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col-6">
|
||||
<button class="btn btn-outline-primary" id="advanced" data-state="false" type="button">
|
||||
<i class="bi-arrow-down me-1"></i> Avancé
|
||||
</button>
|
||||
<button class="btn btn-outline-primary" id="reset-search" type="button">
|
||||
<i class="bi-arrow-clockwise me-1"></i> Réinitialiser
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button class="btn btn-outline-success" id="search" type="button">
|
||||
<i class="bi-search me-1"></i> Recherche
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form id="search-form" method="get" class="d-none">
|
||||
<input type="hidden" id="search-page" name="p" value="{{ Pagination.CurrentPage }}">
|
||||
<input type="hidden" id="search-json" name="s" value="{{ SearchJSON }}">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-25">Nom</th>
|
||||
<th class="w-50 d-none d-sm-table-cell">Adresse</th>
|
||||
<th class="w-25">Section</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Person in People %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if Person.IsMember %}
|
||||
<a href="/members/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/contacts/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="d-none d-sm-table-cell">
|
||||
{{ Person.Address1 }}
|
||||
{% if Person.Address1 and (Person.PostalCode or Person.City) %}
|
||||
–
|
||||
{% endif %}
|
||||
{{ Person.PostalCode }} {{ Person.City }}
|
||||
</td>
|
||||
<td>
|
||||
{% if Person.SectionID %}
|
||||
{{ Person.Section.Name }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<nav class="mt-3 mb-5">
|
||||
<ul class="pagination justify-content-center">
|
||||
|
||||
{% if Pagination.CurrentPage <= 1 %}
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-rewind"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-caret-left"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?p=1&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-rewind"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?&p={{ Pagination.CurrentPage - 1 }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-caret-left"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% for i in Pagination.Pages %}
|
||||
<li class="page-item">
|
||||
<a
|
||||
{% if i == Pagination.CurrentPage %}
|
||||
class="page-link active"
|
||||
{% else %}
|
||||
class="page-link"
|
||||
{% endif %}
|
||||
|
||||
href="?&p={{ i }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
{{ i }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
{% if Pagination.CurrentPage >= Pagination.MaxPages %}
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-caret-right"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-fast-forward"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?&p={{ Pagination.CurrentPage + 1 }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-caret-right"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?p={{ Pagination.MaxPages }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-fast-forward"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
{% if Pagination.CurrentPage >= Pagination.MaxPages %}
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-caret-right"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item disabled">
|
||||
<a class="page-link" href="javascript:;">
|
||||
<i class="bi-fast-forward"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?&p={{ Pagination.CurrentPage + 1 }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-caret-right"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a
|
||||
class="page-link"
|
||||
href="?p={{ Pagination.MaxPages }}&s={{ SearchJSON|urlencode }}"
|
||||
>
|
||||
<i class="bi-fast-forward"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascript %}
|
||||
<script src="/static/search.js"></script>
|
||||
<script src="/static/search.js"></script>
|
||||
{% endblock %}
|
||||
1023
views/person.html
1023
views/person.html
File diff suppressed because it is too large
Load diff
|
|
@ -1,361 +1,342 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
|
||||
{% if Person.IsMember or MembersPage %}
|
||||
<li class="breadcrumb-item"><a href="/members">Membres</a></li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item"><a href="/contacts">Contacts</a></li>
|
||||
{% endif %}
|
||||
{% if Person.IsMember or MembersPage %}
|
||||
<li class="breadcrumb-item"><a href="/members">Membres</a></li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item"><a href="/contacts">Contacts</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if Person.ID %}
|
||||
{% if Person.IsMember %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/members/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/contacts/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if Person.ID %}
|
||||
{% if Person.IsMember %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/members/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/contacts/{{ Person.ID }}">
|
||||
{{ Person.LastName }} {{ Person.FirstName }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="person" method="post">
|
||||
<form id="person" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="last_name" class="form-label col-md-2">
|
||||
Nom de famille
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="last_name"
|
||||
value="{{ Person.LastName }}"
|
||||
autofocus
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="last_name" class="form-label col-md-2">
|
||||
Nom de famille
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="last_name"
|
||||
value="{{ Person.LastName }}"
|
||||
autofocus
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="first_name" class="form-label col-md-2"> Prénom </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="first_name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="first_name"
|
||||
required
|
||||
value="{{ Person.FirstName }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="first_name" class="form-label col-md-2">
|
||||
Prénom
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="first_name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="first_name"
|
||||
required
|
||||
value="{{ Person.FirstName }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="form-label col-md-2"> Email </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="email"
|
||||
value="{{ Person.Email }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="form-label col-md-2">
|
||||
Email
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="email"
|
||||
value="{{ Person.Email }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="phone" class="form-label col-md-2"> Téléphone fixe </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="phone"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="phone"
|
||||
value="{{ Person.Phone }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="phone" class="form-label col-md-2">
|
||||
Téléphone fixe
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="phone"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="phone"
|
||||
value="{{ Person.Phone }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-5">
|
||||
<label for="mobile" class="form-label col-md-2">
|
||||
Téléphone mobile
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="mobile"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="mobile"
|
||||
value="{{ Person.Mobile }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-5">
|
||||
<label for="mobile" class="form-label col-md-2">
|
||||
Téléphone mobile
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="mobile"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="mobile"
|
||||
value="{{ Person.Mobile }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<label for="address1" class="form-label col-md-2"> Adresse </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="address1"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="address1"
|
||||
value="{{ Person.Address1 }}"
|
||||
placeholder="Ligne 1"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<label for="address1" class="form-label col-md-2">
|
||||
Adresse
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="address1"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="address1"
|
||||
value="{{ Person.Address1 }}"
|
||||
placeholder="Ligne 1"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
id="address2"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="address2"
|
||||
value="{{ Person.Address2 }}"
|
||||
placeholder="Ligne 2"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
id="address2"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="address2"
|
||||
value="{{ Person.Address2 }}"
|
||||
placeholder="Ligne 2"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-5">
|
||||
<div class="col-md-3 col-lg-2 offset-md-2 mb-2 mb-md-0">
|
||||
<input
|
||||
id="postal_code"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="postal_code"
|
||||
placeholder="Code postal"
|
||||
pattern="[0-9]{4}"
|
||||
value="{{ Person.PostalCode }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-md-7 col-lg-8">
|
||||
<input
|
||||
id="city"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="city"
|
||||
value="{{ Person.City }}"
|
||||
placeholder="Lieu"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-5">
|
||||
<div class="col-md-3 col-lg-2 offset-md-2 mb-2 mb-md-0">
|
||||
<input
|
||||
id="postal_code"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="postal_code"
|
||||
placeholder="Code postal"
|
||||
pattern="[0-9]{4}"
|
||||
value="{{ Person.PostalCode }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
<div class="col-md-7 col-lg-8">
|
||||
<input
|
||||
id="city"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="city"
|
||||
value="{{ Person.City }}"
|
||||
placeholder="Lieu"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="section" class="form-label col-md-2"> Section </label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
class="form-select"
|
||||
name="section"
|
||||
id="section"
|
||||
required
|
||||
autocomplete="off"
|
||||
>
|
||||
{% for Section in Sections %}
|
||||
<option
|
||||
value="{{ Section.ID }}"
|
||||
{% if Section.ID == Person.SectionID %}
|
||||
selected
|
||||
{% endif %}
|
||||
>
|
||||
{{ Section.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="section" class="form-label col-md-2">
|
||||
Section
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
class="form-select"
|
||||
name="section"
|
||||
id="section"
|
||||
required
|
||||
autocomplete="off"
|
||||
>
|
||||
{% for Section in Sections %}
|
||||
<option
|
||||
value="{{ Section.ID }}"
|
||||
{% if Section.ID == Person.SectionID %}
|
||||
selected
|
||||
{% endif %}
|
||||
>
|
||||
{{ Section.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% if Fields %}
|
||||
<div class="mt-4 mb-3">
|
||||
<span class="h4"> Champs supplémentaires </span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if Fields %}
|
||||
<div class="mt-4 mb-3">
|
||||
<span class="h4">
|
||||
Champs supplémentaires
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% for Field in Fields %}
|
||||
<div class="row mb-3">
|
||||
<label for="field-{{ Field.ID }}" class="form-label col-md-2">
|
||||
{{ Field.Name }}
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
{% if Field.FieldType == "text" %}
|
||||
<input
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID %}
|
||||
value="{{ FieldValue.ValueString.String }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
/>
|
||||
{% endif %}
|
||||
|
||||
{% for Field in Fields %}
|
||||
<div class="row mb-3">
|
||||
<label for="field-{{ Field.ID }}" class="form-label col-md-2">
|
||||
{{ Field.Name }}
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
{% if Field.FieldType == "longtext" %}
|
||||
<textarea
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
name="field-{{ Field.ID }}"
|
||||
rows="4"
|
||||
autocomplete="off"
|
||||
>
|
||||
{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString.String }}{% endif %}{% endfor %}</textarea
|
||||
>
|
||||
{% endif %}
|
||||
|
||||
{% if Field.FieldType == "text" %}
|
||||
<input
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
{% if Field.FieldType == "number" %}
|
||||
<input
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
type="number"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID %}
|
||||
value="{{ FieldValue.ValueInt.Int64 }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
/>
|
||||
{% endif %}
|
||||
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID %}
|
||||
value="{{ FieldValue.ValueString.String }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{% endif %}
|
||||
{% if Field.FieldType == "date" %}
|
||||
<input
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
type="date"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID %}
|
||||
value="{{ FieldValue.ValueDate.Time|date:"2006-01-02" }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
/>
|
||||
{% endif %}
|
||||
|
||||
{% if Field.FieldType == "longtext" %}
|
||||
<textarea
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
name="field-{{ Field.ID }}"
|
||||
rows="4"
|
||||
autocomplete="off"
|
||||
>{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString.String }}{% endif %}{% endfor %}</textarea>
|
||||
{% endif %}
|
||||
{% if Field.FieldType == "list" and !Field.List.Multi %}
|
||||
<select
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-select"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
<option value="0">Choisir...</option>
|
||||
{% for ListItem in Field.List.ListItems %}
|
||||
<option
|
||||
value="{{ ListItem.ID }}"
|
||||
{% if !Person.ID and ListItem.Default %}
|
||||
selected
|
||||
{% endif %}
|
||||
|
||||
{% if Field.FieldType == "number" %}
|
||||
<input
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
type="number"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
|
||||
selected
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{{ ListItem.Value }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% endif %}
|
||||
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID %}
|
||||
value="{{ FieldValue.ValueInt.Int64 }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{% endif %}
|
||||
{% if Field.FieldType == "list" and Field.List.Multi %}
|
||||
{% for ListItem in Field.List.ListItems %}
|
||||
<div class="mb-1">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="field-{{ Field.ID }}-{{ ListItem.ID }}"
|
||||
name="field-{{ Field.ID }}-{{ ListItem.ID }}"
|
||||
autocomplete="off"
|
||||
{% if !Person.ID and ListItem.Default %}
|
||||
checked
|
||||
{% endif %}
|
||||
|
||||
{% if Field.FieldType == "date" %}
|
||||
<input
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-control"
|
||||
type="date"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
|
||||
checked
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
/>
|
||||
<label
|
||||
for="field-{{ Field.ID }}-{{ ListItem.ID }}"
|
||||
class="form-label"
|
||||
>
|
||||
{{ ListItem.Value }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID %}
|
||||
value="{{ FieldValue.ValueDate.Time|date:"2006-01-02" }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{% endif %}
|
||||
|
||||
{% if Field.FieldType == "list" and !Field.List.Multi %}
|
||||
<select
|
||||
id="field-{{ Field.ID }}"
|
||||
class="form-select"
|
||||
name="field-{{ Field.ID }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
<option value="0">Choisir...</option>
|
||||
{% for ListItem in Field.List.ListItems %}
|
||||
<option
|
||||
value="{{ ListItem.ID }}"
|
||||
|
||||
{% if !Person.ID and ListItem.Default %}
|
||||
selected
|
||||
{% endif %}
|
||||
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
|
||||
selected
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{{ ListItem.Value }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% endif %}
|
||||
|
||||
{% if Field.FieldType == "list" and Field.List.Multi %}
|
||||
{% for ListItem in Field.List.ListItems %}
|
||||
<div class="mb-1">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="field-{{ Field.ID }}-{{ ListItem.ID }}"
|
||||
name="field-{{ Field.ID }}-{{ ListItem.ID }}"
|
||||
autocomplete="off"
|
||||
|
||||
{% if !Person.ID and ListItem.Default %}
|
||||
checked
|
||||
{% endif %}
|
||||
|
||||
{% for FieldValue in FieldValues %}
|
||||
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
|
||||
checked
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
<label
|
||||
for="field-{{ Field.ID }}-{{ ListItem.ID }}"
|
||||
class="form-label"
|
||||
>
|
||||
{{ ListItem.Value }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="my-5">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-5">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
987
views/role.html
987
views/role.html
File diff suppressed because it is too large
Load diff
|
|
@ -1,340 +1,324 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/roles">Rôles</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/roles">Rôles</a></li>
|
||||
|
||||
{% if Role.ID %}
|
||||
<li class="breadcrumb-item"><a href="/admin/roles/{{ Role.ID }}">{{ Role.Name }}</a></li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
{% if Role.ID %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/roles/{{ Role.ID }}">{{ Role.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="role" method="post">
|
||||
<form id="role" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2"> Nom </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Role.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2">
|
||||
Nom
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Role.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-4 mb-3 d-md-none">
|
||||
<span class="h4"> Permissions membres </span>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 mb-3 d-md-none">
|
||||
<span class="h4">
|
||||
Permissions membres
|
||||
</span>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
<div class="d-none d-md-block">Permissions membres</div>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_member"
|
||||
name="show_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="show_member" class="form-label"> Afficher membres </label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
<div class="d-none d-md-block">
|
||||
Permissions membres
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_member"
|
||||
name="show_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowMember %}checked{% endif %}
|
||||
>
|
||||
<label for="show_member" class="form-label">
|
||||
Afficher membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="create_member"
|
||||
name="create_member"
|
||||
autocomplete="off"
|
||||
{% if Role.CreateMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="create_member" class="form-label"> Créer membres </label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="create_member"
|
||||
name="create_member"
|
||||
autocomplete="off"
|
||||
{% if Role.CreateMember %}checked{% endif %}
|
||||
>
|
||||
<label for="create_member" class="form-label">
|
||||
Créer membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="edit_member"
|
||||
name="edit_member"
|
||||
autocomplete="off"
|
||||
{% if Role.EditMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="edit_member" class="form-label"> Modifier membres </label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="edit_member"
|
||||
name="edit_member"
|
||||
autocomplete="off"
|
||||
{% if Role.EditMember %}checked{% endif %}
|
||||
>
|
||||
<label for="edit_member" class="form-label">
|
||||
Modifier membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_archived_member"
|
||||
name="show_archived_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowArchivedMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="show_archived_member" class="form-label">
|
||||
Afficher membres archivés
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_archived_member"
|
||||
name="show_archived_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowArchivedMember %}checked{% endif %}
|
||||
>
|
||||
<label for="show_archived_member" class="form-label">
|
||||
Afficher membres archivés
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="archive_member"
|
||||
name="archive_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ArchiveMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="archive_member" class="form-label">
|
||||
Archiver membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="archive_member"
|
||||
name="archive_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ArchiveMember %}checked{% endif %}
|
||||
>
|
||||
<label for="archive_member" class="form-label">
|
||||
Archiver membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="restore_member"
|
||||
name="restore_member"
|
||||
autocomplete="off"
|
||||
{% if Role.RestoreMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="restore_member" class="form-label">
|
||||
Restaurer membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="restore_member"
|
||||
name="restore_member"
|
||||
autocomplete="off"
|
||||
{% if Role.RestoreMember %}checked{% endif %}
|
||||
>
|
||||
<label for="restore_member" class="form-label">
|
||||
Restaurer membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="purge_member"
|
||||
name="purge_member"
|
||||
autocomplete="off"
|
||||
{% if Role.PurgeMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="purge_member" class="form-label">
|
||||
Purger membres (suppression définitive)
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="purge_member"
|
||||
name="purge_member"
|
||||
autocomplete="off"
|
||||
{% if Role.PurgeMember %}checked{% endif %}
|
||||
>
|
||||
<label for="purge_member" class="form-label">
|
||||
Purger membres (suppression définitive)
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="convert_member_to_contact"
|
||||
name="convert_member_to_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ConvertMemberToContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="convert_member_to_contact" class="form-label">
|
||||
Convertir membres en contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="convert_member_to_contact"
|
||||
name="convert_member_to_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ConvertMemberToContact %}checked{% endif %}
|
||||
>
|
||||
<label for="convert_member_to_contact" class="form-label">
|
||||
Convertir membres en contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-4 mb-3 d-md-none">
|
||||
<span class="h4"> Permissions contacts </span>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 mb-3 d-md-none">
|
||||
<span class="h4">
|
||||
Permissions contacts
|
||||
</span>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
<div class="d-none d-md-block">Permissions contacts</div>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_contact"
|
||||
name="show_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="show_contact" class="form-label">
|
||||
Afficher contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
<div class="d-none d-md-block">
|
||||
Permissions contacts
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_contact"
|
||||
name="show_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowContact %}checked{% endif %}
|
||||
>
|
||||
<label for="show_contact" class="form-label">
|
||||
Afficher contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="create_contact"
|
||||
name="create_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.CreateContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="create_contact" class="form-label">
|
||||
Créer contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="create_contact"
|
||||
name="create_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.CreateContact %}checked{% endif %}
|
||||
>
|
||||
<label for="create_contact" class="form-label">
|
||||
Créer contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="edit_contact"
|
||||
name="edit_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.EditContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="edit_contact" class="form-label">
|
||||
Modifier contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="edit_contact"
|
||||
name="edit_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.EditContact %}checked{% endif %}
|
||||
>
|
||||
<label for="edit_contact" class="form-label">
|
||||
Modifier contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_archived_contact"
|
||||
name="show_archived_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowArchivedContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="show_archived_contact" class="form-label">
|
||||
Afficher contacts archivés
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="show_archived_contact"
|
||||
name="show_archived_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ShowArchivedContact %}checked{% endif %}
|
||||
>
|
||||
<label for="show_archived_contact" class="form-label">
|
||||
Afficher contacts archivés
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="archive_contact"
|
||||
name="archive_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ArchiveContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="archive_contact" class="form-label">
|
||||
Archiver contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="archive_contact"
|
||||
name="archive_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.ArchiveContact %}checked{% endif %}
|
||||
>
|
||||
<label for="archive_contact" class="form-label">
|
||||
Archiver contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="restore_contact"
|
||||
name="restore_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.RestoreContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="restore_contact" class="form-label">
|
||||
Restaurer contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="restore_contact"
|
||||
name="restore_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.RestoreContact %}checked{% endif %}
|
||||
>
|
||||
<label for="restore_contact" class="form-label">
|
||||
Restaurer contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="purge_contact"
|
||||
name="purge_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.PurgeContact %}checked{% endif %}
|
||||
/>
|
||||
<label for="purge_contact" class="form-label">
|
||||
Purger contacts (suppression définitive)
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="purge_contact"
|
||||
name="purge_contact"
|
||||
autocomplete="off"
|
||||
{% if Role.PurgeContact %}checked{% endif %}
|
||||
>
|
||||
<label for="purge_contact" class="form-label">
|
||||
Purger contacts (suppression définitive)
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="convert_contact_to_member"
|
||||
name="convert_contact_to_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ConvertContactToMember %}checked{% endif %}
|
||||
/>
|
||||
<label for="convert_contact_to_member" class="form-label">
|
||||
Convertir contacts en membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="convert_contact_to_member"
|
||||
name="convert_contact_to_member"
|
||||
autocomplete="off"
|
||||
{% if Role.ConvertContactToMember %}checked{% endif %}
|
||||
>
|
||||
<label for="convert_contact_to_member" class="form-label">
|
||||
Convertir contacts en membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,52 +1,46 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Rôles</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Rôles</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/roles/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/roles/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
{% if Roles %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Role in Roles %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/roles/{{ Role.ID }}">
|
||||
{{ Role.Name }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">
|
||||
Pas de rôle pour le moment
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% if Roles %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Role in Roles %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/roles/{{ Role.ID }}"> {{ Role.Name }} </a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">Pas de rôle pour le moment</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,181 +1,163 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/sections">Sections</a></li>
|
||||
<li class="breadcrumb-item active">{{ Section.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/sections">Sections</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">{{ Section.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Nom
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Section.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Nom</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Section.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Nom technique
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Section.ShortName }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Nom technique</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Section.ShortName }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Section parente
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if Section.ParentSectionID %}
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Section.ParentSection.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Section parente</div>
|
||||
<div class="col-md-10">
|
||||
{% if Section.ParentSectionID %}
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ Section.ParentSection.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Peut contenir des membres
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if Section.ContainsMembers %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Oui"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Peut contenir des membres</div>
|
||||
<div class="col-md-10">
|
||||
{% if Section.ContainsMembers %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Oui" disabled />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Peut contenir des contacts
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if Section.ContainsContacts %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Oui"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Peut contenir des contacts</div>
|
||||
<div class="col-md-10">
|
||||
{% if Section.ContainsContacts %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Oui" disabled />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4 row">
|
||||
<div class="col-6">
|
||||
<a class="btn btn-outline-primary" href="/admin/sections/{{ Section.ID }}/edit">
|
||||
<i class="bi-pencil-square"></i>
|
||||
Modifier
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-4 row">
|
||||
<div class="col-6">
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/admin/sections/{{ Section.ID }}/edit"
|
||||
>
|
||||
<i class="bi-pencil-square"></i>
|
||||
Modifier
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-danger"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-delete"
|
||||
>
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cette section ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-secondary"
|
||||
data-bs-dismiss="modal"
|
||||
>
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cette section ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form action="/admin/sections/{{ Section.ID }}/delete" method="post" class="d-inline p-0">
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form
|
||||
action="/admin/sections/{{ Section.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,146 +1,144 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/sections">Sections</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/sections">Sections</a>
|
||||
</li>
|
||||
|
||||
{% if Section.ID %}
|
||||
<li class="breadcrumb-item"><a href="/admin/sections/{{ Section.ID }}">{{ Section.Name }}</a></li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
{% if Section.ID %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/sections/{{ Section.ID }}">{{ Section.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="section" method="post">
|
||||
<form id="section" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2"> Nom </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Section.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2">
|
||||
Nom
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Section.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="short_name" class="form-label col-md-2">
|
||||
Nom technique
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="short_name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="short_name"
|
||||
required
|
||||
value="{{ Section.ShortName }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="short_name" class="form-label col-md-2">
|
||||
Nom technique
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="short_name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="short_name"
|
||||
required
|
||||
value="{{ Section.ShortName }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="parent_section" class="form-label col-md-2">
|
||||
Section parente
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
id="parent_section"
|
||||
class="form-select"
|
||||
name="parent_section"
|
||||
autocomplete="off"
|
||||
{% if IsParent %}
|
||||
disabled
|
||||
{% endif %}
|
||||
>
|
||||
<option value="0">Choisir...</option>
|
||||
{% if !IsParent %}
|
||||
{% for ParentSection in Sections %}
|
||||
<option
|
||||
value="{{ ParentSection.ID }}"
|
||||
{% if Section.ParentSectionID == ParentSection.ID %}selected{% endif %}
|
||||
>
|
||||
{{ ParentSection.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="parent_section" class="form-label col-md-2">
|
||||
Section parente
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<select
|
||||
id="parent_section"
|
||||
class="form-select"
|
||||
name="parent_section"
|
||||
autocomplete="off"
|
||||
{% if IsParent %}
|
||||
disabled
|
||||
{% endif %}
|
||||
>
|
||||
<option value="0">
|
||||
Choisir...
|
||||
</option>
|
||||
{% if !IsParent %}
|
||||
{% for ParentSection in Sections %}
|
||||
<option
|
||||
value="{{ ParentSection.ID }}"
|
||||
{% if Section.ParentSectionID == ParentSection.ID %}selected{% endif %}
|
||||
>
|
||||
{{ ParentSection.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="contains_members"
|
||||
name="contains_members"
|
||||
autocomplete="off"
|
||||
{% if Section.ContainsMembers %}
|
||||
checked
|
||||
{% endif %}
|
||||
/>
|
||||
<label for="contains_members" class="form-label">
|
||||
Contient des membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="contains_members"
|
||||
name="contains_members"
|
||||
autocomplete="off"
|
||||
{% if Section.ContainsMembers %}
|
||||
checked
|
||||
{% endif %}
|
||||
>
|
||||
<label for="contains_members" class="form-label">
|
||||
Contient des membres
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="contains_contacts"
|
||||
name="contains_contacts"
|
||||
autocomplete="off"
|
||||
{% if Section.ContainsContacts %}
|
||||
checked
|
||||
{% endif %}
|
||||
/>
|
||||
<label for="contains_contacts" class="form-label">
|
||||
Contient des contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="contains_contacts"
|
||||
name="contains_contacts"
|
||||
autocomplete="off"
|
||||
{% if Section.ContainsContacts %}
|
||||
checked
|
||||
{% endif %}
|
||||
>
|
||||
<label for="contains_contacts" class="form-label">
|
||||
Contient des contacts
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,80 +1,77 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Sections</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Sections</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/sections/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/sections/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if Sections %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-25">Nom</th>
|
||||
<th class="w-25">Section parente</th>
|
||||
<th class="w-25">Membres</th>
|
||||
<th class="w-25">Contacts</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Section in Sections %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/sections/{{ Section.ID }}">
|
||||
{{ Section.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if Section.ParentSectionID %}
|
||||
{{ Section.ParentSection.Name }}
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if Section.ContainsMembers %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if Section.ContainsContacts %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">
|
||||
Pas de section pour le moment
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% if Sections %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-25">Nom</th>
|
||||
<th class="w-25">Section parente</th>
|
||||
<th class="w-25">Membres</th>
|
||||
<th class="w-25">Contacts</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Section in Sections %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/sections/{{ Section.ID }}">
|
||||
{{ Section.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if Section.ParentSectionID %}
|
||||
{{ Section.ParentSection.Name }}
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if Section.ContainsMembers %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if Section.ContainsContacts %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">Pas de section pour le moment</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,109 +1,113 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Enregistrement multifacteur (TOTP)
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if MfaError %}
|
||||
<div class="alert alert-danger">
|
||||
{{ MfaError }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">Enregistrement multifacteur (TOTP)</div>
|
||||
<div class="card-body">
|
||||
{% if MfaError %}
|
||||
<div class="alert alert-danger">{{ MfaError }}</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="lh-sm text-center">
|
||||
Le double facteur protège l’application et
|
||||
sécurise les données personnelles de nos camarades.
|
||||
Même en cas de vol de mot de passe, l’accès est bloqué sans une
|
||||
vérification supplémentaire.
|
||||
</div>
|
||||
<div class="lh-sm text-center">
|
||||
Le double facteur protège l’application et sécurise les données
|
||||
personnelles de nos camarades. Même en cas de vol de mot de passe,
|
||||
l’accès est bloqué sans une vérification supplémentaire.
|
||||
</div>
|
||||
|
||||
<div class="my-4 text-center">
|
||||
<img src="{{ QrCode }}" alt="Code QR">
|
||||
<div class="my-4 text-center">
|
||||
<img src="{{ QrCode }}" alt="Code QR" />
|
||||
|
||||
<div class="mt-2">
|
||||
<a href="javascript:;" data-bs-toggle="modal" data-bs-target="#modal-help">
|
||||
<i class="bi-info-square"></i>
|
||||
Comment utiliser ce code QR ?
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<a
|
||||
href="javascript:;"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-help"
|
||||
>
|
||||
<i class="bi-info-square"></i>
|
||||
Comment utiliser ce code QR ?
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="secret" class="form-label">
|
||||
Secret (si pas possible de scanner le code QR)
|
||||
</label>
|
||||
<input
|
||||
id="secret"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="secret"
|
||||
disabled
|
||||
value="{{ Secret }}"
|
||||
>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="otp" class="form-label">
|
||||
Code temporaire
|
||||
</label>
|
||||
<input
|
||||
id="otp"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="otp"
|
||||
required
|
||||
placeholder="000000"
|
||||
pattern="[0-9]{6}"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-check-circle"></i>
|
||||
Vérifier
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="secret" class="form-label">
|
||||
Secret (si pas possible de scanner le code QR)
|
||||
</label>
|
||||
<input
|
||||
id="secret"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="secret"
|
||||
disabled
|
||||
value="{{ Secret }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="otp" class="form-label"> Code temporaire </label>
|
||||
<input
|
||||
id="otp"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="otp"
|
||||
required
|
||||
placeholder="000000"
|
||||
pattern="[0-9]{6}"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-check-circle"></i>
|
||||
Vérifier
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-help" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Aide</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ol>
|
||||
<li>
|
||||
<b>Téléchargez une application d’authentification :</b>
|
||||
Installez une application compatible TOTP (comme Google Authenticator,
|
||||
Microsoft Authenticator ou Authy) sur votre smartphone.
|
||||
</li>
|
||||
<li>
|
||||
<b>Scannez le code QR :</b>
|
||||
Ouvrez l'application, choisissez "Ajouter un compte" ou "Scanner un code QR",
|
||||
puis utilisez votre appareil pour scanner le QR code affiché.
|
||||
</li>
|
||||
<li>
|
||||
<b>Enregistrez le compte :</b>
|
||||
Une fois scanné, l'application générera un code à usage unique qui
|
||||
se renouvelle régulièrement.
|
||||
</li>
|
||||
<li>
|
||||
<b>Testez le code :</b>
|
||||
Entrez le code généré dans l'application pour confirmer l’enrôlement.
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modal-help" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Aide</h5>
|
||||
<button
|
||||
type="button"
|
||||
class="btn-close"
|
||||
data-bs-dismiss="modal"
|
||||
></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ol>
|
||||
<li>
|
||||
<b>Téléchargez une application d’authentification :</b>
|
||||
Installez une application compatible TOTP (comme Google
|
||||
Authenticator, Microsoft Authenticator ou Authy) sur votre
|
||||
smartphone.
|
||||
</li>
|
||||
<li>
|
||||
<b>Scannez le code QR :</b>
|
||||
Ouvrez l'application, choisissez "Ajouter un compte" ou "Scanner
|
||||
un code QR", puis utilisez votre appareil pour scanner le QR code
|
||||
affiché.
|
||||
</li>
|
||||
<li>
|
||||
<b>Enregistrez le compte :</b>
|
||||
Une fois scanné, l'application générera un code à usage unique qui
|
||||
se renouvelle régulièrement.
|
||||
</li>
|
||||
<li>
|
||||
<b>Testez le code :</b>
|
||||
Entrez le code généré dans l'application pour confirmer
|
||||
l’enrôlement.
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,44 +1,38 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Vérification multifacteur (TOTP)
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if MfaError %}
|
||||
<div class="alert alert-danger">
|
||||
{{ MfaError }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">Vérification multifacteur (TOTP)</div>
|
||||
<div class="card-body">
|
||||
{% if MfaError %}
|
||||
<div class="alert alert-danger">{{ MfaError }}</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="otp" class="form-label">
|
||||
Code temporaire
|
||||
</label>
|
||||
<input
|
||||
id="otp"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="otp"
|
||||
required
|
||||
placeholder="000000"
|
||||
pattern="[0-9]{6}"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-check-circle"></i>
|
||||
Vérifier
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="otp" class="form-label"> Code temporaire </label>
|
||||
<input
|
||||
id="otp"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="otp"
|
||||
required
|
||||
placeholder="000000"
|
||||
pattern="[0-9]{6}"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-check-circle"></i>
|
||||
Vérifier
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
397
views/user.html
397
views/user.html
|
|
@ -1,222 +1,201 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/users">Utilisateurs</a></li>
|
||||
<li class="breadcrumb-item active">{{ User.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/users">Utilisateurs</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">{{ User.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Nom complet
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ User.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Nom complet</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ User.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Email
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ User.Email }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Email</div>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ User.Email }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Administrateur
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if User.IsAdmin %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Oui"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Administrateur</div>
|
||||
<div class="col-md-10">
|
||||
{% if User.IsAdmin %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Oui" disabled />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Ecran de bienvenue à la prochaine connexion
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if User.SkipWelcome %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Non"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Oui"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Ecran de bienvenue à la prochaine connexion</div>
|
||||
<div class="col-md-10">
|
||||
{% if User.SkipWelcome %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Non" disabled />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Oui" disabled />
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
Double facteur (TOTP)
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
{% if User.TotpSecret.Valid %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Enrôlé"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Enrôlement lors de la prochaine connexion"
|
||||
disabled
|
||||
>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">Double facteur (TOTP)</div>
|
||||
<div class="col-md-10">
|
||||
{% if User.TotpSecret.Valid %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-check-lg text-success"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control" value="Enrôlé" disabled />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-x-lg text-danger"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="Enrôlement lors de la prochaine connexion"
|
||||
disabled
|
||||
/>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 mb-3">
|
||||
<span class="h4">
|
||||
Permissions
|
||||
</span>
|
||||
</div>
|
||||
{% if UserRoles %}
|
||||
{% for UserRole in UserRoles %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
{{ UserRole.Section.Name }}
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-key"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ UserRole.Role.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<div>
|
||||
Pas encore de permissions pour cet utilisateur.
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="mt-4 mb-3">
|
||||
<span class="h4"> Permissions </span>
|
||||
</div>
|
||||
{% if UserRoles %}
|
||||
{% for UserRole in UserRoles %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">{{ UserRole.Section.Name }}</div>
|
||||
<div class="col-md-10">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-key"></i>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
value="{{ UserRole.Role.Name }}"
|
||||
disabled
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<div>Pas encore de permissions pour cet utilisateur.</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="my-4 row">
|
||||
<div class="col-6">
|
||||
<a class="btn btn-outline-primary" href="/admin/users/{{ User.ID }}/edit">
|
||||
<i class="bi-pencil-square me-1"></i>
|
||||
Modifier
|
||||
</a>
|
||||
<a class="btn btn-outline-primary" href="/admin/users/{{ User.ID }}/permissions">
|
||||
<i class="bi-key me-1"></i>
|
||||
Permissions
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-4 row">
|
||||
<div class="col-6">
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/admin/users/{{ User.ID }}/edit"
|
||||
>
|
||||
<i class="bi-pencil-square me-1"></i>
|
||||
Modifier
|
||||
</a>
|
||||
<a
|
||||
class="btn btn-outline-primary"
|
||||
href="/admin/users/{{ User.ID }}/permissions"
|
||||
>
|
||||
<i class="bi-key me-1"></i>
|
||||
Permissions
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-danger"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-delete"
|
||||
>
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cet utilisateur ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-secondary"
|
||||
data-bs-dismiss="modal"
|
||||
>
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<div id="modal-delete" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p>Êtes-vous sûr de vouloir supprimer cet utilisateur ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
|
||||
<i class="bi-x-lg me-1"></i>
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form action="/admin/users/{{ User.ID }}/delete" method="post" class="d-inline p-0">
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form
|
||||
action="/admin/users/{{ User.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-outline-danger" type="submit">
|
||||
<i class="bi-trash3 me-1"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,139 +1,131 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/users">Utilisateurs</a></li>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/users">Utilisateurs</a>
|
||||
</li>
|
||||
|
||||
{% if User.ID %}
|
||||
<li class="breadcrumb-item"><a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a></li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
{% if User.ID %}
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="user" method="post">
|
||||
<form id="user" method="post">
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2"> Nom complet </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ User.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="name" class="form-label col-md-2">
|
||||
Nom complet
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ User.Name }}"
|
||||
autocomplete="off"
|
||||
autofocus
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="form-label col-md-2"> Email </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
value="{{ User.Email }}"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="form-label col-md-2">
|
||||
Email
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
value="{{ User.Email }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="is_admin"
|
||||
name="is_admin"
|
||||
autocomplete="off"
|
||||
{% if User.IsAdmin %}
|
||||
checked
|
||||
{% endif %}
|
||||
/>
|
||||
<label for="is_admin" class="form-label"> Administrateur </label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="is_admin"
|
||||
name="is_admin"
|
||||
autocomplete="off"
|
||||
{% if User.IsAdmin %}
|
||||
checked
|
||||
{% endif %}
|
||||
>
|
||||
<label for="is_admin" class="form-label">
|
||||
Administrateur
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="form-label col-md-2"> Mot de passe </label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
autocomplete="off"
|
||||
{% if !User.ID %}required{% endif %}
|
||||
/>
|
||||
{% if User.ID %}
|
||||
<div class="form-text">Laisser vide pour ne pas changer</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="form-label col-md-2">
|
||||
Mot de passe
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
autocomplete="off"
|
||||
{% if !User.ID %}required{% endif %}
|
||||
>
|
||||
{% if User.ID %}
|
||||
<div class="form-text">
|
||||
Laisser vide pour ne pas changer
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% if User.ID %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="reset_totp"
|
||||
name="reset_totp"
|
||||
autocomplete="off"
|
||||
/>
|
||||
<label for="reset_totp" class="form-label">
|
||||
Réinitialiser le double facteur (TOTP)
|
||||
</label>
|
||||
<div class="form-text">
|
||||
Si la case est cochée, l'utilisateur devra effectuer un enrôlement
|
||||
TOTP à la prochaine connexion.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if User.ID %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10 offset-md-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="reset_totp"
|
||||
name="reset_totp"
|
||||
autocomplete="off"
|
||||
>
|
||||
<label for="reset_totp" class="form-label">
|
||||
Réinitialiser le double facteur (TOTP)
|
||||
</label>
|
||||
<div class="form-text">
|
||||
Si la case est cochée, l'utilisateur devra effectuer
|
||||
un enrôlement TOTP à la prochaine connexion.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,81 +1,78 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/users">Utilisateurs</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a></li>
|
||||
<li class="breadcrumb-item active">Permissions</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/users">Utilisateurs</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Permissions</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if Sections %}
|
||||
<form id="user" method="post">
|
||||
{% if Sections %}
|
||||
<form id="user" method="post">
|
||||
{% for Section in Sections %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">{{ Section.Name }}</div>
|
||||
<div class="col-md-10">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-key"></i>
|
||||
</span>
|
||||
<select
|
||||
class="form-select"
|
||||
name="section-{{ Section.ID }}"
|
||||
id="section-{{ Section.ID }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
<option value="0">Choisir...</option>
|
||||
{% for Role in Roles %}
|
||||
<option
|
||||
value="{{ Role.ID }}"
|
||||
{% for UserRole in UserRoles %}
|
||||
{% if Section.ID == UserRole.SectionID and Role.ID == UserRole.RoleID %}
|
||||
selected
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{{ Role.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% for Section in Sections %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
{{ Section.Name }}
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
<i class="bi-key"></i>
|
||||
</span>
|
||||
<select
|
||||
class="form-select"
|
||||
name="section-{{ Section.ID }}"
|
||||
id="section-{{ Section.ID }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
<option value="0">Choisir...</option>
|
||||
{% for Role in Roles %}
|
||||
<option
|
||||
value="{{ Role.ID }}"
|
||||
|
||||
{% for UserRole in UserRoles %}
|
||||
{% if Section.ID == UserRole.SectionID and Role.ID == UserRole.RoleID %}
|
||||
selected
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{{ Role.Name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{% else %}
|
||||
<div class="my-4">
|
||||
Pas de section pour le moment
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
<div class="my-4">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{% else %}
|
||||
<div class="my-4">Pas de section pour le moment</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
113
views/users.html
113
views/users.html
|
|
@ -1,66 +1,59 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Utilisateurs</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Utilisateurs</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/users/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
<div class="my-3 text-end">
|
||||
<a class="btn btn-outline-primary" href="/admin/users/add">
|
||||
<i class="bi-plus-lg"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if Users %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Nom complet</th>
|
||||
<th class="w-25">Email</th>
|
||||
<th class="w-25">Administrateur</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for User in Users %}
|
||||
<tr>
|
||||
<td>
|
||||
<span class="user-photo me-2">{{ User.Name|first }}</span>
|
||||
<a href="/admin/users/{{ User.ID }}">
|
||||
{{ User.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{{ User.Email }}
|
||||
</td>
|
||||
<td>
|
||||
{% if User.IsAdmin %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">
|
||||
Pas d'utilisateurs pour le moment
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% if Users %}
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-50">Nom complet</th>
|
||||
<th class="w-25">Email</th>
|
||||
<th class="w-25">Administrateur</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for User in Users %}
|
||||
<tr>
|
||||
<td>
|
||||
<span class="user-photo me-2">{{ User.Name|first }}</span>
|
||||
<a href="/admin/users/{{ User.ID }}"> {{ User.Name }} </a>
|
||||
</td>
|
||||
<td>{{ User.Email }}</td>
|
||||
<td>
|
||||
{% if User.IsAdmin %}
|
||||
<i class="bi-check-lg text-success me-1"></i>
|
||||
Oui
|
||||
{% else %}
|
||||
<i class="bi-x-lg text-danger me-1"></i>
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="my-4">Pas d'utilisateurs pour le moment</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,99 +1,92 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Paramètres du compte
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if FormErrors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
{% for error in FormErrors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="container">
|
||||
<div id="login-card" class="my-5">
|
||||
<div class="card">
|
||||
<div class="card-header">Paramètres du compte</div>
|
||||
<div class="card-body">
|
||||
{% if FormErrors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
{% for error in FormErrors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">
|
||||
Adresse email
|
||||
</label>
|
||||
{% if EmailUpdate %}
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
value="{{ Email }}"
|
||||
autofocus
|
||||
>
|
||||
{% else %}
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="email"
|
||||
disabled
|
||||
value="{{ Email }}"
|
||||
>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">
|
||||
Nom complet
|
||||
</label>
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Name }}"
|
||||
|
||||
{% if !EmailUpdate %}
|
||||
autofocus
|
||||
{% endif %}
|
||||
>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">
|
||||
Nouveau mot de passe
|
||||
</label>
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password-verify" class="form-label">
|
||||
Vérifier le mot de passe
|
||||
</label>
|
||||
<input
|
||||
id="password-verify"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password-verify"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form id="login" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label"> Adresse email </label>
|
||||
{% if EmailUpdate %}
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
name="email"
|
||||
required
|
||||
value="{{ Email }}"
|
||||
autofocus
|
||||
/>
|
||||
{% else %}
|
||||
<input
|
||||
id="email"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="email"
|
||||
disabled
|
||||
value="{{ Email }}"
|
||||
/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label"> Nom complet </label>
|
||||
<input
|
||||
id="name"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="name"
|
||||
required
|
||||
value="{{ Name }}"
|
||||
{% if !EmailUpdate %}
|
||||
autofocus
|
||||
{% endif %}
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">
|
||||
Nouveau mot de passe
|
||||
</label>
|
||||
<input
|
||||
id="password"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password-verify" class="form-label">
|
||||
Vérifier le mot de passe
|
||||
</label>
|
||||
<input
|
||||
id="password-verify"
|
||||
class="form-control"
|
||||
type="password"
|
||||
name="password-verify"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-primary" type="submit">
|
||||
<i class="me-1 bi-floppy"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue