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">
<div class="row mb-3"> <form id="account" method="post">
<label for="name" class="col-md-2 form-label"> <div class="row mb-3">
Nom complet <label for="name" class="col-md-2 form-label"> Nom complet </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="name"
id="name" class="form-control"
class="form-control" type="text"
type="text" name="name"
name="name" required
required value="{{ User.Name }}"
value="{{ User.Name }}" autofocus
autofocus autocomplete="off"
autocomplete="off" />
> </div>
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="email" class="col-md-2 form-label"> <label for="email" class="col-md-2 form-label"> Email </label>
Email <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="email"
<input class="form-control"
id="email" type="email"
class="form-control" name="email"
type="email" required
name="email" value="{{ User.Email }}"
required autocomplete="off"
value="{{ User.Email }}" />
autocomplete="off" </div>
> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="password" class="col-md-2 form-label"> <label for="password" class="col-md-2 form-label"> Mot de passe </label>
Mot de passe <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="password"
<input class="form-control"
id="password" type="password"
class="form-control" name="password"
type="password" autocomplete="off"
name="password" />
autocomplete="off" <div class="form-text">Laisser vide pour ne pas changer</div>
> </div>
<div class="form-text"> </div>
Laisser vide pour ne pas changer
</div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="password" class="col-md-2 form-label"> <label for="password" class="col-md-2 form-label">
Confirmer le mot de passe Confirmer le mot de passe
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<input <input
id="password-verify" id="password-verify"
class="form-control" class="form-control"
type="password" type="password"
name="password-verify" name="password-verify"
autocomplete="off" autocomplete="off"
> />
</div> </div>
</div> </div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}
{% block javascript %} {% block javascript %}
<script> <script>
$(document).ready(function() { $(document).ready(function () {
$("#password").on("input", function() { $("#password").on("input", function () {
var enable = false; var enable = false;
if ($(this).val().length > 0) { if ($(this).val().length > 0) {
enable = true; enable = true;
} }
$("#password-verify").prop("disabled", !enable); $("#password-verify").prop("disabled", !enable);
$("#password-verify").prop("required", enable); $("#password-verify").prop("required", enable);
}); });
$("#password").trigger("input"); $("#password").trigger("input");
}); });
</script> </script>
{% endblock %} {% endblock %}

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">
<div class="row mb-3"> <form id="field" method="post">
<label for="name" class="form-label col-md-2"> <div class="row mb-3">
Nom du champ <label for="name" class="form-label col-md-2"> Nom du champ </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="name"
id="name" class="form-control"
class="form-control" type="text"
type="text" name="name"
name="name" required
required value="{{ Field.Name }}"
value="{{ Field.Name }}" autocomplete="off"
autocomplete="off" autofocus
autofocus />
> </div>
</div> </div>
</div>
{% if !Field.ID %} {% if !Field.ID %}
<div class="row mb-3"> <div class="row mb-3">
<label for="person_type" class="form-label col-md-2"> <label for="person_type" class="form-label col-md-2">
Population Population
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<select <select
name="person_type" name="person_type"
id="person_type" id="person_type"
class="form-select" class="form-select"
autocomplete="off" autocomplete="off"
required required
> >
<option value="member">Membre</option> <option value="member">Membre</option>
<option value="contact">Contact</option> <option value="contact">Contact</option>
</select> </select>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<label for="field_type" class="form-label col-md-2"> <label for="field_type" class="form-label col-md-2">
Type de champ Type de champ
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<select <select
name="field_type" name="field_type"
id="field_type" id="field_type"
class="form-select" class="form-select"
autocomplete="off" autocomplete="off"
required required
> >
<option value="text">Texte</option> <option value="text">Texte</option>
<option value="longtext">Texte multiligne</option> <option value="longtext">Texte multiligne</option>
<option value="number">Nombre</option> <option value="number">Nombre</option>
<option value="date">Date</option> <option value="date">Date</option>
<option value="list">Liste</option> <option value="list">Liste</option>
</select> </select>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<label for="list" class="form-label col-md-2"> <label for="list" class="form-label col-md-2"> Liste </label>
Liste <div class="col-md-10">
</label> <select
<div class="col-md-10"> name="list"
<select id="list"
name="list" class="form-select"
id="list" autocomplete="off"
class="form-select" required
autocomplete="off" >
required {% for List in Lists %}
> <option value="{{ List.ID }}">{{ List.Name }}</option>
{% for List in Lists %} {% endfor %}
<option value="{{ List.ID }}"> </select>
{{ List.Name }} </div>
</option> </div>
{% endfor %} {% endif %}
</select>
</div>
</div>
{% endif %}
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}
{% block javascript %} {% block javascript %}
<script> <script>
$(document).ready(function() { $(document).ready(function () {
$("#field_type").on("change", function() { $("#field_type").on("change", function () {
var enable = false; var enable = false;
if ($(this).val() == "list") { if ($(this).val() == "list") {
enable = true; enable = true;
$("#list-disabled").remove(); $("#list-disabled").remove();
} else { } else {
$("#list").append("<option id=\"list-disabled\" selected></option>"); $("#list").append('<option id="list-disabled" selected></option>');
} }
$("#list").prop("disabled", !enable); $("#list").prop("disabled", !enable);
$("#list").prop("required", enable); $("#list").prop("required", enable);
}); });
$("#field_type").trigger("change"); $("#field_type").trigger("change");
}); });
</script> </script>
{% endblock %} {% endblock %}

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 rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/bootstrap-icons/bootstrap-icons.min.css">
<link rel="stylesheet" href="/static/main.css">
{% block stylesheet %}{% endblock %}
</head>
<body class="d-flex flex-column h-100">
<main class="flex-shrink-0">
{% block body %}
{% block header %}
{% include "partials/header.html" %}
{% endblock %}
{% block main %}{% endblock %} <link
{% endblock %} rel="shortcut icon"
</main> href="/static/images/favicon.jpg"
type="image/jpg"
/>
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css" />
<link
rel="stylesheet"
href="/static/bootstrap-icons/bootstrap-icons.min.css"
/>
<link rel="stylesheet" href="/static/main.css" />
{% block stylesheet %}{% endblock %}
</head>
<body class="d-flex flex-column h-100">
<main class="flex-shrink-0">
{% block body %}
{% block header %}
{% include "partials/header.html" %}
{% endblock %}
<footer class="footer mt-auto py-2 bg-body-tertiary"> {% block main %}
<div class="container"> {% endblock %}
<span class="text-body-secondary"> {% endblock %}
<a </main>
class="text-body-secondary me-2"
target="_blank"
href="https://git.readonly.ch/bouzoure/pop-camarades"
>
<i class="bi-code-slash"></i>
Code source
</a>
<a
class="text-body-secondary"
target="_blank"
href="/licences"
>
<i class="bi-journal-bookmark"></i>
Licences
</a>
</span>
<div class="float-end"> <footer class="footer mt-auto py-2 bg-body-tertiary">
<span class="text-body-secondary"> <div class="container">
<i class="bi-stopwatch me-1"></i> <span class="text-body-secondary">
{{ Globals.TimeStart | time_diff }} <a
<span>ms</span> class="text-body-secondary me-2"
</span> target="_blank"
</div> href="https://git.readonly.ch/bouzoure/pop-camarades"
</div> >
</footer> <i class="bi-code-slash"></i>
Code source
</a>
<a class="text-body-secondary" target="_blank" href="/licenses">
<i class="bi-journal-bookmark"></i>
Licences
</a>
</span>
<script src="/static/jquery/jquery.min.js"></script> <div class="float-end">
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> <span class="text-body-secondary">
<script src="/static/functions.js"></script> <i class="bi-stopwatch me-1"></i>
{% block javascript %}{% endblock %} {{ Globals.TimeStart | time_diff }}
</body> <span>ms</span>
</span>
</div>
</div>
</footer>
<script src="/static/jquery/jquery.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="/static/functions.js"></script>
{% block javascript %}{% endblock %}
</body>
</html> </html>

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">
<div class="row mb-3"> <form id="list" method="post">
<label for="name" class="form-label col-md-2"> <div class="row mb-3">
Nom <label for="name" class="form-label col-md-2"> Nom </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="name"
id="name" class="form-control"
class="form-control" type="text"
type="text" name="name"
name="name" required
required value="{{ List.Name }}"
value="{{ List.Name }}" autocomplete="off"
autocomplete="off" autofocus
autofocus />
> </div>
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="multi" id="multi"
name="multi" name="multi"
{% if List.Multi %}checked{% endif %} {% if List.Multi %}checked{% endif %}
autocomplete="off" autocomplete="off"
> />
<label for="multi" class="form-label"> <label for="multi" class="form-label">
Liste à choix multiples Liste à choix multiples
</label> </label>
</div> </div>
</div> </div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}

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">
<div class="row mb-3"> <form id="listitem" method="post">
<label for="value" class="form-label col-md-2"> <div class="row mb-3">
Valeur <label for="value" class="form-label col-md-2"> Valeur </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="value"
id="value" class="form-control"
class="form-control" type="text"
type="text" name="value"
name="value" required
required value="{{ ListItem.Value }}"
value="{{ ListItem.Value }}" autocomplete="off"
autocomplete="off" autofocus
autofocus />
> </div>
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="default" id="default"
name="default" name="default"
autocomplete="off" autocomplete="off"
{% if ListItem.Default %} {% if ListItem.Default %}
checked checked
{% endif %} {% endif %}
> />
<label for="default" class="form-label"> <label for="default" class="form-label">
Valeur sélectionnée par défaut Valeur sélectionnée par défaut
</label> </label>
</div> </div>
</div> </div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}

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 }} <form id="login" method="post">
</div> <div class="mb-3">
{% endif %} <label for="email" class="form-label"> Adresse email </label>
<input
<form id="login" method="post"> id="email"
<div class="mb-3"> class="form-control"
<label for="email" class="form-label"> type="email"
Adresse email name="email"
</label> required
<input autofocus
id="email" />
class="form-control" </div>
type="email" <div class="mb-3">
name="email" <label for="password" class="form-label"> Mot de passe </label>
required <input
autofocus id="password"
> class="form-control"
</div> type="password"
<div class="mb-3"> name="password"
<label for="password" class="form-label"> required
Mot de passe />
</label> </div>
<input <div class="mb-3">
id="password" <input
class="form-control" type="checkbox"
type="password" class="form-check-input me-2"
name="password" id="save_session"
required name="save_session"
> />
</div> <label for="save_session" class="form-label">
<div class="mb-3"> Se souvenir de moi
<input </label>
type="checkbox" </div>
class="form-check-input me-2" <div class="text-end">
id="save_session" <button class="btn btn-outline-primary" type="submit">
name="save_session" <i class="me-1 bi-box-arrow-in-right"></i>
> Connexion
<label for="save_session" class="form-label"> </button>
Se souvenir de moi </div>
</label> </form>
</div> </div>
<div class="text-end"> </div>
<button class="btn btn-outline-primary" type="submit"> </div>
<i class="me-1 bi-box-arrow-in-right"></i> </div>
Connexion
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}

