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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,109 +1,113 @@
{% extends "layouts/main.html" %} {% extends "layouts/main.html" %}
{% block main %} {% block main %}
<div class="container"> <div class="container">
<div id="login-card" class="my-5"> <div id="login-card" class="my-5">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">Enregistrement multifacteur (TOTP)</div>
Enregistrement multifacteur (TOTP) <div class="card-body">
</div> {% if MfaError %}
<div class="card-body"> <div class="alert alert-danger">{{ MfaError }}</div>
{% if MfaError %} {% endif %}
<div class="alert alert-danger">
{{ MfaError }}
</div>
{% endif %}
<div class="lh-sm text-center"> <div class="lh-sm text-center">
Le double facteur protège lapplication et Le double facteur protège lapplication et sécurise les données
sécurise les données personnelles de nos camarades. personnelles de nos camarades. Même en cas de vol de mot de passe,
Même en cas de vol de mot de passe, laccès est bloqué sans une laccès est bloqué sans une vérification supplémentaire.
vérification supplémentaire. </div>
</div>
<div class="my-4 text-center"> <div class="my-4 text-center">
<img src="{{ QrCode }}" alt="Code QR"> <img src="{{ QrCode }}" alt="Code QR" />
<div class="mt-2"> <div class="mt-2">
<a href="javascript:;" data-bs-toggle="modal" data-bs-target="#modal-help"> <a
<i class="bi-info-square"></i> href="javascript:;"
Comment utiliser ce code QR ? data-bs-toggle="modal"
</a> data-bs-target="#modal-help"
</div> >
</div> <i class="bi-info-square"></i>
Comment utiliser ce code QR ?
</a>
</div>
</div>
<form id="login" method="post"> <form id="login" method="post">
<div class="mb-3"> <div class="mb-3">
<label for="secret" class="form-label"> <label for="secret" class="form-label">
Secret (si pas possible de scanner le code QR) Secret (si pas possible de scanner le code QR)
</label> </label>
<input <input
id="secret" id="secret"
class="form-control" class="form-control"
type="text" type="text"
name="secret" name="secret"
disabled disabled
value="{{ Secret }}" value="{{ Secret }}"
> />
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="otp" class="form-label"> <label for="otp" class="form-label"> Code temporaire </label>
Code temporaire <input
</label> id="otp"
<input class="form-control"
id="otp" type="text"
class="form-control" name="otp"
type="text" required
name="otp" placeholder="000000"
required pattern="[0-9]{6}"
placeholder="000000" autofocus
pattern="[0-9]{6}" />
autofocus </div>
> <div class="text-end">
</div> <button class="btn btn-outline-primary" type="submit">
<div class="text-end"> <i class="me-1 bi-check-circle"></i>
<button class="btn btn-outline-primary" type="submit"> Vérifier
<i class="me-1 bi-check-circle"></i> </button>
Vérifier </div>
</button> </form>
</div> </div>
</form> </div>
</div> </div>
</div> </div>
</div>
</div>
<div id="modal-help" class="modal" tabindex="-1"> <div id="modal-help" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered"> <div class="modal-dialog modal-dialog-centered">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Aide</h5> <h5 class="modal-title">Aide</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button> <button
</div> type="button"
<div class="modal-body"> class="btn-close"
<ol> data-bs-dismiss="modal"
<li> ></button>
<b>Téléchargez une application dauthentification :</b> </div>
Installez une application compatible TOTP (comme Google Authenticator, <div class="modal-body">
Microsoft Authenticator ou Authy) sur votre smartphone. <ol>
</li> <li>
<li> <b>Téléchargez une application dauthentification :</b>
<b>Scannez le code QR :</b> Installez une application compatible TOTP (comme Google
Ouvrez l'application, choisissez "Ajouter un compte" ou "Scanner un code QR", Authenticator, Microsoft Authenticator ou Authy) sur votre
puis utilisez votre appareil pour scanner le QR code affiché. smartphone.
</li> </li>
<li> <li>
<b>Enregistrez le compte :</b> <b>Scannez le code QR :</b>
Une fois scanné, l'application générera un code à usage unique qui Ouvrez l'application, choisissez "Ajouter un compte" ou "Scanner
se renouvelle régulièrement. un code QR", puis utilisez votre appareil pour scanner le QR code
</li> affiché.
<li> </li>
<b>Testez le code :</b> <li>
Entrez le code généré dans l'application pour confirmer lenrôlement. <b>Enregistrez le compte :</b>
</li> Une fois scanné, l'application générera un code à usage unique qui
</ol> se renouvelle régulièrement.
</div> </li>
</div> <li>
</div> <b>Testez le code :</b>
</div> Entrez le code généré dans l'application pour confirmer
lenrôlement.
</li>
</ol>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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