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