View file

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

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>
</ol> </nav>
</nav> <hr />
<hr> </div>
</div>
<div class="my-3 text-end"> <div class="my-3 text-end">
{% if MembersPage %} {% if MembersPage %}
<div class="btn-group"> <div class="btn-group">
<a class="btn btn-outline-primary" href="/members/add"> <a class="btn btn-outline-primary" href="/members/add">
<i class="bi-plus-lg"></i> <i class="bi-plus-lg"></i>
Ajouter Ajouter
</a> </a>
<a class="btn btn-outline-primary" href="/members/export?s={{ SearchJSON|urlencode }}"> <a
<i class="bi-filetype-csv"></i> class="btn btn-outline-primary"
Exporter href="/members/export?s={{ SearchJSON|urlencode }}"
</a> >
</div> <i class="bi-filetype-csv"></i>
{% else %} Exporter
<div class="btn-group"> </a>
<a class="btn btn-outline-primary" href="/contacts/add"> </div>
<i class="bi-plus-lg"></i> {% else %}
Ajouter <div class="btn-group">
</a> <a class="btn btn-outline-primary" href="/contacts/add">
<a class="btn btn-outline-primary" href="/contacts/export?s={{ SearchJSON|urlencode }}"> <i class="bi-plus-lg"></i>
<i class="bi-filetype-csv"></i> Ajouter
Exporter </a>
</a> <a
</div> class="btn btn-outline-primary"
{% endif %} href="/contacts/export?s={{ SearchJSON|urlencode }}"
</div> >
<i class="bi-filetype-csv"></i>
Exporter
</a>
</div>
{% endif %}
</div>
<div id="search-container" class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3"> <div
<div class="row"> id="search-container"
<div class="col-lg-6 mb-3"> class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3"
>
<div class="row">
<div class="col-lg-6 mb-3">
<label for="name" class="form-label">Nom et prénom</label>
<input
type="text"
class="form-control"
id="name"
data-search-field="name"
data-search-advanced="false"
name="name"
/>
</div>
<div class="col-sm-6 col-lg-3 mb-3">
<label for="section" class="form-label">Section</label>
<select
class="form-select"
id="section"
data-search-field="section"
data-search-type="int"
data-search-advanced="false"
name="section"
>
<option value=""></option>
{% for Section in Sections %}
<option value="{{ Section.ID }}">{{ Section.Name }}</option>
{% endfor %}
</select>
</div>
<div class="col-sm-6 col-lg-3 mb-3 pt-3">
{% if PermShow %}
<div class="form-check form-switch">
<input
class="form-check-input"
type="checkbox"
role="switch"
data-search-field="active"
data-search-advanced="false"
id="active"
checked
/>
{% if MembersPage %}
<label class="form-check-label" for="active"
>Afficher membres actifs</label
>
{% else %}
<label class="form-check-label" for="active"
>Afficher contacts actifs</label
>
{% endif %}
</div>
{% endif %}
<label for="name" class="form-label">Nom et prénom</label> {% if PermShowArchived %}
<input type="text" class="form-control" id="name" data-search-field="name" data-search-advanced="false" name="name"> <div class="form-check form-switch">
<input
class="form-check-input"
type="checkbox"
role="switch"
data-search-field="archive"
data-search-advanced="false"
id="archive"
/>
{% if MembersPage %}
<label class="form-check-label" for="archive"
>Afficher membres archivés</label
>
{% else %}
<label class="form-check-label" for="archive"
>Afficher contacts archivés</label
>
{% endif %}
</div>
{% endif %}
</div>
</div>
</div> <div class="d-none" id="advanced-section">
<div class="col-sm-6 col-lg-3 mb-3"> <div class="row">
<div class="col-lg-6 mb-3">
<label for="email" class="form-label">Email</label>
<input
type="text"
class="form-control"
id="email"
data-search-field="email"
data-search-advanced="true"
name="email"
/>
</div>
<div class="col-lg-6 mb-3">
<label for="phone" class="form-label">Téléphone</label>
<input
type="text"
class="form-control"
id="phone"
data-search-field="phone"
data-search-advanced="true"
name="phone"
/>
</div>
<div class="col-lg-6 mb-3">
<label for="address" class="form-label">Adresse</label>
<input
type="text"
class="form-control"
id="address"
data-search-field="address"
data-search-advanced="true"
name="address"
/>
</div>
<div class="col-sm-4 col-lg-2 mb-3">
<label for="postal_code" class="form-label">Code postal</label>
<input
type="text"
class="form-control"
id="postal_code"
data-search-field="postal_code"
data-search-advanced="true"
name="postal_code"
/>
</div>
<div class="col-sm-8 col-lg-4 mb-3">
<label for="city" class="form-label">Lieu</label>
<input
type="text"
class="form-control"
id="city"
data-search-field="city"
data-search-advanced="true"
name="city"
/>
</div>
</div>
<label for="section" class="form-label">Section</label> <div id="search-fields-model" class="row d-none">
<select class="form-select" id="section" data-search-field="section" data-search-type="int" data-search-advanced="false" name="section"> <div class="start-col col-lg-6 mb-3">
<option value=""></option> <label class="form-label">Champ supplémentaire</label>
{% for Section in Sections %} <select class="form-select field-select" data-last-field="">
<option value="{{ Section.ID }}"> <option value=""></option>
{{ Section.Name }} {% for Field in Fields %}
</option> <option value="{{ Field.ID }}">{{ Field.Name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div>
<div class="end-col col-lg-6 mb-3">
<label class="form-label">Valeur</label>
<input type="text" class="form-control" disabled />
</div>
</div>
</div> <div id="search-fields" class="mb-3"></div>
<div class="col-sm-6 col-lg-3 mb-3 pt-3"> </div>
{% if PermShow %}
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" data-search-field="active" data-search-advanced="false" id="active" checked>
{% if MembersPage %}
<label class="form-check-label" for="active">Afficher membres actifs</label>
{% else %}
<label class="form-check-label" for="active">Afficher contacts actifs</label>
{% endif %}
</div>
{% endif %}
{% if PermShowArchived %} <div class="row mt-2">
<div class="form-check form-switch"> <div class="col-6">
<input class="form-check-input" type="checkbox" role="switch" data-search-field="archive" data-search-advanced="false" id="archive"> <button
{% if MembersPage %} class="btn btn-outline-primary"
<label class="form-check-label" for="archive">Afficher membres archivés</label> id="advanced"
{% else %} data-state="false"
<label class="form-check-label" for="archive">Afficher contacts archivés</label> type="button"
{% endif %} >
</div> <i class="bi-arrow-down me-1"></i> Avancé
{% endif %} </button>
<button
class="btn btn-outline-primary"
id="reset-search"
type="button"
>
<i class="bi-arrow-clockwise me-1"></i> Réinitialiser
</button>
</div>
<div class="col-6 text-end">
<button class="btn btn-outline-success" id="search" type="button">
<i class="bi-search me-1"></i> Recherche
</button>
</div>
</div>
</div> <form id="search-form" method="get" class="d-none">
</div> <input
type="hidden"
id="search-page"
name="p"
value="{{ Pagination.CurrentPage }}"
/>
<input
type="hidden"
id="search-json"
name="s"
value="{{ SearchJSON }}"
/>
</form>
</div>
<div class="d-none" id="advanced-section"> <div class="table-responsive">
<div class="row"> <table class="table">
<div class="col-lg-6 mb-3"> <thead>
<tr>
<th class="w-25">Nom</th>
<th class="w-50 d-none d-sm-table-cell">Adresse</th>
<th class="w-25">Section</th>
</tr>
</thead>
<tbody>
{% for Person in People %}
<tr>
<td>
{% if Person.IsMember %}
<a href="/members/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
{% else %}
<a href="/contacts/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
{% endif %}
</td>
<td class="d-none d-sm-table-cell">
{{ Person.Address1 }}
{% if Person.Address1 and (Person.PostalCode or Person.City) %}
&ndash;
{% endif %}
{{ Person.PostalCode }}
{{ Person.City }}
</td>
<td>
{% if Person.SectionID %}
{{ Person.Section.Name }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<label for="email" class="form-label">Email</label> <nav class="mt-3 mb-5">
<input type="text" class="form-control" id="email" data-search-field="email" data-search-advanced="true" name="email"> <ul class="pagination justify-content-center">
{% if Pagination.CurrentPage <= 1 %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-left"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?p=1&s={{ SearchJSON|urlencode }}">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item">
<a
class="page-link"
href="?&p={{ Pagination.CurrentPage - 1 }}&s={{ SearchJSON|urlencode }}"
>
<i class="bi-caret-left"></i>
</a>
</li>
{% endif %}
</div> {% for i in Pagination.Pages %}
<div class="col-lg-6 mb-3"> <li class="page-item">
<a
{% if i == Pagination.CurrentPage %}
class="page-link active"
{% else %}
class="page-link"
{% endif %}
href="?&p={{ i }}&s={{ SearchJSON|urlencode }}"
>
{{ i }}
</a>
</li>
{% endfor %}
<label for="phone" class="form-label">Téléphone</label> {% if Pagination.CurrentPage >= Pagination.MaxPages %}
<input type="text" class="form-control" id="phone" data-search-field="phone" data-search-advanced="true" name="phone"> <li class="page-item disabled">
<a class="page-link" href="javascript:;">
</div> <i class="bi-caret-right"></i>
<div class="col-lg-6 mb-3"> </a>
</li>
<label for="address" class="form-label">Adresse</label> <li class="page-item disabled">
<input type="text" class="form-control" id="address" data-search-field="address" data-search-advanced="true" name="address"> <a class="page-link" href="javascript:;">
<i class="bi-fast-forward"></i>
</div> </a>
<div class="col-sm-4 col-lg-2 mb-3"> </li>
{% else %}
<label for="postal_code" class="form-label">Code postal</label> <li class="page-item">
<input type="text" class="form-control" id="postal_code" data-search-field="postal_code" data-search-advanced="true" name="postal_code"> <a
class="page-link"
</div> href="?&p={{ Pagination.CurrentPage + 1 }}&s={{ SearchJSON|urlencode }}"
<div class="col-sm-8 col-lg-4 mb-3"> >
<i class="bi-caret-right"></i>
<label for="city" class="form-label">Lieu</label> </a>
<input type="text" class="form-control" id="city" data-search-field="city" data-search-advanced="true" name="city"> </li>
<li class="page-item">
</div> <a
</div> class="page-link"
href="?p={{ Pagination.MaxPages }}&s={{ SearchJSON|urlencode }}"
<div id="search-fields-model" class="row d-none"> >
<div class="start-col col-lg-6 mb-3"> <i class="bi-fast-forward"></i>
<label class="form-label">Champ supplémentaire</label> </a>
<select class="form-select field-select" data-last-field=""> </li>
<option value=""></option> {% endif %}
{% for Field in Fields %} </ul>
<option value="{{ Field.ID }}"> </nav>
{{ Field.Name }} </div>
</option>
{% endfor %}
</select>
</div>
<div class="end-col col-lg-6 mb-3">
<label class="form-label">Valeur</label>
<input type="text" class="form-control" disabled>
</div>
</div>
<div id="search-fields" class="mb-3"></div>
</div>
<div class="row mt-2">
<div class="col-6">
<button class="btn btn-outline-primary" id="advanced" data-state="false" type="button">
<i class="bi-arrow-down me-1"></i> Avancé
</button>
<button class="btn btn-outline-primary" id="reset-search" type="button">
<i class="bi-arrow-clockwise me-1"></i> Réinitialiser
</button>
</div>
<div class="col-6 text-end">
<button class="btn btn-outline-success" id="search" type="button">
<i class="bi-search me-1"></i> Recherche
</button>
</div>
</div>
<form id="search-form" method="get" class="d-none">
<input type="hidden" id="search-page" name="p" value="{{ Pagination.CurrentPage }}">
<input type="hidden" id="search-json" name="s" value="{{ SearchJSON }}">
</form>
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th class="w-25">Nom</th>
<th class="w-50 d-none d-sm-table-cell">Adresse</th>
<th class="w-25">Section</th>
</tr>
</thead>
<tbody>
{% for Person in People %}
<tr>
<td>
{% if Person.IsMember %}
<a href="/members/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
{% else %}
<a href="/contacts/{{ Person.ID }}">
{{ Person.LastName }} {{ Person.FirstName }}
</a>
{% endif %}
</td>
<td class="d-none d-sm-table-cell">
{{ Person.Address1 }}
{% if Person.Address1 and (Person.PostalCode or Person.City) %}
&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>
{% else %}
<li class="breadcrumb-item active">Ajouter</li>
{% endif %}
</ol>
</nav>
<hr>
</div>
{% if Errors %} <li class="breadcrumb-item active">Modifier</li>
<div class="alert alert-danger"> {% else %}
<ul class="m-0"> <li class="breadcrumb-item active">Ajouter</li>
{% for Error in Errors %} {% endif %}
<li>{{ Error }}</li> </ol>
{% endfor %} </nav>
</ul> <hr />
</div> </div>
{% endif %}
<form id="person" method="post">
<div class="row mb-3"> {% if Errors %}
<label for="last_name" class="form-label col-md-2"> <div class="alert alert-danger">
Nom de famille <ul class="m-0">
</label> {% for Error in Errors %}
<div class="col-md-10"> <li>{{ Error }}</li>
<input {% endfor %}
id="name" </ul>
class="form-control" </div>
type="text" {% endif %}
name="last_name"
value="{{ Person.LastName }}"
autofocus
autocomplete="off"
>
</div>
</div>
<div class="row mb-3"> <form id="person" method="post">
<label for="first_name" class="form-label col-md-2"> <div class="row mb-3">
Prénom <label for="last_name" class="form-label col-md-2">
</label> Nom de famille
<div class="col-md-10"> </label>
<input <div class="col-md-10">
id="first_name" <input
class="form-control" id="name"
type="text" class="form-control"
name="first_name" type="text"
required name="last_name"
value="{{ Person.FirstName }}" value="{{ Person.LastName }}"
autocomplete="off" autofocus
> autocomplete="off"
</div> />
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="email" class="form-label col-md-2"> <label for="first_name" class="form-label col-md-2"> Prénom </label>
Email <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="first_name"
<input class="form-control"
id="email" type="text"
class="form-control" name="first_name"
type="text" required
name="email" value="{{ Person.FirstName }}"
value="{{ Person.Email }}" autocomplete="off"
autocomplete="off" />
> </div>
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="phone" class="form-label col-md-2"> <label for="email" class="form-label col-md-2"> Email </label>
Téléphone fixe <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="email"
<input class="form-control"
id="phone" type="text"
class="form-control" name="email"
type="text" value="{{ Person.Email }}"
name="phone" autocomplete="off"
value="{{ Person.Phone }}" />
autocomplete="off" </div>
> </div>
</div>
</div>
<div class="row mb-5"> <div class="row mb-3">
<label for="mobile" class="form-label col-md-2"> <label for="phone" class="form-label col-md-2"> Téléphone fixe </label>
Téléphone mobile <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="phone"
<input class="form-control"
id="mobile" type="text"
class="form-control" name="phone"
type="text" value="{{ Person.Phone }}"
name="mobile" autocomplete="off"
value="{{ Person.Mobile }}" />
autocomplete="off" </div>
> </div>
</div>
</div>
<div class="row mb-2"> <div class="row mb-5">
<label for="address1" class="form-label col-md-2"> <label for="mobile" class="form-label col-md-2">
Adresse Téléphone mobile
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<input <input
id="address1" id="mobile"
class="form-control" class="form-control"
type="text" type="text"
name="address1" name="mobile"
value="{{ Person.Address1 }}" value="{{ Person.Mobile }}"
placeholder="Ligne 1" autocomplete="off"
autocomplete="off" />
> </div>
</div> </div>
</div>
<div class="row mb-2"> <div class="row mb-2">
<div class="col-md-10 offset-md-2"> <label for="address1" class="form-label col-md-2"> Adresse </label>
<input <div class="col-md-10">
id="address2" <input
class="form-control" id="address1"
type="text" class="form-control"
name="address2" type="text"
value="{{ Person.Address2 }}" name="address1"
placeholder="Ligne 2" value="{{ Person.Address1 }}"
autocomplete="off" placeholder="Ligne 1"
> autocomplete="off"
</div> />
</div> </div>
</div>
<div class="row mb-5"> <div class="row mb-2">
<div class="col-md-3 col-lg-2 offset-md-2 mb-2 mb-md-0"> <div class="col-md-10 offset-md-2">
<input <input
id="postal_code" id="address2"
class="form-control" class="form-control"
type="text" type="text"
name="postal_code" name="address2"
placeholder="Code postal" value="{{ Person.Address2 }}"
pattern="[0-9]{4}" placeholder="Ligne 2"
value="{{ Person.PostalCode }}" autocomplete="off"
autocomplete="off" />
> </div>
</div> </div>
<div class="col-md-7 col-lg-8">
<input
id="city"
class="form-control"
type="text"
name="city"
value="{{ Person.City }}"
placeholder="Lieu"
autocomplete="off"
>
</div>
</div>
<div class="row mb-3"> <div class="row mb-5">
<label for="section" class="form-label col-md-2"> <div class="col-md-3 col-lg-2 offset-md-2 mb-2 mb-md-0">
Section <input
</label> id="postal_code"
<div class="col-md-10"> class="form-control"
<select type="text"
class="form-select" name="postal_code"
name="section" placeholder="Code postal"
id="section" pattern="[0-9]{4}"
required value="{{ Person.PostalCode }}"
autocomplete="off" autocomplete="off"
> />
{% for Section in Sections %} </div>
<option <div class="col-md-7 col-lg-8">
value="{{ Section.ID }}" <input
{% if Section.ID == Person.SectionID %} id="city"
selected class="form-control"
{% endif %} type="text"
> name="city"
{{ Section.Name }} value="{{ Person.City }}"
</option> placeholder="Lieu"
{% endfor %} autocomplete="off"
</select> />
</div> </div>
</div> </div>
{% if Fields %} <div class="row mb-3">
<div class="mt-4 mb-3"> <label for="section" class="form-label col-md-2"> Section </label>
<span class="h4"> <div class="col-md-10">
Champs supplémentaires <select
</span> class="form-select"
</div> name="section"
{% endif %} id="section"
required
autocomplete="off"
>
{% for Section in Sections %}
<option
value="{{ Section.ID }}"
{% if Section.ID == Person.SectionID %}
selected
{% endif %}
>
{{ Section.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
{% for Field in Fields %} {% if Fields %}
<div class="row mb-3"> <div class="mt-4 mb-3">
<label for="field-{{ Field.ID }}" class="form-label col-md-2"> <span class="h4"> Champs supplémentaires </span>
{{ Field.Name }} </div>
</label> {% endif %}
<div class="col-md-10">
{% if Field.FieldType == "text" %} {% for Field in Fields %}
<input <div class="row mb-3">
id="field-{{ Field.ID }}" <label for="field-{{ Field.ID }}" class="form-label col-md-2">
class="form-control" {{ Field.Name }}
type="text" </label>
name="field-{{ Field.ID }}" <div class="col-md-10">
autocomplete="off" {% if Field.FieldType == "text" %}
<input
id="field-{{ Field.ID }}"
class="form-control"
type="text"
name="field-{{ Field.ID }}"
autocomplete="off"
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueString.String }}"
{% endif %}
{% endfor %}
/>
{% endif %}
{% for FieldValue in FieldValues %} {% if Field.FieldType == "longtext" %}
{% if FieldValue.FieldID == Field.ID %} <textarea
value="{{ FieldValue.ValueString.String }}" id="field-{{ Field.ID }}"
{% endif %} class="form-control"
{% endfor %} name="field-{{ Field.ID }}"
> rows="4"
{% endif %} autocomplete="off"
>
{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString.String }}{% endif %}{% endfor %}</textarea
>
{% endif %}
{% if Field.FieldType == "longtext" %} {% if Field.FieldType == "number" %}
<textarea <input
id="field-{{ Field.ID }}" id="field-{{ Field.ID }}"
class="form-control" class="form-control"
name="field-{{ Field.ID }}" type="number"
rows="4" name="field-{{ Field.ID }}"
autocomplete="off" autocomplete="off"
>{% for FieldValue in FieldValues %}{% if FieldValue.FieldID == Field.ID %}{{ FieldValue.ValueString.String }}{% endif %}{% endfor %}</textarea> {% for FieldValue in FieldValues %}
{% endif %} {% if FieldValue.FieldID == Field.ID %}
value="{{ FieldValue.ValueInt.Int64 }}"
{% if Field.FieldType == "number" %} {% endif %}
<input {% endfor %}
id="field-{{ Field.ID }}" />
class="form-control" {% endif %}
type="number"
name="field-{{ Field.ID }}"
autocomplete="off"
{% for FieldValue in FieldValues %} {% if Field.FieldType == "date" %}
{% if FieldValue.FieldID == Field.ID %} <input
value="{{ FieldValue.ValueInt.Int64 }}" id="field-{{ Field.ID }}"
{% endif %} class="form-control"
{% endfor %} type="date"
> name="field-{{ Field.ID }}"
{% endif %} autocomplete="off"
{% for FieldValue in FieldValues %}
{% if Field.FieldType == "date" %} {% if FieldValue.FieldID == Field.ID %}
<input value="{{ FieldValue.ValueDate.Time|date:"2006-01-02" }}"
id="field-{{ Field.ID }}" {% endif %}
class="form-control" {% endfor %}
type="date" />
name="field-{{ Field.ID }}" {% endif %}
autocomplete="off"
{% for FieldValue in FieldValues %} {% if Field.FieldType == "list" and !Field.List.Multi %}
{% if FieldValue.FieldID == Field.ID %} <select
value="{{ FieldValue.ValueDate.Time|date:"2006-01-02" }}" id="field-{{ Field.ID }}"
{% endif %} class="form-select"
{% endfor %} name="field-{{ Field.ID }}"
> autocomplete="off"
{% endif %} >
<option value="0">Choisir...</option>
{% for ListItem in Field.List.ListItems %}
<option
value="{{ ListItem.ID }}"
{% if !Person.ID and ListItem.Default %}
selected
{% endif %}
{% if Field.FieldType == "list" and !Field.List.Multi %} {% for FieldValue in FieldValues %}
<select {% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
id="field-{{ Field.ID }}" selected
class="form-select" {% endif %}
name="field-{{ Field.ID }}" {% endfor %}
autocomplete="off" >
> {{ ListItem.Value }}
<option value="0">Choisir...</option> </option>
{% for ListItem in Field.List.ListItems %} {% endfor %}
<option </select>
value="{{ ListItem.ID }}" {% endif %}
{% if !Person.ID and ListItem.Default %} {% if Field.FieldType == "list" and Field.List.Multi %}
selected {% for ListItem in Field.List.ListItems %}
{% endif %} <div class="mb-1">
<input
type="checkbox"
class="form-check-input me-2"
id="field-{{ Field.ID }}-{{ ListItem.ID }}"
name="field-{{ Field.ID }}-{{ ListItem.ID }}"
autocomplete="off"
{% if !Person.ID and ListItem.Default %}
checked
{% endif %}
{% for FieldValue in FieldValues %} {% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %} {% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
selected checked
{% endif %} {% endif %}
{% endfor %} {% endfor %}
> />
{{ ListItem.Value }} <label
</option> for="field-{{ Field.ID }}-{{ ListItem.ID }}"
{% endfor %} class="form-label"
</select> >
{% endif %} {{ ListItem.Value }}
</label>
</div>
{% endfor %}
{% endif %}
</div>
</div>
{% endfor %}
{% if Field.FieldType == "list" and Field.List.Multi %} <div class="my-5">
{% for ListItem in Field.List.ListItems %} <button class="btn btn-outline-primary" type="submit">
<div class="mb-1"> <i class="me-1 bi-floppy"></i>
<input Enregistrer
type="checkbox" </button>
class="form-check-input me-2" </div>
id="field-{{ Field.ID }}-{{ ListItem.ID }}" </form>
name="field-{{ Field.ID }}-{{ ListItem.ID }}" </div>
autocomplete="off"
{% if !Person.ID and ListItem.Default %}
checked
{% endif %}
{% for FieldValue in FieldValues %}
{% if FieldValue.FieldID == Field.ID and FieldValue.ListItemID == ListItem.ID %}
checked
{% endif %}
{% endfor %}
>
<label
for="field-{{ Field.ID }}-{{ ListItem.ID }}"
class="form-label"
>
{{ ListItem.Value }}
</label>
</div>
{% endfor %}
{% endif %}
</div>
</div>
{% endfor %}
<div class="my-5">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
{% endblock %} {% endblock %}

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">
<div class="row mb-3"> <form id="role" method="post">
<label for="name" class="form-label col-md-2"> <div class="row mb-3">
Nom <label for="name" class="form-label col-md-2"> Nom </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="name"
id="name" class="form-control"
class="form-control" type="text"
type="text" name="name"
name="name" required
required value="{{ Role.Name }}"
value="{{ Role.Name }}" autocomplete="off"
autocomplete="off" autofocus
autofocus />
> </div>
</div> </div>
</div>
<div class="mt-4 mb-3 d-md-none"> <div class="mt-4 mb-3 d-md-none">
<span class="h4"> <span class="h4"> Permissions membres </span>
Permissions membres </div>
</span>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-2"> <div class="col-md-2">
<div class="d-none d-md-block"> <div class="d-none d-md-block">Permissions membres</div>
Permissions membres </div>
</div> <div class="col-md-10">
</div> <input
<div class="col-md-10"> type="checkbox"
<input class="form-check-input me-2"
type="checkbox" id="show_member"
class="form-check-input me-2" name="show_member"
id="show_member" autocomplete="off"
name="show_member" {% if Role.ShowMember %}checked{% endif %}
autocomplete="off" />
{% if Role.ShowMember %}checked{% endif %} <label for="show_member" class="form-label"> Afficher membres </label>
> </div>
<label for="show_member" class="form-label"> </div>
Afficher membres
</label>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="create_member" id="create_member"
name="create_member" name="create_member"
autocomplete="off" autocomplete="off"
{% if Role.CreateMember %}checked{% endif %} {% if Role.CreateMember %}checked{% endif %}
> />
<label for="create_member" class="form-label"> <label for="create_member" class="form-label"> Créer membres </label>
Créer membres </div>
</label> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="edit_member" id="edit_member"
name="edit_member" name="edit_member"
autocomplete="off" autocomplete="off"
{% if Role.EditMember %}checked{% endif %} {% if Role.EditMember %}checked{% endif %}
> />
<label for="edit_member" class="form-label"> <label for="edit_member" class="form-label"> Modifier membres </label>
Modifier membres </div>
</label> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="show_archived_member" id="show_archived_member"
name="show_archived_member" name="show_archived_member"
autocomplete="off" autocomplete="off"
{% if Role.ShowArchivedMember %}checked{% endif %} {% if Role.ShowArchivedMember %}checked{% endif %}
> />
<label for="show_archived_member" class="form-label"> <label for="show_archived_member" class="form-label">
Afficher membres archivés Afficher membres archivés
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="archive_member" id="archive_member"
name="archive_member" name="archive_member"
autocomplete="off" autocomplete="off"
{% if Role.ArchiveMember %}checked{% endif %} {% if Role.ArchiveMember %}checked{% endif %}
> />
<label for="archive_member" class="form-label"> <label for="archive_member" class="form-label">
Archiver membres Archiver membres
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="restore_member" id="restore_member"
name="restore_member" name="restore_member"
autocomplete="off" autocomplete="off"
{% if Role.RestoreMember %}checked{% endif %} {% if Role.RestoreMember %}checked{% endif %}
> />
<label for="restore_member" class="form-label"> <label for="restore_member" class="form-label">
Restaurer membres Restaurer membres
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="purge_member" id="purge_member"
name="purge_member" name="purge_member"
autocomplete="off" autocomplete="off"
{% if Role.PurgeMember %}checked{% endif %} {% if Role.PurgeMember %}checked{% endif %}
> />
<label for="purge_member" class="form-label"> <label for="purge_member" class="form-label">
Purger membres (suppression définitive) Purger membres (suppression définitive)
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="convert_member_to_contact" id="convert_member_to_contact"
name="convert_member_to_contact" name="convert_member_to_contact"
autocomplete="off" autocomplete="off"
{% if Role.ConvertMemberToContact %}checked{% endif %} {% if Role.ConvertMemberToContact %}checked{% endif %}
> />
<label for="convert_member_to_contact" class="form-label"> <label for="convert_member_to_contact" class="form-label">
Convertir membres en contacts Convertir membres en contacts
</label> </label>
</div> </div>
</div> </div>
<div class="mt-4 mb-3 d-md-none"> <div class="mt-4 mb-3 d-md-none">
<span class="h4"> <span class="h4"> Permissions contacts </span>
Permissions contacts </div>
</span>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-2"> <div class="col-md-2">
<div class="d-none d-md-block"> <div class="d-none d-md-block">Permissions contacts</div>
Permissions contacts </div>
</div> <div class="col-md-10">
</div> <input
<div class="col-md-10"> type="checkbox"
<input class="form-check-input me-2"
type="checkbox" id="show_contact"
class="form-check-input me-2" name="show_contact"
id="show_contact" autocomplete="off"
name="show_contact" {% if Role.ShowContact %}checked{% endif %}
autocomplete="off" />
{% if Role.ShowContact %}checked{% endif %} <label for="show_contact" class="form-label">
> Afficher contacts
<label for="show_contact" class="form-label"> </label>
Afficher contacts </div>
</label> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="create_contact" id="create_contact"
name="create_contact" name="create_contact"
autocomplete="off" autocomplete="off"
{% if Role.CreateContact %}checked{% endif %} {% if Role.CreateContact %}checked{% endif %}
> />
<label for="create_contact" class="form-label"> <label for="create_contact" class="form-label">
Créer contacts Créer contacts
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="edit_contact" id="edit_contact"
name="edit_contact" name="edit_contact"
autocomplete="off" autocomplete="off"
{% if Role.EditContact %}checked{% endif %} {% if Role.EditContact %}checked{% endif %}
> />
<label for="edit_contact" class="form-label"> <label for="edit_contact" class="form-label">
Modifier contacts Modifier contacts
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="show_archived_contact" id="show_archived_contact"
name="show_archived_contact" name="show_archived_contact"
autocomplete="off" autocomplete="off"
{% if Role.ShowArchivedContact %}checked{% endif %} {% if Role.ShowArchivedContact %}checked{% endif %}
> />
<label for="show_archived_contact" class="form-label"> <label for="show_archived_contact" class="form-label">
Afficher contacts archivés Afficher contacts archivés
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="archive_contact" id="archive_contact"
name="archive_contact" name="archive_contact"
autocomplete="off" autocomplete="off"
{% if Role.ArchiveContact %}checked{% endif %} {% if Role.ArchiveContact %}checked{% endif %}
> />
<label for="archive_contact" class="form-label"> <label for="archive_contact" class="form-label">
Archiver contacts Archiver contacts
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="restore_contact" id="restore_contact"
name="restore_contact" name="restore_contact"
autocomplete="off" autocomplete="off"
{% if Role.RestoreContact %}checked{% endif %} {% if Role.RestoreContact %}checked{% endif %}
> />
<label for="restore_contact" class="form-label"> <label for="restore_contact" class="form-label">
Restaurer contacts Restaurer contacts
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="purge_contact" id="purge_contact"
name="purge_contact" name="purge_contact"
autocomplete="off" autocomplete="off"
{% if Role.PurgeContact %}checked{% endif %} {% if Role.PurgeContact %}checked{% endif %}
> />
<label for="purge_contact" class="form-label"> <label for="purge_contact" class="form-label">
Purger contacts (suppression définitive) Purger contacts (suppression définitive)
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="convert_contact_to_member" id="convert_contact_to_member"
name="convert_contact_to_member" name="convert_contact_to_member"
autocomplete="off" autocomplete="off"
{% if Role.ConvertContactToMember %}checked{% endif %} {% if Role.ConvertContactToMember %}checked{% endif %}
> />
<label for="convert_contact_to_member" class="form-label"> <label for="convert_contact_to_member" class="form-label">
Convertir contacts en membres Convertir contacts en membres
</label> </label>
</div> </div>
</div> </div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}

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">
<div class="row mb-3"> <form id="section" method="post">
<label for="name" class="form-label col-md-2"> <div class="row mb-3">
Nom <label for="name" class="form-label col-md-2"> Nom </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="name"
id="name" class="form-control"
class="form-control" type="text"
type="text" name="name"
name="name" required
required value="{{ Section.Name }}"
value="{{ Section.Name }}" autocomplete="off"
autocomplete="off" autofocus
autofocus />
> </div>
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="short_name" class="form-label col-md-2"> <label for="short_name" class="form-label col-md-2">
Nom technique Nom technique
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<input <input
id="short_name" id="short_name"
class="form-control" class="form-control"
type="text" type="text"
name="short_name" name="short_name"
required required
value="{{ Section.ShortName }}" value="{{ Section.ShortName }}"
autocomplete="off" autocomplete="off"
> />
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<label for="parent_section" class="form-label col-md-2"> <label for="parent_section" class="form-label col-md-2">
Section parente Section parente
</label> </label>
<div class="col-md-10"> <div class="col-md-10">
<select <select
id="parent_section" id="parent_section"
class="form-select" class="form-select"
name="parent_section" name="parent_section"
autocomplete="off" autocomplete="off"
{% if IsParent %} {% if IsParent %}
disabled disabled
{% endif %} {% endif %}
> >
<option value="0"> <option value="0">Choisir...</option>
Choisir... {% if !IsParent %}
</option> {% for ParentSection in Sections %}
{% if !IsParent %} <option
{% for ParentSection in Sections %} value="{{ ParentSection.ID }}"
<option {% if Section.ParentSectionID == ParentSection.ID %}selected{% endif %}
value="{{ ParentSection.ID }}" >
{% if Section.ParentSectionID == ParentSection.ID %}selected{% endif %} {{ ParentSection.Name }}
> </option>
{{ ParentSection.Name }} {% endfor %}
</option> {% endif %}
{% endfor %} </select>
{% endif %} </div>
</select> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="contains_members" id="contains_members"
name="contains_members" name="contains_members"
autocomplete="off" autocomplete="off"
{% if Section.ContainsMembers %} {% if Section.ContainsMembers %}
checked checked
{% endif %} {% endif %}
> />
<label for="contains_members" class="form-label"> <label for="contains_members" class="form-label">
Contient des membres Contient des membres
</label> </label>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="contains_contacts" id="contains_contacts"
name="contains_contacts" name="contains_contacts"
autocomplete="off" autocomplete="off"
{% if Section.ContainsContacts %} {% if Section.ContainsContacts %}
checked checked
{% endif %} {% endif %}
> />
<label for="contains_contacts" class="form-label"> <label for="contains_contacts" class="form-label">
Contient des contacts Contient des contacts
</label> </label>
</div> </div>
</div> </div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}

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">
Le double facteur protège lapplication et
sécurise les données personnelles de nos camarades.
Même en cas de vol de mot de passe, laccès est bloqué sans une
vérification supplémentaire.
</div>
<div class="my-4 text-center"> <div class="lh-sm text-center">
<img src="{{ QrCode }}" alt="Code QR"> Le double facteur protège lapplication et sécurise les données
personnelles de nos camarades. Même en cas de vol de mot de passe,
laccès est bloqué sans une vérification supplémentaire.
</div>
<div class="mt-2"> <div class="my-4 text-center">
<a href="javascript:;" data-bs-toggle="modal" data-bs-target="#modal-help"> <img src="{{ QrCode }}" alt="Code QR" />
<i class="bi-info-square"></i>
Comment utiliser ce code QR ?
</a>
</div>
</div>
<form id="login" method="post"> <div class="mt-2">
<div class="mb-3"> <a
<label for="secret" class="form-label"> href="javascript:;"
Secret (si pas possible de scanner le code QR) data-bs-toggle="modal"
</label> data-bs-target="#modal-help"
<input >
id="secret" <i class="bi-info-square"></i>
class="form-control" Comment utiliser ce code QR ?
type="text" </a>
name="secret" </div>
disabled </div>
value="{{ Secret }}"
>
</div>
<div class="mb-3">
<label for="otp" class="form-label">
Code temporaire
</label>
<input
id="otp"
class="form-control"
type="text"
name="otp"
required
placeholder="000000"
pattern="[0-9]{6}"
autofocus
>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-check-circle"></i>
Vérifier
</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div id="modal-help" class="modal" tabindex="-1"> <form id="login" method="post">
<div class="modal-dialog modal-dialog-centered"> <div class="mb-3">
<div class="modal-content"> <label for="secret" class="form-label">
<div class="modal-header"> Secret (si pas possible de scanner le code QR)
<h5 class="modal-title">Aide</h5> </label>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button> <input
</div> id="secret"
<div class="modal-body"> class="form-control"
<ol> type="text"
<li> name="secret"
<b>Téléchargez une application dauthentification :</b> disabled
Installez une application compatible TOTP (comme Google Authenticator, value="{{ Secret }}"
Microsoft Authenticator ou Authy) sur votre smartphone. />
</li> </div>
<li> <div class="mb-3">
<b>Scannez le code QR :</b> <label for="otp" class="form-label"> Code temporaire </label>
Ouvrez l'application, choisissez "Ajouter un compte" ou "Scanner un code QR", <input
puis utilisez votre appareil pour scanner le QR code affiché. id="otp"
</li> class="form-control"
<li> type="text"
<b>Enregistrez le compte :</b> name="otp"
Une fois scanné, l'application générera un code à usage unique qui required
se renouvelle régulièrement. placeholder="000000"
</li> pattern="[0-9]{6}"
<li> autofocus
<b>Testez le code :</b> />
Entrez le code généré dans l'application pour confirmer lenrôlement. </div>
</li> <div class="text-end">
</ol> <button class="btn btn-outline-primary" type="submit">
</div> <i class="me-1 bi-check-circle"></i>
</div> Vérifier
</div> </button>
</div> </div>
</form>
</div>
</div>
</div>
</div>
<div id="modal-help" class="modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Aide</h5>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
></button>
</div>
<div class="modal-body">
<ol>
<li>
<b>Téléchargez une application dauthentification :</b>
Installez une application compatible TOTP (comme Google
Authenticator, Microsoft Authenticator ou Authy) sur votre
smartphone.
</li>
<li>
<b>Scannez le code QR :</b>
Ouvrez l'application, choisissez "Ajouter un compte" ou "Scanner
un code QR", puis utilisez votre appareil pour scanner le QR code
affiché.
</li>
<li>
<b>Enregistrez le compte :</b>
Une fois scanné, l'application générera un code à usage unique qui
se renouvelle régulièrement.
</li>
<li>
<b>Testez le code :</b>
Entrez le code généré dans l'application pour confirmer
lenrôlement.
</li>
</ol>
</div>
</div>
</div>
</div>
{% endblock %} {% 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">
<div class="row mb-3"> <form id="user" method="post">
<label for="name" class="form-label col-md-2"> <div class="row mb-3">
Nom complet <label for="name" class="form-label col-md-2"> Nom complet </label>
</label> <div class="col-md-10">
<div class="col-md-10"> <input
<input id="name"
id="name" class="form-control"
class="form-control" type="text"
type="text" name="name"
name="name" required
required value="{{ User.Name }}"
value="{{ User.Name }}" autocomplete="off"
autocomplete="off" autofocus
autofocus />
> </div>
</div> </div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="email" class="form-label col-md-2"> <label for="email" class="form-label col-md-2"> Email </label>
Email <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="email"
<input class="form-control"
id="email" type="email"
class="form-control" name="email"
type="email" required
name="email" value="{{ User.Email }}"
required autocomplete="off"
value="{{ User.Email }}" />
autocomplete="off" </div>
> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="is_admin" id="is_admin"
name="is_admin" name="is_admin"
autocomplete="off" autocomplete="off"
{% if User.IsAdmin %} {% if User.IsAdmin %}
checked checked
{% endif %} {% endif %}
> />
<label for="is_admin" class="form-label"> <label for="is_admin" class="form-label"> Administrateur </label>
Administrateur </div>
</label> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="password" class="form-label col-md-2"> <label for="password" class="form-label col-md-2"> Mot de passe </label>
Mot de passe <div class="col-md-10">
</label> <input
<div class="col-md-10"> id="password"
<input class="form-control"
id="password" type="password"
class="form-control" name="password"
type="password" autocomplete="off"
name="password" {% if !User.ID %}required{% endif %}
autocomplete="off" />
{% if !User.ID %}required{% endif %} {% if User.ID %}
> <div class="form-text">Laisser vide pour ne pas changer</div>
{% if User.ID %} {% endif %}
<div class="form-text"> </div>
Laisser vide pour ne pas changer </div>
</div>
{% endif %}
</div>
</div>
{% if User.ID %} {% if User.ID %}
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-10 offset-md-2"> <div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
id="reset_totp" id="reset_totp"
name="reset_totp" name="reset_totp"
autocomplete="off" autocomplete="off"
> />
<label for="reset_totp" class="form-label"> <label for="reset_totp" class="form-label">
Réinitialiser le double facteur (TOTP) Réinitialiser le double facteur (TOTP)
</label> </label>
<div class="form-text"> <div class="form-text">
Si la case est cochée, l'utilisateur devra effectuer Si la case est cochée, l'utilisateur devra effectuer un enrôlement
un enrôlement TOTP à la prochaine connexion. TOTP à la prochaine connexion.
</div> </div>
</div> </div>
</div> </div>
{% endif %} {% endif %}
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i> <i class="me-1 bi-floppy"></i>
Enregistrer Enregistrer
</button> </button>
</div> </div>
</form> </form>
</div>
</div>
{% endblock %} {% endblock %}

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 %}
<form id="user" method="post">
{% for Section in Sections %} {% if Sections %}
<div class="row mb-3"> <form id="user" method="post">
<div class="col-md-2"> {% for Section in Sections %}
{{ Section.Name }} <div class="row mb-3">
</div> <div class="col-md-2">{{ Section.Name }}</div>
<div class="col-md-10"> <div class="col-md-10">
<div class="input-group"> <div class="input-group">
<span class="input-group-text"> <span class="input-group-text">
<i class="bi-key"></i> <i class="bi-key"></i>
</span> </span>
<select <select
class="form-select" class="form-select"
name="section-{{ Section.ID }}" name="section-{{ Section.ID }}"
id="section-{{ Section.ID }}" id="section-{{ Section.ID }}"
autocomplete="off" autocomplete="off"
> >
<option value="0">Choisir...</option> <option value="0">Choisir...</option>
{% for Role in Roles %} {% for Role in Roles %}
<option <option
value="{{ Role.ID }}" value="{{ Role.ID }}"
{% for UserRole in UserRoles %}
{% if Section.ID == UserRole.SectionID and Role.ID == UserRole.RoleID %}
selected
{% endif %}
{% endfor %}
>
{{ Role.Name }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
{% endfor %}
{% for UserRole in UserRoles %} <div class="my-4">
{% if Section.ID == UserRole.SectionID and Role.ID == UserRole.RoleID %} <button class="btn btn-outline-primary" type="submit">
selected <i class="me-1 bi-floppy"></i>
{% endif %} Enregistrer
{% endfor %} </button>
> </div>
{{ Role.Name }} </form>
</option> {% else %}
{% endfor %} <div class="my-4">Pas de section pour le moment</div>
</select> {% endif %}
</div> </div>
</div>
</div>
{% endfor %}
<div class="my-4">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
{% else %}
<div class="my-4">
Pas de section pour le moment
</div>
{% endif %}
</div>
{% endblock %} {% endblock %}

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">
<div class="mb-3">
<label for="email" class="form-label">
Adresse email
</label>
{% if EmailUpdate %}
<input
id="email"
class="form-control"
type="email"
name="email"
required
value="{{ Email }}"
autofocus
>
{% else %}
<input
id="email"
class="form-control"
type="text"
name="email"
disabled
value="{{ Email }}"
>
{% endif %}
</div>
<div class="mb-3">
<label for="name" class="form-label">
Nom complet
</label>
<input
id="name"
class="form-control"
type="text"
name="name"
required
value="{{ Name }}"
{% if !EmailUpdate %} <form id="login" method="post">
autofocus <div class="mb-3">
{% endif %} <label for="email" class="form-label"> Adresse email </label>
> {% if EmailUpdate %}
</div> <input
<div class="mb-3"> id="email"
<label for="password" class="form-label"> class="form-control"
Nouveau mot de passe type="email"
</label> name="email"
<input required
id="password" value="{{ Email }}"
class="form-control" autofocus
type="password" />
name="password" {% else %}
required <input
> id="email"
</div> class="form-control"
<div class="mb-3"> type="text"
<label for="password-verify" class="form-label"> name="email"
Vérifier le mot de passe disabled
</label> value="{{ Email }}"
<input />
id="password-verify" {% endif %}
class="form-control" </div>
type="password" <div class="mb-3">
name="password-verify" <label for="name" class="form-label"> Nom complet </label>
required <input
> id="name"
</div> class="form-control"
<div class="text-end"> type="text"
<button class="btn btn-outline-primary" type="submit"> name="name"
<i class="me-1 bi-floppy"></i> required
Enregistrer value="{{ Name }}"
</button> {% if !EmailUpdate %}
</div> autofocus
</form> {% endif %}
</div> />
</div> </div>
</div> <div class="mb-3">
</div> <label for="password" class="form-label">
Nouveau mot de passe
</label>
<input
id="password"
class="form-control"
type="password"
name="password"
required
/>
</div>
<div class="mb-3">
<label for="password-verify" class="form-label">
Vérifier le mot de passe
</label>
<input
id="password-verify"
class="form-control"
type="password"
name="password-verify"
required
/>
</div>
<div class="text-end">
<button class="btn btn-outline-primary" type="submit">
<i class="me-1 bi-floppy"></i>
Enregistrer
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}