Prettier templates

This commit is contained in:
William Bouzourène 2025-05-11 16:44:40 +02:00
parent d98268d9d6
commit 7b1cb83742
Signed by: bouzoure
SSH key fingerprint: SHA256:19MbXpLua4rUtk8tunMesD8KUKb91LXLHg8E/qTooww
33 changed files with 4207 additions and 4374 deletions

View file

@ -1,122 +1,112 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Gérer mon compte utilisateur</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Gérer mon compte utilisateur</li>
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="account" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="name" class="col-md-2 form-label">
Nom complet
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ User.Name }}"
autofocus
autocomplete="off"
>
</div>
</div>
<form id="account" method="post">
<div class="row mb-3">
<label for="name" class="col-md-2 form-label"> Nom complet </label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ User.Name }}"
autofocus
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<label for="email" class="col-md-2 form-label">
Email
</label>
<div class="col-md-10">
<input
id="email"
class="form-control"
type="email"
name="email"
required
value="{{ User.Email }}"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="email" class="col-md-2 form-label"> Email </label>
<div class="col-md-10">
<input
id="email"
class="form-control"
type="email"
name="email"
required
value="{{ User.Email }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<label for="password" class="col-md-2 form-label">
Mot de passe
</label>
<div class="col-md-10">
<input
id="password"
class="form-control"
type="password"
name="password"
autocomplete="off"
>
<div class="form-text">
Laisser vide pour ne pas changer
</div>
</div>
</div>
<div class="row mb-3">
<label for="password" class="col-md-2 form-label"> Mot de passe </label>
<div class="col-md-10">
<input
id="password"
class="form-control"
type="password"
name="password"
autocomplete="off"
/>
<div class="form-text">Laisser vide pour ne pas changer</div>
</div>
</div>
<div class="row mb-3">
<label for="password" class="col-md-2 form-label">
Confirmer le mot de passe
</label>
<div class="col-md-10">
<input
id="password-verify"
class="form-control"
type="password"
name="password-verify"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="password" class="col-md-2 form-label">
Confirmer le mot de passe
</label>
<div class="col-md-10">
<input
id="password-verify"
class="form-control"
type="password"
name="password-verify"
autocomplete="off"
/>
</div>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}
{% block javascript %}
<script>
$(document).ready(function() {
$("#password").on("input", function() {
var enable = false;
if ($(this).val().length > 0) {
enable = true;
}
<script>
$(document).ready(function () {
$("#password").on("input", function () {
var enable = false;
if ($(this).val().length > 0) {
enable = true;
}
$("#password-verify").prop("disabled", !enable);
$("#password-verify").prop("required", enable);
});
$("#password-verify").prop("disabled", !enable);
$("#password-verify").prop("required", enable);
});
$("#password").trigger("input");
});
</script>
{% endblock %}
$("#password").trigger("input");
});
</script>
{% endblock %}

View file

@ -1,44 +1,42 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Gérer multifacteur (TOTP)</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Gérer multifacteur (TOTP)</li>
</ol>
</nav>
<hr />
</div>
<form id="account" method="post">
<form id="account" method="post">
<div class="mb-3">
<input
type="checkbox"
class="form-check-input me-2"
id="reset_totp"
name="reset_totp"
autocomplete="off"
required
/>
<label for="reset_totp" class="form-label">
Réinitialiser le double facteur (TOTP)
</label>
<div class="form-text">
Si la case est cochée, vous devrez effectuer un nouvel enrôlement
TOTP.
</div>
</div>
<div class="mb-3">
<input
type="checkbox"
class="form-check-input me-2"
id="reset_totp"
name="reset_totp"
autocomplete="off"
required
>
<label for="reset_totp" class="form-label">
Réinitialiser le double facteur (TOTP)
</label>
<div class="form-text">
Si la case est cochée, vous devrez effectuer
un nouvel enrôlement TOTP.
</div>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,58 +1,58 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Administration</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Administration</li>
</ol>
</nav>
<hr />
</div>
<div class="row">
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/sections">
<div class="alert alert-primary">
<i class="bi-building me-2"></i>
Gestion des sections
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/lists">
<div class="alert alert-primary">
<i class="bi-list-check me-2"></i>
Gestion des listes
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/fields">
<div class="alert alert-primary">
<i class="bi-database-add me-2"></i>
Gestion des champs supplémentaires
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/users">
<div class="alert alert-primary">
<i class="bi-person-square me-2"></i>
Gestion des utilisateurs
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/roles">
<div class="alert alert-primary">
<i class="bi-briefcase me-2"></i>
Gestion des rôles
</div>
</a>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/sections">
<div class="alert alert-primary">
<i class="bi-building me-2"></i>
Gestion des sections
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/lists">
<div class="alert alert-primary">
<i class="bi-list-check me-2"></i>
Gestion des listes
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/fields">
<div class="alert alert-primary">
<i class="bi-database-add me-2"></i>
Gestion des champs supplémentaires
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/users">
<div class="alert alert-primary">
<i class="bi-person-square me-2"></i>
Gestion des utilisateurs
</div>
</a>
</div>
<div class="col-md-6">
<a class="dashboard-tile" href="/admin/roles">
<div class="alert alert-primary">
<i class="bi-briefcase me-2"></i>
Gestion des rôles
</div>
</a>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,8 +1,8 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container text-center py-5">
<div class="h1 mb-3">Erreur {{ Code }}</div>
<code>{{ Message }}</code>
</div>
<div class="container text-center py-5">
<div class="h1 mb-3">Erreur {{ Code }}</div>
<code>{{ Message }}</code>
</div>
{% endblock %}

View file

@ -1,146 +1,150 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/fields">Champs supplémentaires</a></li>
<li class="breadcrumb-item active">{{ Field.Name }}</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/fields">Champs supplémentaires</a>
</li>
<li class="breadcrumb-item active">{{ Field.Name }}</li>
</ol>
</nav>
<hr />
</div>
<div class="row mb-3">
<div class="col-md-2">
Nom du champ
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ Field.Name }}"
disabled
readonly
>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Nom du champ</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ Field.Name }}"
disabled
readonly
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Population
</div>
<div class="col-md-10">
{% for Key, Value in PersonTypes %}
{% if Key == Field.PersonType %}
<input
type="text"
class="form-control"
value="{{ Value }}"
disabled
readonly
>
{% endif %}
{% endfor %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Population</div>
<div class="col-md-10">
{% for Key, Value in PersonTypes %}
{% if Key == Field.PersonType %}
<input
type="text"
class="form-control"
value="{{ Value }}"
disabled
readonly
/>
{% endif %}
{% endfor %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Type de champ
</div>
<div class="col-md-10">
{% for Key, Value in FieldTypes %}
{% if Key == Field.FieldType %}
<input
type="text"
class="form-control"
value="{{ Value }}"
disabled
readonly
>
{% endif %}
{% endfor %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Type de champ</div>
<div class="col-md-10">
{% for Key, Value in FieldTypes %}
{% if Key == Field.FieldType %}
<input
type="text"
class="form-control"
value="{{ Value }}"
disabled
readonly
/>
{% endif %}
{% endfor %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Liste
</div>
<div class="col-md-10">
{% if Field.ListID %}
<div class="input-group">
<input
type="text"
class="form-control"
value="{{ Field.List.Name }}"
readonly
disabled
>
<span class="input-group-text">
<a href="/admin/lists/{{ Field.List.ID }}">
Afficher
<i class="bi-box-arrow-up-right ms-1"></i>
</a>
</span>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Liste</div>
<div class="col-md-10">
{% if Field.ListID %}
<div class="input-group">
<input
type="text"
class="form-control"
value="{{ Field.List.Name }}"
readonly
disabled
/>
<span class="input-group-text">
<a href="/admin/lists/{{ Field.List.ID }}">
Afficher
<i class="bi-box-arrow-up-right ms-1"></i>
</a>
</span>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% endif %}
</div>
</div>
<div class="row my-4">
<div class="col-6">
<a class="btn btn-outline-primary" href="/admin/fields/{{ Field.ID }}/edit">
<i class="bi-pencil-square"></i>
Modifier
</a>
</div>
<div class="col-6 text-end">
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
<div class="row my-4">
<div class="col-6">
<a
class="btn btn-outline-primary"
href="/admin/fields/{{ Field.ID }}/edit"
>
<i class="bi-pencil-square"></i>
Modifier
</a>
</div>
<div class="col-6 text-end">
<button
type="button"
class="btn btn-outline-danger"
data-bs-toggle="modal"
data-bs-target="#modal-delete"
>
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
</div>
</div>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer ce champ ?</p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-outline-secondary"
data-bs-dismiss="modal"
>
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer ce champ ?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<form action="/admin/fields/{{ Field.ID }}/delete" method="post" class="d-inline p-0">
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
<form
action="/admin/fields/{{ Field.ID }}/delete"
method="post"
class="d-inline p-0"
>
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,148 +1,142 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/fields">Champs supplémentaires</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/fields">Champs supplémentaires</a>
</li>
{% if Field.ID %}
<li class="breadcrumb-item">
<a href="/admin/fields/{{ Field.ID }}">{{ Field.Name }}</a>
</li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if Field.ID %}
<li class="breadcrumb-item">
<a href="/admin/fields/{{ Field.ID }}">{{ Field.Name }}</a>
</li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="field" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="name" class="form-label col-md-2">
Nom du champ
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Field.Name }}"
autocomplete="off"
autofocus
>
</div>
</div>
<form id="field" method="post">
<div class="row mb-3">
<label for="name" class="form-label col-md-2"> Nom du champ </label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Field.Name }}"
autocomplete="off"
autofocus
/>
</div>
</div>
{% if !Field.ID %}
<div class="row mb-3">
<label for="person_type" class="form-label col-md-2">
Population
</label>
<div class="col-md-10">
<select
name="person_type"
id="person_type"
class="form-select"
autocomplete="off"
required
>
<option value="member">Membre</option>
<option value="contact">Contact</option>
</select>
</div>
</div>
{% if !Field.ID %}
<div class="row mb-3">
<label for="person_type" class="form-label col-md-2">
Population
</label>
<div class="col-md-10">
<select
name="person_type"
id="person_type"
class="form-select"
autocomplete="off"
required
>
<option value="member">Membre</option>
<option value="contact">Contact</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="field_type" class="form-label col-md-2">
Type de champ
</label>
<div class="col-md-10">
<select
name="field_type"
id="field_type"
class="form-select"
autocomplete="off"
required
>
<option value="text">Texte</option>
<option value="longtext">Texte multiligne</option>
<option value="number">Nombre</option>
<option value="date">Date</option>
<option value="list">Liste</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="field_type" class="form-label col-md-2">
Type de champ
</label>
<div class="col-md-10">
<select
name="field_type"
id="field_type"
class="form-select"
autocomplete="off"
required
>
<option value="text">Texte</option>
<option value="longtext">Texte multiligne</option>
<option value="number">Nombre</option>
<option value="date">Date</option>
<option value="list">Liste</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="list" class="form-label col-md-2">
Liste
</label>
<div class="col-md-10">
<select
name="list"
id="list"
class="form-select"
autocomplete="off"
required
>
{% for List in Lists %}
<option value="{{ List.ID }}">
{{ List.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
{% endif %}
<div class="row mb-3">
<label for="list" class="form-label col-md-2"> Liste </label>
<div class="col-md-10">
<select
name="list"
id="list"
class="form-select"
autocomplete="off"
required
>
{% for List in Lists %}
<option value="{{ List.ID }}">{{ List.Name }}</option>
{% endfor %}
</select>
</div>
</div>
{% endif %}
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}
{% block javascript %}
<script>
$(document).ready(function() {
$("#field_type").on("change", function() {
var enable = false;
if ($(this).val() == "list") {
enable = true;
<script>
$(document).ready(function () {
$("#field_type").on("change", function () {
var enable = false;
if ($(this).val() == "list") {
enable = true;
$("#list-disabled").remove();
} else {
$("#list").append("<option id=\"list-disabled\" selected></option>");
}
$("#list-disabled").remove();
} else {
$("#list").append('<option id="list-disabled" selected></option>');
}
$("#list").prop("disabled", !enable);
$("#list").prop("required", enable);
});
$("#list").prop("disabled", !enable);
$("#list").prop("required", enable);
});
$("#field_type").trigger("change");
});
</script>
{% endblock %}
$("#field_type").trigger("change");
});
</script>
{% endblock %}

View file

@ -1,114 +1,121 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Champs supplémentaires</li>
</ol>
</nav>
<hr>
</div>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Champs supplémentaires</li>
</ol>
</nav>
<hr />
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/fields/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/fields/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
<div class="h4 my-2">Membres</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Nom</th>
<th class="w-25">Type de champ</th>
<th class="w-25"></th>
</tr>
</thead>
<tbody>
{% for Field in Fields %}
{% if Field.PersonType == "member" %}
<tr>
<td>
<a href="/admin/fields/{{ Field.ID }}">
{{ Field.Name }}
</a>
</td>
<td>
{% for Key, Value in FieldTypes %}
{% if Key == Field.FieldType %}
{{ Value }}
{% endif %}
{% endfor %}
</td>
<td class="text-end">
<div class="btn-group">
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-up">
<i class="bi-arrow-up me-1"></i>
Monter
</a>
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-down">
<i class="bi-arrow-down me-1"></i>
Descendre
</a>
</div>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
<div class="h4 my-2">Membres</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Nom</th>
<th class="w-25">Type de champ</th>
<th class="w-25"></th>
</tr>
</thead>
<tbody>
{% for Field in Fields %}
{% if Field.PersonType == "member" %}
<tr>
<td>
<a href="/admin/fields/{{ Field.ID }}"> {{ Field.Name }} </a>
</td>
<td>
{% for Key, Value in FieldTypes %}
{% if Key == Field.FieldType %}
{{ Value }}
{% endif %}
{% endfor %}
</td>
<td class="text-end">
<div class="btn-group">
<a
class="btn btn-sm btn-outline-primary"
href="/admin/fields/{{ Field.ID }}/move-up"
>
<i class="bi-arrow-up me-1"></i>
Monter
</a>
<a
class="btn btn-sm btn-outline-primary"
href="/admin/fields/{{ Field.ID }}/move-down"
>
<i class="bi-arrow-down me-1"></i>
Descendre
</a>
</div>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
<div class="h4 my-2">Contacts</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Nom</th>
<th class="w-25">Type de champ</th>
<th class="w-25"></th>
</tr>
</thead>
<tbody>
{% for Field in Fields %}
{% if Field.PersonType == "contact" %}
<tr>
<td>
<a href="/admin/fields/{{ Field.ID }}">
{{ Field.Name }}
</a>
</td>
<td>
{% for Key, Value in FieldTypes %}
{% if Key == Field.FieldType %}
{{ Value }}
{% endif %}
{% endfor %}
</td>
<td class="text-end">
<div class="btn-group">
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-up">
<i class="bi-arrow-up me-1"></i>
Monter
</a>
<a class="btn btn-sm btn-outline-primary" href="/admin/fields/{{ Field.ID }}/move-down">
<i class="bi-arrow-down me-1"></i>
Descendre
</a>
</div>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="h4 my-2">Contacts</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Nom</th>
<th class="w-25">Type de champ</th>
<th class="w-25"></th>
</tr>
</thead>
<tbody>
{% for Field in Fields %}
{% if Field.PersonType == "contact" %}
<tr>
<td>
<a href="/admin/fields/{{ Field.ID }}"> {{ Field.Name }} </a>
</td>
<td>
{% for Key, Value in FieldTypes %}
{% if Key == Field.FieldType %}
{{ Value }}
{% endif %}
{% endfor %}
</td>
<td class="text-end">
<div class="btn-group">
<a
class="btn btn-sm btn-outline-primary"
href="/admin/fields/{{ Field.ID }}/move-up"
>
<i class="bi-arrow-up me-1"></i>
Monter
</a>
<a
class="btn btn-sm btn-outline-primary"
href="/admin/fields/{{ Field.ID }}/move-down"
>
<i class="bi-arrow-down me-1"></i>
Descendre
</a>
</div>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,50 +1,49 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item active">Accueil</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item active">Accueil</li>
</ol>
</nav>
<hr />
</div>
<div class="row">
<div class="row">
{% if Globals.AllowMembersPage %}
<div class="col-md-6">
<a class="dashboard-tile" href="/members">
<div class="alert alert-primary">
<i class="bi-people me-2"></i>
Gestion des membres
</div>
</a>
</div>
{% endif %}
{% if Globals.AllowMembersPage %}
<div class="col-md-6">
<a class="dashboard-tile" href="/members">
<div class="alert alert-primary">
<i class="bi-people me-2"></i>
Gestion des membres
</div>
</a>
</div>
{% endif %}
{% if Globals.AllowContactsPage %}
<div class="col-md-6">
<a class="dashboard-tile" href="/contacts">
<div class="alert alert-primary">
<i class="bi-telephone me-2"></i>
Gestion des contacts
</div>
</a>
</div>
{% endif %}
{% if Globals.AllowContactsPage %}
<div class="col-md-6">
<a class="dashboard-tile" href="/contacts">
<div class="alert alert-primary">
<i class="bi-telephone me-2"></i>
Gestion des contacts
</div>
</a>
</div>
{% endif %}
{% if Globals.UserIsAdmin %}
<div class="col-md-6">
<a class="dashboard-tile" href="/admin">
<div class="alert alert-primary">
<i class="bi-gear me-2"></i>
Administration de l'application
</div>
</a>
</div>
{% endif %}
</div>
</div>
{% if Globals.UserIsAdmin %}
<div class="col-md-6">
<a class="dashboard-tile" href="/admin">
<div class="alert alert-primary">
<i class="bi-gear me-2"></i>
Administration de l'application
</div>
</a>
</div>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -1,68 +1,72 @@
<!doctype html>
<html lang="fr" class="h-100" data-bs-theme="{{ Globals.ColorMode }}">
{% include "partials/easter_egg.html" %}
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% include "partials/easter_egg.html" %}
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{% set PageTitleSuffix = "Camarades | POP Vaud" %}
{% if PageTitle %}
<title>{{ PageTitle }} | {{ PageTitleSuffix }}</title>
{% else %}
<title>{{ PageTitleSuffix }}</title>
{% endif %}
<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 %}
{% set PageTitleSuffix = "Camarades | POP Vaud" %}
{% if PageTitle %}
<title>{{ PageTitle }} | {{ PageTitleSuffix }}</title>
{% else %}
<title>{{ PageTitleSuffix }}</title>
{% endif %}
{% block main %}{% endblock %}
{% endblock %}
</main>
<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 %}
<footer class="footer mt-auto py-2 bg-body-tertiary">
<div class="container">
<span class="text-body-secondary">
<a
class="text-body-secondary me-2"
target="_blank"
href="https://git.readonly.ch/bouzoure/pop-camarades"
>
<i class="bi-code-slash"></i>
Code source
</a>
<a
class="text-body-secondary"
target="_blank"
href="/licences"
>
<i class="bi-journal-bookmark"></i>
Licences
</a>
</span>
{% block main %}
{% endblock %}
{% endblock %}
</main>
<div class="float-end">
<span class="text-body-secondary">
<i class="bi-stopwatch me-1"></i>
{{ Globals.TimeStart | time_diff }}
<span>ms</span>
</span>
</div>
</div>
</footer>
<footer class="footer mt-auto py-2 bg-body-tertiary">
<div class="container">
<span class="text-body-secondary">
<a
class="text-body-secondary me-2"
target="_blank"
href="https://git.readonly.ch/bouzoure/pop-camarades"
>
<i class="bi-code-slash"></i>
Code source
</a>
<a class="text-body-secondary" target="_blank" href="/licenses">
<i class="bi-journal-bookmark"></i>
Licences
</a>
</span>
<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>
<div class="float-end">
<span class="text-body-secondary">
<i class="bi-stopwatch me-1"></i>
{{ Globals.TimeStart | time_diff }}
<span>ms</span>
</span>
</div>
</div>
</footer>
<script src="/static/jquery/jquery.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="/static/functions.js"></script>
{% block javascript %}{% endblock %}
</body>
</html>

View file

@ -1,20 +1,18 @@
{% extends "layouts/main.html" %}
{% block main %}
<div id="licenses" class="container-fluid p-3">
{{ Markdown|safe }}
</div>
<div id="licenses" class="container-fluid p-3">{{ Markdown|safe }}</div>
{% endblock %}
{% block stylesheet %}
<style>
#licenses h2 {
font-weight: bold;
margin: 15px 0;
}
<style>
#licenses h2 {
font-weight: bold;
margin: 15px 0;
}
#licenses p {
margin: 0;
}
</style>
#licenses p {
margin: 0;
}
</style>
{% endblock %}

View file

@ -1,186 +1,198 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
<li class="breadcrumb-item active">{{ List.Name }}</li>
</ol>
</nav>
<hr>
</div>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
<li class="breadcrumb-item active">{{ List.Name }}</li>
</ol>
</nav>
<hr />
</div>
<div class="row mb-3">
<div class="col-md-2">
Nom
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ List.Name }}"
disabled
readonly
>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Nom</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ List.Name }}"
disabled
readonly
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Liste à choix multiples
</div>
<div class="col-md-10">
{% if List.Multi %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input
type="text"
class="form-control"
value="Oui"
disabled
>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Liste à choix multiples</div>
<div class="col-md-10">
{% if List.Multi %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input type="text" class="form-control" value="Oui" disabled />
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% endif %}
</div>
</div>
<div class="my-4 row">
<div class="col-6">
<a class="btn btn-outline-primary" href="/admin/lists/{{ List.ID }}/edit">
<i class="bi-pencil-square"></i>
Modifier
</a>
</div>
<div class="col-6 text-end">
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
<div class="my-4 row">
<div class="col-6">
<a
class="btn btn-outline-primary"
href="/admin/lists/{{ List.ID }}/edit"
>
<i class="bi-pencil-square"></i>
Modifier
</a>
</div>
<div class="col-6 text-end">
<button
type="button"
class="btn btn-outline-danger"
data-bs-toggle="modal"
data-bs-target="#modal-delete"
>
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
<div class="my-3 row">
<div class="col-sm-9 h4">
Contenu de la liste
</div>
<div class="col-sm-3 text-end">
<a class="btn btn-outline-primary" href="/admin/lists/{{ List.ID }}/items/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
</div>
<div class="my-3 row">
<div class="col-sm-9 h4">Contenu de la liste</div>
<div class="col-sm-3 text-end">
<a
class="btn btn-outline-primary"
href="/admin/lists/{{ List.ID }}/items/add"
>
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
</div>
{% if ListItems %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Valeur</th>
<th class="w-25">Par défaut</th>
<th class="w-25"></th>
</tr>
</thead>
<tbody>
{% for Item in ListItems %}
<tr>
<td>
<a href="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}">
{{ Item.Value }}
</a>
</td>
<td>
{% if Item.Default %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
<td class="text-end">
<button type="button" class="btn btn-outline-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modal-delete-value-{{ Item.ID }}">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div>
Pas encore d'éléments dans cette liste.
</div>
{% endif %}
{% if ListItems %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Valeur</th>
<th class="w-25">Par défaut</th>
<th class="w-25"></th>
</tr>
</thead>
<tbody>
{% for Item in ListItems %}
<tr>
<td>
<a href="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}">
{{ Item.Value }}
</a>
</td>
<td>
{% if Item.Default %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
<td class="text-end">
<button
type="button"
class="btn btn-outline-danger btn-sm"
data-bs-toggle="modal"
data-bs-target="#modal-delete-value-{{ Item.ID }}"
>
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div>Pas encore d'éléments dans cette liste.</div>
{% endif %}
</div>
</div>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cette liste ?</p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-outline-secondary"
data-bs-dismiss="modal"
>
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cette liste ?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<form
action="/admin/lists/{{ List.ID }}/delete"
method="post"
class="d-inline p-0"
>
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
<form action="/admin/lists/{{ List.ID }}/delete" method="post" class="d-inline p-0">
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
{% for Item in ListItems %}
<div id="modal-delete-value-{{ Item.ID }}" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cette valeur ?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<form action="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}/delete" method="post" class="d-inline p-0">
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
{% endfor %}
{% for Item in ListItems %}
<div id="modal-delete-value-{{ Item.ID }}" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cette valeur ?</p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-outline-secondary"
data-bs-dismiss="modal"
>
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<form
action="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}/delete"
method="post"
class="d-inline p-0"
>
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
{% endfor %}
{% endblock %}

View file

@ -1,78 +1,76 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
{% if List.ID %}
<li class="breadcrumb-item"><a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a></li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if List.ID %}
<li class="breadcrumb-item">
<a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a>
</li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="list" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="name" class="form-label col-md-2">
Nom
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ List.Name }}"
autocomplete="off"
autofocus
>
</div>
</div>
<form id="list" method="post">
<div class="row mb-3">
<label for="name" class="form-label col-md-2"> Nom </label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ List.Name }}"
autocomplete="off"
autofocus
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="multi"
name="multi"
{% if List.Multi %}checked{% endif %}
autocomplete="off"
>
<label for="multi" class="form-label">
Liste à choix multiples
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="multi"
name="multi"
{% if List.Multi %}checked{% endif %}
autocomplete="off"
/>
<label for="multi" class="form-label">
Liste à choix multiples
</label>
</div>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,80 +1,78 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
<li class="breadcrumb-item"><a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
<li class="breadcrumb-item">
<a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a>
</li>
{% if ListItem.ID %}
<li class="breadcrumb-item active">Modifier élément</li>
{% else %}
<li class="breadcrumb-item active">Ajouter élément</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if ListItem.ID %}
<li class="breadcrumb-item active">Modifier élément</li>
{% else %}
<li class="breadcrumb-item active">Ajouter élément</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="listitem" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="value" class="form-label col-md-2">
Valeur
</label>
<div class="col-md-10">
<input
id="value"
class="form-control"
type="text"
name="value"
required
value="{{ ListItem.Value }}"
autocomplete="off"
autofocus
>
</div>
</div>
<form id="listitem" method="post">
<div class="row mb-3">
<label for="value" class="form-label col-md-2"> Valeur </label>
<div class="col-md-10">
<input
id="value"
class="form-control"
type="text"
name="value"
required
value="{{ ListItem.Value }}"
autocomplete="off"
autofocus
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="default"
name="default"
autocomplete="off"
{% if ListItem.Default %}
checked
{% endif %}
>
<label for="default" class="form-label">
Valeur sélectionnée par défaut
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="default"
name="default"
autocomplete="off"
{% if ListItem.Default %}
checked
{% endif %}
/>
<label for="default" class="form-label">
Valeur sélectionnée par défaut
</label>
</div>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,61 +1,56 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Listes</li>
</ol>
</nav>
<hr>
</div>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Listes</li>
</ol>
</nav>
<hr />
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/lists/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/lists/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
{% if Lists %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-75">Nom</th>
<th class="w-25">Choix multiples</th>
</tr>
</thead>
<tbody>
{% for List in Lists %}
<tr>
<td>
<a href="/admin/lists/{{ List.ID }}">
{{ List.Name }}
</a>
</td>
<td>
{% if List.Multi %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">
Pas de liste pour le moment
</div>
{% endif %}
</div>
{% if Lists %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-75">Nom</th>
<th class="w-25">Choix multiples</th>
</tr>
</thead>
<tbody>
{% for List in Lists %}
<tr>
<td>
<a href="/admin/lists/{{ List.ID }}"> {{ List.Name }} </a>
</td>
<td>
{% if List.Multi %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">Pas de liste pour le moment</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,65 +1,57 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">
Authentification
</div>
<div class="card-body">
{% if LoginError %}
<div class="alert alert-danger">
{{ LoginError }}
</div>
{% endif %}
<form id="login" method="post">
<div class="mb-3">
<label for="email" class="form-label">
Adresse email
</label>
<input
id="email"
class="form-control"
type="email"
name="email"
required
autofocus
>
</div>
<div class="mb-3">
<label for="password" class="form-label">
Mot de passe
</label>
<input
id="password"
class="form-control"
type="password"
name="password"
required
>
</div>
<div class="mb-3">
<input
type="checkbox"
class="form-check-input me-2"
id="save_session"
name="save_session"
>
<label for="save_session" class="form-label">
Se souvenir de moi
</label>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-box-arrow-in-right"></i>
Connexion
</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">Authentification</div>
<div class="card-body">
{% if LoginError %}
<div class="alert alert-danger">{{ LoginError }}</div>
{% endif %}
<form id="login" method="post">
<div class="mb-3">
<label for="email" class="form-label"> Adresse email </label>
<input
id="email"
class="form-control"
type="email"
name="email"
required
autofocus
/>
</div>
<div class="mb-3">
<label for="password" class="form-label"> Mot de passe </label>
<input
id="password"
class="form-control"
type="password"
name="password"
required
/>
</div>
<div class="mb-3">
<input
type="checkbox"
class="form-check-input me-2"
id="save_session"
name="save_session"
/>
<label for="save_session" class="form-label">
Se souvenir de moi
</label>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-box-arrow-in-right"></i>
Connexion
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -12,4 +12,4 @@
🟥🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
-------- FREE PALESTINE --------
-->
-->

View file

@ -1,143 +1,141 @@
<nav class="navbar navbar-expand-lg bg-danger" data-bs-theme="dark">
<div class="container-fluid">
<a href="/" class="navbar-brand">
<img
id="header-logo"
class="me-1"
src="/static/images/logo.png"
alt="Logo"
>
</a>
<div class="container-fluid">
<a href="/" class="navbar-brand">
<img
id="header-logo"
class="me-1"
src="/static/images/logo.png"
alt="Logo"
/>
</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbar-content"
>
<span class="navbar-toggler-icon"></span>
</button>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbar-content"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar-content">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<div class="collapse navbar-collapse" id="navbar-content">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
{% if Globals.TotpVerified %}
{% if Globals.TotpVerified %}
{% if Globals.AllowMembersPage %}
<li class="nav-item">
<a class="nav-link active" href="/members">
<i class="bi-people acti me-2"></i>Membres
</a>
</li>
{% endif %}
{% if Globals.AllowMembersPage %}
<li class="nav-item">
<a class="nav-link active" href="/members">
<i class="bi-people acti me-2"></i>Membres
</a>
</li>
{% endif %}
{% if Globals.AllowContactsPage %}
<li class="nav-item">
<a class="nav-link active" href="/contacts">
<i class="bi-telephone me-2"></i>Contacts
</a>
</li>
{% endif %}
{% if Globals.AllowContactsPage %}
<li class="nav-item">
<a class="nav-link active" href="/contacts">
<i class="bi-telephone me-2"></i>Contacts
</a>
</li>
{% endif %}
{% if Globals.UserIsAdmin %}
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item dropdown">
<a
class="nav-link active dropdown-toggle"
href="javascript:;"
role="button"
data-bs-toggle="dropdown"
>
<i class="bi-gear me-2"></i>Administration
</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="/admin/sections">
<i class="bi-building me-2"></i>Sections
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/lists">
<i class="bi-list-check me-2"></i>Listes
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/fields">
<i class="bi-database-add me-2"></i>Champs supplémentaires
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/users">
<i class="bi-person-square me-2"></i>Utilisateurs
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/roles">
<i class="bi-briefcase me-2"></i>Rôles
</a>
</li>
</ul>
</li>
</ul>
{% endif %}
{% endif %}
</ul>
<div class="d-flex">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<a
class="nav-link toggle-dark-mode active"
href="javascript:;"
data-bs-toggle="tooltip"
data-bs-title="Basculer entre le mode jour et le mode nuit"
data-bs-placement="bottom"
>
{% if Globals.ColorMode == "dark" %}
<i class="bi-sun"></i>
{% else %}
<i class="bi-moon"></i>
{% endif %}
</a>
{% if Globals.UserIsAdmin %}
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item dropdown">
<a
class="nav-link active dropdown-toggle"
href="javascript:;"
role="button"
data-bs-toggle="dropdown"
>
<i class="bi-gear me-2"></i>Administration
</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="/admin/sections">
<i class="bi-building me-2"></i>Sections
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/lists">
<i class="bi-list-check me-2"></i>Listes
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/fields">
<i class="bi-database-add me-2"></i>Champs supplémentaires
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/users">
<i class="bi-person-square me-2"></i>Utilisateurs
</a>
</li>
<li>
<a class="dropdown-item" href="/admin/roles">
<i class="bi-briefcase me-2"></i>Rôles
</a>
</li>
</ul>
</li>
</ul>
{% endif %}
{% endif %}
{% if Globals.LoggedIn %}
<li class="nav-item dropdown">
<a
class="nav-link active dropdown-toggle"
href="javascript:;"
role="button"
data-bs-toggle="dropdown"
>
<span class="user-photo me-2"
>{{ Globals.UserFullname|first }}</span
>{{ Globals.UserFullname }}
</a>
<ul class="dropdown-menu dropdown-menu-end">
{% if Globals.TotpVerified %}
<li>
<a class="dropdown-item" href="/account/manage">
<i class="bi-sliders me-2"></i>Gérer mon compte
</a>
</li>
<li>
<a class="dropdown-item" href="/account/totp">
<i class="bi-phone me-2"></i>Gérer multifacteur (TOTP)
</a>
</li>
<li>
<hr class="dropdown-divider" />
</li>
{% endif %}
</ul>
<div class="d-flex">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<a
class="nav-link toggle-dark-mode active"
href="javascript:;"
data-bs-toggle="tooltip"
data-bs-title="Basculer entre le mode jour et le mode nuit"
data-bs-placement="bottom"
>
{% if Globals.ColorMode == "dark" %}
<i class="bi-sun"></i>
{% else %}
<i class="bi-moon"></i>
{% endif %}
</a>
{% if Globals.LoggedIn %}
<li class="nav-item dropdown">
<a
class="nav-link active dropdown-toggle"
href="javascript:;"
role="button"
data-bs-toggle="dropdown"
>
<span class="user-photo me-2">{{ Globals.UserFullname|first }}</span>{{ Globals.UserFullname }}
</a>
<ul class="dropdown-menu dropdown-menu-end">
{% if Globals.TotpVerified %}
<li>
<a class="dropdown-item" href="/account/manage">
<i class="bi-sliders me-2"></i>Gérer mon compte
</a>
</li>
<li>
<a class="dropdown-item" href="/account/totp">
<i class="bi-phone me-2"></i>Gérer multifacteur (TOTP)
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
{% endif %}
<li>
<a class="dropdown-item" href="/logout">
<i class="bi-box-arrow-left me-2"></i>Déconnexion
</a>
</li>
</ul>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
<li>
<a class="dropdown-item" href="/logout">
<i class="bi-box-arrow-left me-2"></i>Déconnexion
</a>
</li>
</ul>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
</nav>

View file

@ -1,299 +1,373 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
{% if MembersPage %}
<li class="breadcrumb-item active">Membres</li>
{% else %}
<li class="breadcrumb-item active">Contacts</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if MembersPage %}
<li class="breadcrumb-item active">Membres</li>
{% else %}
<li class="breadcrumb-item active">Contacts</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
<div class="my-3 text-end">
{% if MembersPage %}
<div class="btn-group">
<a class="btn btn-outline-primary" href="/members/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
<a class="btn btn-outline-primary" href="/members/export?s={{ SearchJSON|urlencode }}">
<i class="bi-filetype-csv"></i>
Exporter
</a>
</div>
{% else %}
<div class="btn-group">
<a class="btn btn-outline-primary" href="/contacts/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
<a class="btn btn-outline-primary" href="/contacts/export?s={{ SearchJSON|urlencode }}">
<i class="bi-filetype-csv"></i>
Exporter
</a>
</div>
{% endif %}
</div>
<div class="my-3 text-end">
{% if MembersPage %}
<div class="btn-group">
<a class="btn btn-outline-primary" href="/members/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
<a
class="btn btn-outline-primary"
href="/members/export?s={{ SearchJSON|urlencode }}"
>
<i class="bi-filetype-csv"></i>
Exporter
</a>
</div>
{% else %}
<div class="btn-group">
<a class="btn btn-outline-primary" href="/contacts/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
<a
class="btn btn-outline-primary"
href="/contacts/export?s={{ SearchJSON|urlencode }}"
>
<i class="bi-filetype-csv"></i>
Exporter
</a>
</div>
{% endif %}
</div>
<div id="search-container" class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3">
<div class="row">
<div class="col-lg-6 mb-3">
<div
id="search-container"
class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3"
>
<div class="row">
<div class="col-lg-6 mb-3">
<label for="name" class="form-label">Nom et prénom</label>
<input
type="text"
class="form-control"
id="name"
data-search-field="name"
data-search-advanced="false"
name="name"
/>
</div>
<div class="col-sm-6 col-lg-3 mb-3">
<label for="section" class="form-label">Section</label>
<select
class="form-select"
id="section"
data-search-field="section"
data-search-type="int"
data-search-advanced="false"
name="section"
>
<option value=""></option>
{% for Section in Sections %}
<option value="{{ Section.ID }}">{{ Section.Name }}</option>
{% endfor %}
</select>
</div>
<div class="col-sm-6 col-lg-3 mb-3 pt-3">
{% if PermShow %}
<div class="form-check form-switch">
<input
class="form-check-input"
type="checkbox"
role="switch"
data-search-field="active"
data-search-advanced="false"
id="active"
checked
/>
{% if MembersPage %}
<label class="form-check-label" for="active"
>Afficher membres actifs</label
>
{% else %}
<label class="form-check-label" for="active"
>Afficher contacts actifs</label
>
{% endif %}
</div>
{% endif %}
<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">
{% if PermShowArchived %}
<div class="form-check form-switch">
<input
class="form-check-input"
type="checkbox"
role="switch"
data-search-field="archive"
data-search-advanced="false"
id="archive"
/>
{% if MembersPage %}
<label class="form-check-label" for="archive"
>Afficher membres archivés</label
>
{% else %}
<label class="form-check-label" for="archive"
>Afficher contacts archivés</label
>
{% endif %}
</div>
{% endif %}
</div>
</div>
</div>
<div class="col-sm-6 col-lg-3 mb-3">
<div class="d-none" id="advanced-section">
<div class="row">
<div class="col-lg-6 mb-3">
<label for="email" class="form-label">Email</label>
<input
type="text"
class="form-control"
id="email"
data-search-field="email"
data-search-advanced="true"
name="email"
/>
</div>
<div class="col-lg-6 mb-3">
<label for="phone" class="form-label">Téléphone</label>
<input
type="text"
class="form-control"
id="phone"
data-search-field="phone"
data-search-advanced="true"
name="phone"
/>
</div>
<div class="col-lg-6 mb-3">
<label for="address" class="form-label">Adresse</label>
<input
type="text"
class="form-control"
id="address"
data-search-field="address"
data-search-advanced="true"
name="address"
/>
</div>
<div class="col-sm-4 col-lg-2 mb-3">
<label for="postal_code" class="form-label">Code postal</label>
<input
type="text"
class="form-control"
id="postal_code"
data-search-field="postal_code"
data-search-advanced="true"
name="postal_code"
/>
</div>
<div class="col-sm-8 col-lg-4 mb-3">
<label for="city" class="form-label">Lieu</label>
<input
type="text"
class="form-control"
id="city"
data-search-field="city"
data-search-advanced="true"
name="city"
/>
</div>
</div>
<label for="section" class="form-label">Section</label>
<select class="form-select" id="section" data-search-field="section" data-search-type="int" data-search-advanced="false" name="section">
<option value=""></option>
{% for Section in Sections %}
<option value="{{ Section.ID }}">
{{ Section.Name }}
</option>
{% endfor %}
</select>
<div id="search-fields-model" class="row d-none">
<div class="start-col col-lg-6 mb-3">
<label class="form-label">Champ supplémentaire</label>
<select class="form-select field-select" data-last-field="">
<option value=""></option>
{% for Field in Fields %}
<option value="{{ Field.ID }}">{{ Field.Name }}</option>
{% endfor %}
</select>
</div>
<div class="end-col col-lg-6 mb-3">
<label class="form-label">Valeur</label>
<input type="text" class="form-control" disabled />
</div>
</div>
</div>
<div class="col-sm-6 col-lg-3 mb-3 pt-3">
{% if PermShow %}
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" data-search-field="active" data-search-advanced="false" id="active" checked>
{% if MembersPage %}
<label class="form-check-label" for="active">Afficher membres actifs</label>
{% else %}
<label class="form-check-label" for="active">Afficher contacts actifs</label>
{% endif %}
</div>
{% endif %}
<div id="search-fields" class="mb-3"></div>
</div>
{% if PermShowArchived %}
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" data-search-field="archive" data-search-advanced="false" id="archive">
{% if MembersPage %}
<label class="form-check-label" for="archive">Afficher membres archivés</label>
{% else %}
<label class="form-check-label" for="archive">Afficher contacts archivés</label>
{% endif %}
</div>
{% endif %}
<div class="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>
</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="d-none" id="advanced-section">
<div class="row">
<div class="col-lg-6 mb-3">
<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) %}
&ndash;
{% 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>
<input type="text" class="form-control" id="email" data-search-field="email" data-search-advanced="true" name="email">
<nav class="mt-3 mb-5">
<ul class="pagination justify-content-center">
{% if Pagination.CurrentPage <= 1 %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-left"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?p=1&s={{ SearchJSON|urlencode }}">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item">
<a
class="page-link"
href="?&p={{ Pagination.CurrentPage - 1 }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-caret-left"></i>
</a>
</li>
{% endif %}
</div>
<div class="col-lg-6 mb-3">
{% for i in Pagination.Pages %}
<li class="page-item">
<a
{% if i == Pagination.CurrentPage %}
class="page-link active"
{% else %}
class="page-link"
{% endif %}
href="?&p={{ i }}&s={{ SearchJSON|urlencode }}"
>
{{ i }}
</a>
</li>
{% endfor %}
<label for="phone" class="form-label">Téléphone</label>
<input type="text" class="form-control" id="phone" data-search-field="phone" data-search-advanced="true" name="phone">
</div>
<div class="col-lg-6 mb-3">
<label for="address" class="form-label">Adresse</label>
<input type="text" class="form-control" id="address" data-search-field="address" data-search-advanced="true" name="address">
</div>
<div class="col-sm-4 col-lg-2 mb-3">
<label for="postal_code" class="form-label">Code postal</label>
<input type="text" class="form-control" id="postal_code" data-search-field="postal_code" data-search-advanced="true" name="postal_code">
</div>
<div class="col-sm-8 col-lg-4 mb-3">
<label for="city" class="form-label">Lieu</label>
<input type="text" class="form-control" id="city" data-search-field="city" data-search-advanced="true" name="city">
</div>
</div>
<div id="search-fields-model" class="row d-none">
<div class="start-col col-lg-6 mb-3">
<label class="form-label">Champ supplémentaire</label>
<select class="form-select field-select" data-last-field="">
<option value=""></option>
{% for Field in Fields %}
<option value="{{ Field.ID }}">
{{ Field.Name }}
</option>
{% endfor %}
</select>
</div>
<div class="end-col col-lg-6 mb-3">
<label class="form-label">Valeur</label>
<input type="text" class="form-control" disabled>
</div>
</div>
<div id="search-fields" class="mb-3"></div>
</div>
<div class="row mt-2">
<div class="col-6">
<button class="btn btn-outline-primary" id="advanced" data-state="false" type="button">
<i class="bi-arrow-down me-1"></i> Avancé
</button>
<button class="btn btn-outline-primary" id="reset-search" type="button">
<i class="bi-arrow-clockwise me-1"></i> Réinitialiser
</button>
</div>
<div class="col-6 text-end">
<button class="btn btn-outline-success" id="search" type="button">
<i class="bi-search me-1"></i> Recherche
</button>
</div>
</div>
<form id="search-form" method="get" class="d-none">
<input type="hidden" id="search-page" name="p" value="{{ Pagination.CurrentPage }}">
<input type="hidden" id="search-json" name="s" value="{{ SearchJSON }}">
</form>
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-25">Nom</th>
<th class="w-50 d-none d-sm-table-cell">Adresse</th>
<th class="w-25">Section</th>
</tr>
</thead>
<tbody>
{% for Person in People %}
<tr>
<td>
{% if Person.IsMember %}
<a href="/members/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
{% else %}
<a href="/contacts/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
{% endif %}
</td>
<td class="d-none d-sm-table-cell">
{{ Person.Address1 }}
{% if Person.Address1 and (Person.PostalCode or Person.City) %}
&ndash;
{% endif %}
{{ Person.PostalCode }} {{ Person.City }}
</td>
<td>
{% if Person.SectionID %}
{{ Person.Section.Name }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<nav class="mt-3 mb-5">
<ul class="pagination justify-content-center">
{% if Pagination.CurrentPage <= 1 %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-left"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a
class="page-link"
href="?p=1&s={{ SearchJSON|urlencode }}"
>
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item">
<a
class="page-link"
href="?&p={{ Pagination.CurrentPage - 1 }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-caret-left"></i>
</a>
</li>
{% endif %}
{% for i in Pagination.Pages %}
<li class="page-item">
<a
{% if i == Pagination.CurrentPage %}
class="page-link active"
{% else %}
class="page-link"
{% endif %}
href="?&p={{ i }}&s={{ SearchJSON|urlencode }}"
>
{{ i }}
</a>
</li>
{% endfor %}
{% if Pagination.CurrentPage >= Pagination.MaxPages %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-right"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-fast-forward"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a
class="page-link"
href="?&p={{ Pagination.CurrentPage + 1 }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-caret-right"></i>
</a>
</li>
<li class="page-item">
<a
class="page-link"
href="?p={{ Pagination.MaxPages }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-fast-forward"></i>
</a>
</li>
{% endif %}
</ul>
</nav>
</div>
{% if Pagination.CurrentPage >= Pagination.MaxPages %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-right"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-fast-forward"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a
class="page-link"
href="?&p={{ Pagination.CurrentPage + 1 }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-caret-right"></i>
</a>
</li>
<li class="page-item">
<a
class="page-link"
href="?p={{ Pagination.MaxPages }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-fast-forward"></i>
</a>
</li>
{% endif %}
</ul>
</nav>
</div>
{% endblock %}
{% block javascript %}
<script src="/static/search.js"></script>
{% endblock %}
<script src="/static/search.js"></script>
{% endblock %}

File diff suppressed because it is too large Load diff

View file

@ -1,361 +1,342 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
{% if Person.IsMember or MembersPage %}
<li class="breadcrumb-item"><a href="/members">Membres</a></li>
{% else %}
<li class="breadcrumb-item"><a href="/contacts">Contacts</a></li>
{% endif %}
{% if Person.IsMember or MembersPage %}
<li class="breadcrumb-item"><a href="/members">Membres</a></li>
{% else %}
<li class="breadcrumb-item"><a href="/contacts">Contacts</a></li>
{% endif %}
{% if Person.ID %}
{% if Person.IsMember %}
<li class="breadcrumb-item">
<a href="/admin/members/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
</li>
{% else %}
<li class="breadcrumb-item">
<a href="/admin/contacts/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
</li>
{% endif %}
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if Person.ID %}
{% if Person.IsMember %}
<li class="breadcrumb-item">
<a href="/admin/members/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
</li>
{% else %}
<li class="breadcrumb-item">
<a href="/admin/contacts/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
</li>
{% endif %}
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="person" method="post">
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
<div class="row mb-3">
<label for="last_name" class="form-label col-md-2">
Nom de famille
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="last_name"
value="{{ Person.LastName }}"
autofocus
autocomplete="off"
>
</div>
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="first_name" class="form-label col-md-2">
Prénom
</label>
<div class="col-md-10">
<input
id="first_name"
class="form-control"
type="text"
name="first_name"
required
value="{{ Person.FirstName }}"
autocomplete="off"
>
</div>
</div>
<form id="person" method="post">
<div class="row mb-3">
<label for="last_name" class="form-label col-md-2">
Nom de famille
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="last_name"
value="{{ Person.LastName }}"
autofocus
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<label for="email" class="form-label col-md-2">
Email
</label>
<div class="col-md-10">
<input
id="email"
class="form-control"
type="text"
name="email"
value="{{ Person.Email }}"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="first_name" class="form-label col-md-2"> Prénom </label>
<div class="col-md-10">
<input
id="first_name"
class="form-control"
type="text"
name="first_name"
required
value="{{ Person.FirstName }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<label for="phone" class="form-label col-md-2">
Téléphone fixe
</label>
<div class="col-md-10">
<input
id="phone"
class="form-control"
type="text"
name="phone"
value="{{ Person.Phone }}"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="email" class="form-label col-md-2"> Email </label>
<div class="col-md-10">
<input
id="email"
class="form-control"
type="text"
name="email"
value="{{ Person.Email }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-5">
<label for="mobile" class="form-label col-md-2">
Téléphone mobile
</label>
<div class="col-md-10">
<input
id="mobile"
class="form-control"
type="text"
name="mobile"
value="{{ Person.Mobile }}"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="phone" class="form-label col-md-2"> Téléphone fixe </label>
<div class="col-md-10">
<input
id="phone"
class="form-control"
type="text"
name="phone"
value="{{ Person.Phone }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-2">
<label for="address1" class="form-label col-md-2">
Adresse
</label>
<div class="col-md-10">
<input
id="address1"
class="form-control"
type="text"
name="address1"
value="{{ Person.Address1 }}"
placeholder="Ligne 1"
autocomplete="off"
>
</div>
</div>
<div class="row mb-5">
<label for="mobile" class="form-label col-md-2">
Téléphone mobile
</label>
<div class="col-md-10">
<input
id="mobile"
class="form-control"
type="text"
name="mobile"
value="{{ Person.Mobile }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-2">
<div class="col-md-10 offset-md-2">
<input
id="address2"
class="form-control"
type="text"
name="address2"
value="{{ Person.Address2 }}"
placeholder="Ligne 2"
autocomplete="off"
>
</div>
</div>
<div class="row mb-2">
<label for="address1" class="form-label col-md-2"> Adresse </label>
<div class="col-md-10">
<input
id="address1"
class="form-control"
type="text"
name="address1"
value="{{ Person.Address1 }}"
placeholder="Ligne 1"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-5">
<div class="col-md-3 col-lg-2 offset-md-2 mb-2 mb-md-0">
<input
id="postal_code"
class="form-control"
type="text"
name="postal_code"
placeholder="Code postal"
pattern="[0-9]{4}"
value="{{ Person.PostalCode }}"
autocomplete="off"
>
</div>
<div class="col-md-7 col-lg-8">
<input
id="city"
class="form-control"
type="text"
name="city"
value="{{ Person.City }}"
placeholder="Lieu"
autocomplete="off"
>
</div>
</div>
<div class="row mb-2">
<div class="col-md-10 offset-md-2">
<input
id="address2"
class="form-control"
type="text"
name="address2"
value="{{ Person.Address2 }}"
placeholder="Ligne 2"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<label for="section" class="form-label col-md-2">
Section
</label>
<div class="col-md-10">
<select
class="form-select"
name="section"
id="section"
required
autocomplete="off"
>
{% for Section in Sections %}
<option
value="{{ Section.ID }}"
{% if Section.ID == Person.SectionID %}
selected
{% endif %}
>
{{ Section.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
<div class="row mb-5">
<div class="col-md-3 col-lg-2 offset-md-2 mb-2 mb-md-0">
<input
id="postal_code"
class="form-control"
type="text"
name="postal_code"
placeholder="Code postal"
pattern="[0-9]{4}"
value="{{ Person.PostalCode }}"
autocomplete="off"
/>
</div>
<div class="col-md-7 col-lg-8">
<input
id="city"
class="form-control"
type="text"
name="city"
value="{{ Person.City }}"
placeholder="Lieu"
autocomplete="off"
/>
</div>
</div>
{% if Fields %}
<div class="mt-4 mb-3">
<span class="h4">
Champs supplémentaires
</span>
</div>
{% endif %}
<div class="row mb-3">
<label for="section" class="form-label col-md-2"> Section </label>
<div class="col-md-10">
<select
class="form-select"
name="section"
id="section"
required
autocomplete="off"
>
{% for Section in Sections %}
<option
value="{{ Section.ID }}"
{% if Section.ID == Person.SectionID %}
selected
{% endif %}
>
{{ Section.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
{% for Field in Fields %}
<div class="row mb-3">
<label for="field-{{ Field.ID }}" class="form-label col-md-2">
{{ Field.Name }}
</label>
<div class="col-md-10">
{% if Fields %}
<div class="mt-4 mb-3">
<span class="h4"> Champs supplémentaires </span>
</div>
{% endif %}
{% if Field.FieldType == "text" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="text"
name="field-{{ Field.ID }}"
autocomplete="off"
{% for Field in Fields %}
<div class="row mb-3">
<label for="field-{{ Field.ID }}" class="form-label col-md-2">
{{ Field.Name }}
</label>
<div class="col-md-10">
{% if Field.FieldType == "text" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="text"
name="field-{{ Field.ID }}"
autocomplete="off"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueString.String }}"
{% endif %}
{% endfor %}
/>
{% endif %}
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueString.String }}"
{% endif %}
{% endfor %}
>
{% endif %}
{% if Field.FieldType == "longtext" %}
<textarea
id="field-{{ Field.ID }}"
class="form-control"
name="field-{{ Field.ID }}"
rows="4"
autocomplete="off"
>
{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString.String }}{% endif %}{% endfor %}</textarea
>
{% endif %}
{% if Field.FieldType == "longtext" %}
<textarea
id="field-{{ Field.ID }}"
class="form-control"
name="field-{{ Field.ID }}"
rows="4"
autocomplete="off"
>{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString.String }}{% endif %}{% endfor %}</textarea>
{% endif %}
{% if Field.FieldType == "number" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="number"
name="field-{{ Field.ID }}"
autocomplete="off"
{% if Field.FieldType == "number" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="number"
name="field-{{ Field.ID }}"
autocomplete="off"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueInt.Int64 }}"
{% endif %}
{% endfor %}
/>
{% endif %}
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueInt.Int64 }}"
{% endif %}
{% endfor %}
>
{% endif %}
{% if Field.FieldType == "date" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="date"
name="field-{{ Field.ID }}"
autocomplete="off"
{% if Field.FieldType == "date" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="date"
name="field-{{ Field.ID }}"
autocomplete="off"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueDate.Time|date:"2006-01-02" }}"
{% endif %}
{% endfor %}
/>
{% endif %}
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueDate.Time|date:"2006-01-02" }}"
{% endif %}
{% endfor %}
>
{% endif %}
{% if Field.FieldType == "list" and !Field.List.Multi %}
<select
id="field-{{ Field.ID }}"
class="form-select"
name="field-{{ Field.ID }}"
autocomplete="off"
>
<option value="0">Choisir...</option>
{% for ListItem in Field.List.ListItems %}
<option
value="{{ ListItem.ID }}"
{% if !Person.ID and ListItem.Default %}
selected
{% endif %}
{% if Field.FieldType == "list" and !Field.List.Multi %}
<select
id="field-{{ Field.ID }}"
class="form-select"
name="field-{{ Field.ID }}"
autocomplete="off"
>
<option value="0">Choisir...</option>
{% for ListItem in Field.List.ListItems %}
<option
value="{{ ListItem.ID }}"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
selected
{% endif %}
{% endfor %}
>
{{ ListItem.Value }}
</option>
{% endfor %}
</select>
{% endif %}
{% if !Person.ID and ListItem.Default %}
selected
{% endif %}
{% if Field.FieldType == "list" and Field.List.Multi %}
{% for ListItem in Field.List.ListItems %}
<div class="mb-1">
<input
type="checkbox"
class="form-check-input me-2"
id="field-{{ Field.ID }}-{{ ListItem.ID }}"
name="field-{{ Field.ID }}-{{ ListItem.ID }}"
autocomplete="off"
{% if !Person.ID and ListItem.Default %}
checked
{% endif %}
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
selected
{% endif %}
{% endfor %}
>
{{ ListItem.Value }}
</option>
{% endfor %}
</select>
{% 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 %}
{% if Field.FieldType == "list" and Field.List.Multi %}
{% for ListItem in Field.List.ListItems %}
<div class="mb-1">
<input
type="checkbox"
class="form-check-input me-2"
id="field-{{ Field.ID }}-{{ ListItem.ID }}"
name="field-{{ Field.ID }}-{{ ListItem.ID }}"
autocomplete="off"
{% if !Person.ID and ListItem.Default %}
checked
{% endif %}
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
checked
{% endif %}
{% endfor %}
>
<label
for="field-{{ Field.ID }}-{{ ListItem.ID }}"
class="form-label"
>
{{ ListItem.Value }}
</label>
</div>
{% endfor %}
{% endif %}
</div>
</div>
{% endfor %}
<div class="my-5">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-5">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

File diff suppressed because it is too large Load diff

View file

@ -1,340 +1,324 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/roles">Rôles</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/roles">Rôles</a></li>
{% if Role.ID %}
<li class="breadcrumb-item"><a href="/admin/roles/{{ Role.ID }}">{{ Role.Name }}</a></li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if Role.ID %}
<li class="breadcrumb-item">
<a href="/admin/roles/{{ Role.ID }}">{{ Role.Name }}</a>
</li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="role" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="name" class="form-label col-md-2">
Nom
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Role.Name }}"
autocomplete="off"
autofocus
>
</div>
</div>
<form id="role" method="post">
<div class="row mb-3">
<label for="name" class="form-label col-md-2"> Nom </label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Role.Name }}"
autocomplete="off"
autofocus
/>
</div>
</div>
<div class="mt-4 mb-3 d-md-none">
<span class="h4">
Permissions membres
</span>
</div>
<div class="mt-4 mb-3 d-md-none">
<span class="h4"> Permissions membres </span>
</div>
<div class="row mb-3">
<div class="col-md-2">
<div class="d-none d-md-block">
Permissions membres
</div>
</div>
<div class="col-md-10">
<input
type="checkbox"
class="form-check-input me-2"
id="show_member"
name="show_member"
autocomplete="off"
{% if Role.ShowMember %}checked{% endif %}
>
<label for="show_member" class="form-label">
Afficher membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
<div class="d-none d-md-block">Permissions membres</div>
</div>
<div class="col-md-10">
<input
type="checkbox"
class="form-check-input me-2"
id="show_member"
name="show_member"
autocomplete="off"
{% if Role.ShowMember %}checked{% endif %}
/>
<label for="show_member" class="form-label"> Afficher membres </label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="create_member"
name="create_member"
autocomplete="off"
{% if Role.CreateMember %}checked{% endif %}
>
<label for="create_member" class="form-label">
Créer membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="create_member"
name="create_member"
autocomplete="off"
{% if Role.CreateMember %}checked{% endif %}
/>
<label for="create_member" class="form-label"> Créer membres </label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="edit_member"
name="edit_member"
autocomplete="off"
{% if Role.EditMember %}checked{% endif %}
>
<label for="edit_member" class="form-label">
Modifier membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="edit_member"
name="edit_member"
autocomplete="off"
{% if Role.EditMember %}checked{% endif %}
/>
<label for="edit_member" class="form-label"> Modifier membres </label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="show_archived_member"
name="show_archived_member"
autocomplete="off"
{% if Role.ShowArchivedMember %}checked{% endif %}
>
<label for="show_archived_member" class="form-label">
Afficher membres archivés
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="show_archived_member"
name="show_archived_member"
autocomplete="off"
{% if Role.ShowArchivedMember %}checked{% endif %}
/>
<label for="show_archived_member" class="form-label">
Afficher membres archivés
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="archive_member"
name="archive_member"
autocomplete="off"
{% if Role.ArchiveMember %}checked{% endif %}
>
<label for="archive_member" class="form-label">
Archiver membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="archive_member"
name="archive_member"
autocomplete="off"
{% if Role.ArchiveMember %}checked{% endif %}
/>
<label for="archive_member" class="form-label">
Archiver membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="restore_member"
name="restore_member"
autocomplete="off"
{% if Role.RestoreMember %}checked{% endif %}
>
<label for="restore_member" class="form-label">
Restaurer membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="restore_member"
name="restore_member"
autocomplete="off"
{% if Role.RestoreMember %}checked{% endif %}
/>
<label for="restore_member" class="form-label">
Restaurer membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="purge_member"
name="purge_member"
autocomplete="off"
{% if Role.PurgeMember %}checked{% endif %}
>
<label for="purge_member" class="form-label">
Purger membres (suppression définitive)
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="purge_member"
name="purge_member"
autocomplete="off"
{% if Role.PurgeMember %}checked{% endif %}
/>
<label for="purge_member" class="form-label">
Purger membres (suppression définitive)
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="convert_member_to_contact"
name="convert_member_to_contact"
autocomplete="off"
{% if Role.ConvertMemberToContact %}checked{% endif %}
>
<label for="convert_member_to_contact" class="form-label">
Convertir membres en contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="convert_member_to_contact"
name="convert_member_to_contact"
autocomplete="off"
{% if Role.ConvertMemberToContact %}checked{% endif %}
/>
<label for="convert_member_to_contact" class="form-label">
Convertir membres en contacts
</label>
</div>
</div>
<div class="mt-4 mb-3 d-md-none">
<span class="h4">
Permissions contacts
</span>
</div>
<div class="mt-4 mb-3 d-md-none">
<span class="h4"> Permissions contacts </span>
</div>
<div class="row mb-3">
<div class="col-md-2">
<div class="d-none d-md-block">
Permissions contacts
</div>
</div>
<div class="col-md-10">
<input
type="checkbox"
class="form-check-input me-2"
id="show_contact"
name="show_contact"
autocomplete="off"
{% if Role.ShowContact %}checked{% endif %}
>
<label for="show_contact" class="form-label">
Afficher contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
<div class="d-none d-md-block">Permissions contacts</div>
</div>
<div class="col-md-10">
<input
type="checkbox"
class="form-check-input me-2"
id="show_contact"
name="show_contact"
autocomplete="off"
{% if Role.ShowContact %}checked{% endif %}
/>
<label for="show_contact" class="form-label">
Afficher contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="create_contact"
name="create_contact"
autocomplete="off"
{% if Role.CreateContact %}checked{% endif %}
>
<label for="create_contact" class="form-label">
Créer contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="create_contact"
name="create_contact"
autocomplete="off"
{% if Role.CreateContact %}checked{% endif %}
/>
<label for="create_contact" class="form-label">
Créer contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="edit_contact"
name="edit_contact"
autocomplete="off"
{% if Role.EditContact %}checked{% endif %}
>
<label for="edit_contact" class="form-label">
Modifier contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="edit_contact"
name="edit_contact"
autocomplete="off"
{% if Role.EditContact %}checked{% endif %}
/>
<label for="edit_contact" class="form-label">
Modifier contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="show_archived_contact"
name="show_archived_contact"
autocomplete="off"
{% if Role.ShowArchivedContact %}checked{% endif %}
>
<label for="show_archived_contact" class="form-label">
Afficher contacts archivés
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="show_archived_contact"
name="show_archived_contact"
autocomplete="off"
{% if Role.ShowArchivedContact %}checked{% endif %}
/>
<label for="show_archived_contact" class="form-label">
Afficher contacts archivés
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="archive_contact"
name="archive_contact"
autocomplete="off"
{% if Role.ArchiveContact %}checked{% endif %}
>
<label for="archive_contact" class="form-label">
Archiver contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="archive_contact"
name="archive_contact"
autocomplete="off"
{% if Role.ArchiveContact %}checked{% endif %}
/>
<label for="archive_contact" class="form-label">
Archiver contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="restore_contact"
name="restore_contact"
autocomplete="off"
{% if Role.RestoreContact %}checked{% endif %}
>
<label for="restore_contact" class="form-label">
Restaurer contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="restore_contact"
name="restore_contact"
autocomplete="off"
{% if Role.RestoreContact %}checked{% endif %}
/>
<label for="restore_contact" class="form-label">
Restaurer contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="purge_contact"
name="purge_contact"
autocomplete="off"
{% if Role.PurgeContact %}checked{% endif %}
>
<label for="purge_contact" class="form-label">
Purger contacts (suppression définitive)
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="purge_contact"
name="purge_contact"
autocomplete="off"
{% if Role.PurgeContact %}checked{% endif %}
/>
<label for="purge_contact" class="form-label">
Purger contacts (suppression définitive)
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="convert_contact_to_member"
name="convert_contact_to_member"
autocomplete="off"
{% if Role.ConvertContactToMember %}checked{% endif %}
>
<label for="convert_contact_to_member" class="form-label">
Convertir contacts en membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="convert_contact_to_member"
name="convert_contact_to_member"
autocomplete="off"
{% if Role.ConvertContactToMember %}checked{% endif %}
/>
<label for="convert_contact_to_member" class="form-label">
Convertir contacts en membres
</label>
</div>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,52 +1,46 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Rôles</li>
</ol>
</nav>
<hr>
</div>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Rôles</li>
</ol>
</nav>
<hr />
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/roles/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/roles/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
{% if Roles %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Nom</th>
</tr>
</thead>
<tbody>
{% for Role in Roles %}
<tr>
<td>
<a href="/admin/roles/{{ Role.ID }}">
{{ Role.Name }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">
Pas de rôle pour le moment
</div>
{% endif %}
</div>
{% if Roles %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Nom</th>
</tr>
</thead>
<tbody>
{% for Role in Roles %}
<tr>
<td>
<a href="/admin/roles/{{ Role.ID }}"> {{ Role.Name }} </a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">Pas de rôle pour le moment</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,181 +1,163 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/sections">Sections</a></li>
<li class="breadcrumb-item active">{{ Section.Name }}</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/sections">Sections</a>
</li>
<li class="breadcrumb-item active">{{ Section.Name }}</li>
</ol>
</nav>
<hr />
</div>
<div class="row mb-3">
<div class="col-md-2">
Nom
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ Section.Name }}"
disabled
readonly
>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Nom</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ Section.Name }}"
disabled
readonly
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Nom technique
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ Section.ShortName }}"
disabled
readonly
>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Nom technique</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ Section.ShortName }}"
disabled
readonly
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Section parente
</div>
<div class="col-md-10">
{% if Section.ParentSectionID %}
<input
type="text"
class="form-control"
value="{{ Section.ParentSection.Name }}"
disabled
readonly
>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Section parente</div>
<div class="col-md-10">
{% if Section.ParentSectionID %}
<input
type="text"
class="form-control"
value="{{ Section.ParentSection.Name }}"
disabled
readonly
/>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Peut contenir des membres
</div>
<div class="col-md-10">
{% if Section.ContainsMembers %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input
type="text"
class="form-control"
value="Oui"
disabled
>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Peut contenir des membres</div>
<div class="col-md-10">
{% if Section.ContainsMembers %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input type="text" class="form-control" value="Oui" disabled />
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Peut contenir des contacts
</div>
<div class="col-md-10">
{% if Section.ContainsContacts %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input
type="text"
class="form-control"
value="Oui"
disabled
>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Peut contenir des contacts</div>
<div class="col-md-10">
{% if Section.ContainsContacts %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input type="text" class="form-control" value="Oui" disabled />
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% endif %}
</div>
</div>
<div class="my-4 row">
<div class="col-6">
<a class="btn btn-outline-primary" href="/admin/sections/{{ Section.ID }}/edit">
<i class="bi-pencil-square"></i>
Modifier
</a>
</div>
<div class="col-6 text-end">
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
<div class="my-4 row">
<div class="col-6">
<a
class="btn btn-outline-primary"
href="/admin/sections/{{ Section.ID }}/edit"
>
<i class="bi-pencil-square"></i>
Modifier
</a>
</div>
<div class="col-6 text-end">
<button
type="button"
class="btn btn-outline-danger"
data-bs-toggle="modal"
data-bs-target="#modal-delete"
>
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
</div>
</div>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cette section ?</p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-outline-secondary"
data-bs-dismiss="modal"
>
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cette section ?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<form action="/admin/sections/{{ Section.ID }}/delete" method="post" class="d-inline p-0">
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
<form
action="/admin/sections/{{ Section.ID }}/delete"
method="post"
class="d-inline p-0"
>
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,146 +1,144 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/sections">Sections</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/sections">Sections</a>
</li>
{% if Section.ID %}
<li class="breadcrumb-item"><a href="/admin/sections/{{ Section.ID }}">{{ Section.Name }}</a></li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if Section.ID %}
<li class="breadcrumb-item">
<a href="/admin/sections/{{ Section.ID }}">{{ Section.Name }}</a>
</li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="section" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="name" class="form-label col-md-2">
Nom
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Section.Name }}"
autocomplete="off"
autofocus
>
</div>
</div>
<form id="section" method="post">
<div class="row mb-3">
<label for="name" class="form-label col-md-2"> Nom </label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Section.Name }}"
autocomplete="off"
autofocus
/>
</div>
</div>
<div class="row mb-3">
<label for="short_name" class="form-label col-md-2">
Nom technique
</label>
<div class="col-md-10">
<input
id="short_name"
class="form-control"
type="text"
name="short_name"
required
value="{{ Section.ShortName }}"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="short_name" class="form-label col-md-2">
Nom technique
</label>
<div class="col-md-10">
<input
id="short_name"
class="form-control"
type="text"
name="short_name"
required
value="{{ Section.ShortName }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<label for="parent_section" class="form-label col-md-2">
Section parente
</label>
<div class="col-md-10">
<select
id="parent_section"
class="form-select"
name="parent_section"
autocomplete="off"
{% if IsParent %}
disabled
{% endif %}
>
<option value="0">
Choisir...
</option>
{% if !IsParent %}
{% for ParentSection in Sections %}
<option
value="{{ ParentSection.ID }}"
{% if Section.ParentSectionID == ParentSection.ID %}selected{% endif %}
>
{{ ParentSection.Name }}
</option>
{% endfor %}
{% endif %}
</select>
</div>
</div>
<div class="row mb-3">
<label for="parent_section" class="form-label col-md-2">
Section parente
</label>
<div class="col-md-10">
<select
id="parent_section"
class="form-select"
name="parent_section"
autocomplete="off"
{% if IsParent %}
disabled
{% endif %}
>
<option value="0">Choisir...</option>
{% if !IsParent %}
{% for ParentSection in Sections %}
<option
value="{{ ParentSection.ID }}"
{% if Section.ParentSectionID == ParentSection.ID %}selected{% endif %}
>
{{ ParentSection.Name }}
</option>
{% endfor %}
{% endif %}
</select>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="contains_members"
name="contains_members"
autocomplete="off"
{% if Section.ContainsMembers %}
checked
{% endif %}
>
<label for="contains_members" class="form-label">
Contient des membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="contains_members"
name="contains_members"
autocomplete="off"
{% if Section.ContainsMembers %}
checked
{% endif %}
/>
<label for="contains_members" class="form-label">
Contient des membres
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="contains_contacts"
name="contains_contacts"
autocomplete="off"
{% if Section.ContainsContacts %}
checked
{% endif %}
>
<label for="contains_contacts" class="form-label">
Contient des contacts
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="contains_contacts"
name="contains_contacts"
autocomplete="off"
{% if Section.ContainsContacts %}
checked
{% endif %}
/>
<label for="contains_contacts" class="form-label">
Contient des contacts
</label>
</div>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,80 +1,77 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Sections</li>
</ol>
</nav>
<hr>
</div>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Sections</li>
</ol>
</nav>
<hr />
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/sections/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/sections/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
{% if Sections %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-25">Nom</th>
<th class="w-25">Section parente</th>
<th class="w-25">Membres</th>
<th class="w-25">Contacts</th>
</tr>
</thead>
<tbody>
{% for Section in Sections %}
<tr>
<td>
<a href="/admin/sections/{{ Section.ID }}">
{{ Section.Name }}
</a>
</td>
<td>
{% if Section.ParentSectionID %}
{{ Section.ParentSection.Name }}
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
<td>
{% if Section.ContainsMembers %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
<td>
{% if Section.ContainsContacts %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">
Pas de section pour le moment
</div>
{% endif %}
</div>
{% if Sections %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-25">Nom</th>
<th class="w-25">Section parente</th>
<th class="w-25">Membres</th>
<th class="w-25">Contacts</th>
</tr>
</thead>
<tbody>
{% for Section in Sections %}
<tr>
<td>
<a href="/admin/sections/{{ Section.ID }}">
{{ Section.Name }}
</a>
</td>
<td>
{% if Section.ParentSectionID %}
{{ Section.ParentSection.Name }}
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
<td>
{% if Section.ContainsMembers %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
<td>
{% if Section.ContainsContacts %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">Pas de section pour le moment</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,109 +1,113 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">
Enregistrement multifacteur (TOTP)
</div>
<div class="card-body">
{% if MfaError %}
<div class="alert alert-danger">
{{ MfaError }}
</div>
{% endif %}
<div class="lh-sm text-center">
Le double facteur protège lapplication et
sécurise les données personnelles de nos camarades.
Même en cas de vol de mot de passe, laccès est bloqué sans une
vérification supplémentaire.
</div>
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">Enregistrement multifacteur (TOTP)</div>
<div class="card-body">
{% if MfaError %}
<div class="alert alert-danger">{{ MfaError }}</div>
{% endif %}
<div class="my-4 text-center">
<img src="{{ QrCode }}" alt="Code QR">
<div class="lh-sm text-center">
Le double facteur protège lapplication et sécurise les données
personnelles de nos camarades. Même en cas de vol de mot de passe,
laccès est bloqué sans une vérification supplémentaire.
</div>
<div class="mt-2">
<a href="javascript:;" data-bs-toggle="modal" data-bs-target="#modal-help">
<i class="bi-info-square"></i>
Comment utiliser ce code QR ?
</a>
</div>
</div>
<div class="my-4 text-center">
<img src="{{ QrCode }}" alt="Code QR" />
<form id="login" method="post">
<div class="mb-3">
<label for="secret" class="form-label">
Secret (si pas possible de scanner le code QR)
</label>
<input
id="secret"
class="form-control"
type="text"
name="secret"
disabled
value="{{ Secret }}"
>
</div>
<div class="mb-3">
<label for="otp" class="form-label">
Code temporaire
</label>
<input
id="otp"
class="form-control"
type="text"
name="otp"
required
placeholder="000000"
pattern="[0-9]{6}"
autofocus
>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-check-circle"></i>
Vérifier
</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="mt-2">
<a
href="javascript:;"
data-bs-toggle="modal"
data-bs-target="#modal-help"
>
<i class="bi-info-square"></i>
Comment utiliser ce code QR ?
</a>
</div>
</div>
<div 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 dauthentification :</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 lenrôlement.
</li>
</ol>
</div>
</div>
</div>
</div>
<form id="login" method="post">
<div class="mb-3">
<label for="secret" class="form-label">
Secret (si pas possible de scanner le code QR)
</label>
<input
id="secret"
class="form-control"
type="text"
name="secret"
disabled
value="{{ Secret }}"
/>
</div>
<div class="mb-3">
<label for="otp" class="form-label"> Code temporaire </label>
<input
id="otp"
class="form-control"
type="text"
name="otp"
required
placeholder="000000"
pattern="[0-9]{6}"
autofocus
/>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-check-circle"></i>
Vérifier
</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div id="modal-help" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Aide</h5>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
></button>
</div>
<div class="modal-body">
<ol>
<li>
<b>Téléchargez une application dauthentification :</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
lenrôlement.
</li>
</ol>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,44 +1,38 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">
Vérification multifacteur (TOTP)
</div>
<div class="card-body">
{% if MfaError %}
<div class="alert alert-danger">
{{ MfaError }}
</div>
{% endif %}
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">Vérification multifacteur (TOTP)</div>
<div class="card-body">
{% if MfaError %}
<div class="alert alert-danger">{{ MfaError }}</div>
{% endif %}
<form id="login" method="post">
<div class="mb-3">
<label for="otp" class="form-label">
Code temporaire
</label>
<input
id="otp"
class="form-control"
type="text"
name="otp"
required
placeholder="000000"
pattern="[0-9]{6}"
autofocus
>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-check-circle"></i>
Vérifier
</button>
</div>
</form>
</div>
</div>
</div>
</div>
<form id="login" method="post">
<div class="mb-3">
<label for="otp" class="form-label"> Code temporaire </label>
<input
id="otp"
class="form-control"
type="text"
name="otp"
required
placeholder="000000"
pattern="[0-9]{6}"
autofocus
/>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-check-circle"></i>
Vérifier
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,222 +1,201 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/users">Utilisateurs</a></li>
<li class="breadcrumb-item active">{{ User.Name }}</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/users">Utilisateurs</a>
</li>
<li class="breadcrumb-item active">{{ User.Name }}</li>
</ol>
</nav>
<hr />
</div>
<div class="row mb-3">
<div class="col-md-2">
Nom complet
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ User.Name }}"
disabled
readonly
>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Nom complet</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ User.Name }}"
disabled
readonly
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Email
</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ User.Email }}"
disabled
readonly
>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Email</div>
<div class="col-md-10">
<input
type="text"
class="form-control"
value="{{ User.Email }}"
disabled
readonly
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Administrateur
</div>
<div class="col-md-10">
{% if User.IsAdmin %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input
type="text"
class="form-control"
value="Oui"
disabled
>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Administrateur</div>
<div class="col-md-10">
{% if User.IsAdmin %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input type="text" class="form-control" value="Oui" disabled />
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Ecran de bienvenue à la prochaine connexion
</div>
<div class="col-md-10">
{% if User.SkipWelcome %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input
type="text"
class="form-control"
value="Non"
disabled
>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Oui"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Ecran de bienvenue à la prochaine connexion</div>
<div class="col-md-10">
{% if User.SkipWelcome %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input type="text" class="form-control" value="Non" disabled />
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input type="text" class="form-control" value="Oui" disabled />
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
Double facteur (TOTP)
</div>
<div class="col-md-10">
{% if User.TotpSecret.Valid %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input
type="text"
class="form-control"
value="Enrôlé"
disabled
>
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Enrôlement lors de la prochaine connexion"
disabled
>
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">Double facteur (TOTP)</div>
<div class="col-md-10">
{% if User.TotpSecret.Valid %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-check-lg text-success"></i>
</span>
<input type="text" class="form-control" value="Enrôlé" disabled />
</div>
{% else %}
<div class="input-group">
<span class="input-group-text">
<i class="bi-x-lg text-danger"></i>
</span>
<input
type="text"
class="form-control"
value="Enrôlement lors de la prochaine connexion"
disabled
/>
</div>
{% endif %}
</div>
</div>
<div class="mt-4 mb-3">
<span class="h4">
Permissions
</span>
</div>
{% if UserRoles %}
{% for UserRole in UserRoles %}
<div class="row mb-3">
<div class="col-md-2">
{{ UserRole.Section.Name }}
</div>
<div class="col-md-10">
<div class="input-group">
<span class="input-group-text">
<i class="bi-key"></i>
</span>
<input
type="text"
class="form-control"
value="{{ UserRole.Role.Name }}"
disabled
readonly
>
</div>
</div>
</div>
{% endfor %}
{% else %}
<div>
Pas encore de permissions pour cet utilisateur.
</div>
{% endif %}
<div class="mt-4 mb-3">
<span class="h4"> Permissions </span>
</div>
{% if UserRoles %}
{% for UserRole in UserRoles %}
<div class="row mb-3">
<div class="col-md-2">{{ UserRole.Section.Name }}</div>
<div class="col-md-10">
<div class="input-group">
<span class="input-group-text">
<i class="bi-key"></i>
</span>
<input
type="text"
class="form-control"
value="{{ UserRole.Role.Name }}"
disabled
readonly
/>
</div>
</div>
</div>
{% endfor %}
{% else %}
<div>Pas encore de permissions pour cet utilisateur.</div>
{% endif %}
<div class="my-4 row">
<div class="col-6">
<a class="btn btn-outline-primary" href="/admin/users/{{ User.ID }}/edit">
<i class="bi-pencil-square me-1"></i>
Modifier
</a>
<a class="btn btn-outline-primary" href="/admin/users/{{ User.ID }}/permissions">
<i class="bi-key me-1"></i>
Permissions
</a>
</div>
<div class="col-6 text-end">
<button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#modal-delete">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
<div class="my-4 row">
<div class="col-6">
<a
class="btn btn-outline-primary"
href="/admin/users/{{ User.ID }}/edit"
>
<i class="bi-pencil-square me-1"></i>
Modifier
</a>
<a
class="btn btn-outline-primary"
href="/admin/users/{{ User.ID }}/permissions"
>
<i class="bi-key me-1"></i>
Permissions
</a>
</div>
<div class="col-6 text-end">
<button
type="button"
class="btn btn-outline-danger"
data-bs-toggle="modal"
data-bs-target="#modal-delete"
>
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</div>
</div>
</div>
</div>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cet utilisateur ?</p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-outline-secondary"
data-bs-dismiss="modal"
>
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<div id="modal-delete" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<p>Êtes-vous sûr de vouloir supprimer cet utilisateur ?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
<i class="bi-x-lg me-1"></i>
Annuler
</button>
<form action="/admin/users/{{ User.ID }}/delete" method="post" class="d-inline p-0">
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
<form
action="/admin/users/{{ User.ID }}/delete"
method="post"
class="d-inline p-0"
>
<button class="btn btn-outline-danger" type="submit">
<i class="bi-trash3 me-1"></i>
Supprimer
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,139 +1,131 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/users">Utilisateurs</a></li>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/users">Utilisateurs</a>
</li>
{% if User.ID %}
<li class="breadcrumb-item"><a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a></li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if User.ID %}
<li class="breadcrumb-item">
<a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a>
</li>
<li class="breadcrumb-item active">Modifier</li>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form id="user" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row mb-3">
<label for="name" class="form-label col-md-2">
Nom complet
</label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ User.Name }}"
autocomplete="off"
autofocus
>
</div>
</div>
<form id="user" method="post">
<div class="row mb-3">
<label for="name" class="form-label col-md-2"> Nom complet </label>
<div class="col-md-10">
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ User.Name }}"
autocomplete="off"
autofocus
/>
</div>
</div>
<div class="row mb-3">
<label for="email" class="form-label col-md-2">
Email
</label>
<div class="col-md-10">
<input
id="email"
class="form-control"
type="email"
name="email"
required
value="{{ User.Email }}"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3">
<label for="email" class="form-label col-md-2"> Email </label>
<div class="col-md-10">
<input
id="email"
class="form-control"
type="email"
name="email"
required
value="{{ User.Email }}"
autocomplete="off"
/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="is_admin"
name="is_admin"
autocomplete="off"
{% if User.IsAdmin %}
checked
{% endif %}
>
<label for="is_admin" class="form-label">
Administrateur
</label>
</div>
</div>
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="is_admin"
name="is_admin"
autocomplete="off"
{% if User.IsAdmin %}
checked
{% endif %}
/>
<label for="is_admin" class="form-label"> Administrateur </label>
</div>
</div>
<div class="row mb-3">
<label for="password" class="form-label col-md-2">
Mot de passe
</label>
<div class="col-md-10">
<input
id="password"
class="form-control"
type="password"
name="password"
autocomplete="off"
{% if !User.ID %}required{% endif %}
>
{% if User.ID %}
<div class="form-text">
Laisser vide pour ne pas changer
</div>
{% endif %}
</div>
</div>
<div class="row mb-3">
<label for="password" class="form-label col-md-2"> Mot de passe </label>
<div class="col-md-10">
<input
id="password"
class="form-control"
type="password"
name="password"
autocomplete="off"
{% if !User.ID %}required{% endif %}
/>
{% if User.ID %}
<div class="form-text">Laisser vide pour ne pas changer</div>
{% endif %}
</div>
</div>
{% if User.ID %}
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="reset_totp"
name="reset_totp"
autocomplete="off"
>
<label for="reset_totp" class="form-label">
Réinitialiser le double facteur (TOTP)
</label>
<div class="form-text">
Si la case est cochée, l'utilisateur devra effectuer
un enrôlement TOTP à la prochaine connexion.
</div>
</div>
</div>
{% endif %}
{% if User.ID %}
<div class="row mb-3">
<div class="col-md-10 offset-md-2">
<input
type="checkbox"
class="form-check-input me-2"
id="reset_totp"
name="reset_totp"
autocomplete="off"
/>
<label for="reset_totp" class="form-label">
Réinitialiser le double facteur (TOTP)
</label>
<div class="form-text">
Si la case est cochée, l'utilisateur devra effectuer un enrôlement
TOTP à la prochaine connexion.
</div>
</div>
</div>
{% endif %}
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,81 +1,78 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item"><a href="/admin/users">Utilisateurs</a></li>
<li class="breadcrumb-item"><a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a></li>
<li class="breadcrumb-item active">Permissions</li>
</ol>
</nav>
<hr>
</div>
<div class="container mt-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item">
<a href="/admin/users">Utilisateurs</a>
</li>
<li class="breadcrumb-item">
<a href="/admin/users/{{ User.ID }}">{{ User.Name }}</a>
</li>
<li class="breadcrumb-item active">Permissions</li>
</ol>
</nav>
<hr />
</div>
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if Sections %}
<form id="user" method="post">
{% if Errors %}
<div class="alert alert-danger">
<ul class="m-0">
{% for Error in Errors %}
<li>{{ Error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% for Section in Sections %}
<div class="row mb-3">
<div class="col-md-2">
{{ Section.Name }}
</div>
<div class="col-md-10">
<div class="input-group">
<span class="input-group-text">
<i class="bi-key"></i>
</span>
<select
class="form-select"
name="section-{{ Section.ID }}"
id="section-{{ Section.ID }}"
autocomplete="off"
>
<option value="0">Choisir...</option>
{% for Role in Roles %}
<option
value="{{ Role.ID }}"
{% if Sections %}
<form id="user" method="post">
{% for Section in Sections %}
<div class="row mb-3">
<div class="col-md-2">{{ Section.Name }}</div>
<div class="col-md-10">
<div class="input-group">
<span class="input-group-text">
<i class="bi-key"></i>
</span>
<select
class="form-select"
name="section-{{ Section.ID }}"
id="section-{{ Section.ID }}"
autocomplete="off"
>
<option value="0">Choisir...</option>
{% for Role in Roles %}
<option
value="{{ Role.ID }}"
{% for UserRole in UserRoles %}
{% if Section.ID == UserRole.SectionID and Role.ID == UserRole.RoleID %}
selected
{% endif %}
{% endfor %}
>
{{ Role.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
{% endfor %}
{% for UserRole in UserRoles %}
{% if Section.ID == UserRole.SectionID and Role.ID == UserRole.RoleID %}
selected
{% endif %}
{% endfor %}
>
{{ Role.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
{% endfor %}
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
{% else %}
<div class="my-4">
Pas de section pour le moment
</div>
{% endif %}
</div>
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
{% else %}
<div class="my-4">Pas de section pour le moment</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,66 +1,59 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Utilisateurs</li>
</ol>
</nav>
<hr>
</div>
<div class="container my-4">
<div class="mb-4">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
<li class="breadcrumb-item active">Utilisateurs</li>
</ol>
</nav>
<hr />
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/users/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
<div class="my-3 text-end">
<a class="btn btn-outline-primary" href="/admin/users/add">
<i class="bi-plus-lg"></i>
Ajouter
</a>
</div>
{% if Users %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Nom complet</th>
<th class="w-25">Email</th>
<th class="w-25">Administrateur</th>
</tr>
</thead>
<tbody>
{% for User in Users %}
<tr>
<td>
<span class="user-photo me-2">{{ User.Name|first }}</span>
<a href="/admin/users/{{ User.ID }}">
{{ User.Name }}
</a>
</td>
<td>
{{ User.Email }}
</td>
<td>
{% if User.IsAdmin %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">
Pas d'utilisateurs pour le moment
</div>
{% endif %}
</div>
{% if Users %}
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-50">Nom complet</th>
<th class="w-25">Email</th>
<th class="w-25">Administrateur</th>
</tr>
</thead>
<tbody>
{% for User in Users %}
<tr>
<td>
<span class="user-photo me-2">{{ User.Name|first }}</span>
<a href="/admin/users/{{ User.ID }}"> {{ User.Name }} </a>
</td>
<td>{{ User.Email }}</td>
<td>
{% if User.IsAdmin %}
<i class="bi-check-lg text-success me-1"></i>
Oui
{% else %}
<i class="bi-x-lg text-danger me-1"></i>
Non
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="my-4">Pas d'utilisateurs pour le moment</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,99 +1,92 @@
{% extends "layouts/main.html" %}
{% block main %}
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">
Paramètres du compte
</div>
<div class="card-body">
{% if FormErrors %}
<div class="alert alert-danger">
<ul class="mb-0">
{% for error in FormErrors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<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 }}"
<div class="container">
<div id="login-card" class="my-5">
<div class="card">
<div class="card-header">Paramètres du compte</div>
<div class="card-body">
{% if FormErrors %}
<div class="alert alert-danger">
<ul class="mb-0">
{% for error in FormErrors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if !EmailUpdate %}
autofocus
{% endif %}
>
</div>
<div class="mb-3">
<label for="password" class="form-label">
Nouveau mot de passe
</label>
<input
id="password"
class="form-control"
type="password"
name="password"
required
>
</div>
<div class="mb-3">
<label for="password-verify" class="form-label">
Vérifier le mot de passe
</label>
<input
id="password-verify"
class="form-control"
type="password"
name="password-verify"
required
>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
</div>
</div>
</div>
<form id="login" method="post">
<div class="mb-3">
<label for="email" class="form-label"> Adresse email </label>
{% if EmailUpdate %}
<input
id="email"
class="form-control"
type="email"
name="email"
required
value="{{ Email }}"
autofocus
/>
{% else %}
<input
id="email"
class="form-control"
type="text"
name="email"
disabled
value="{{ Email }}"
/>
{% endif %}
</div>
<div class="mb-3">
<label for="name" class="form-label"> Nom complet </label>
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Name }}"
{% if !EmailUpdate %}
autofocus
{% endif %}
/>
</div>
<div class="mb-3">
<label for="password" class="form-label">
Nouveau mot de passe
</label>
<input
id="password"
class="form-control"
type="password"
name="password"
required
/>
</div>
<div class="mb-3">
<label for="password-verify" class="form-label">
Vérifier le mot de passe
</label>
<input
id="password-verify"
class="form-control"
type="password"
name="password-verify"
required
/>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}