Admin: Gestion des listes
This commit is contained in:
parent
c54cad7738
commit
151a199bc5
13 changed files with 605 additions and 29 deletions
|
|
@ -5,6 +5,11 @@ import "github.com/gofiber/fiber/v2"
|
|||
func Homepage(c *fiber.Ctx) error {
|
||||
return c.Render("index", fiber.Map{
|
||||
"PageTitle": "Accueil",
|
||||
"Title": "Hello, World!",
|
||||
})
|
||||
}
|
||||
|
||||
func Admin(c *fiber.Ctx) error {
|
||||
return c.Render("admin", fiber.Map{
|
||||
"PageTitle": "Administration",
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,37 @@ func Lists(c *fiber.Ctx) error {
|
|||
}
|
||||
|
||||
func ListShow(c *fiber.Ctx) error {
|
||||
return c.SendString("ListShow")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Listes",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
var listItems []models.ListItem
|
||||
db.Find(&listItems, "list_id = ?", id)
|
||||
|
||||
return c.Render("list", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"ListItems": listItems,
|
||||
})
|
||||
}
|
||||
|
||||
func ListAdd(c *fiber.Ctx) error {
|
||||
|
|
@ -77,21 +107,272 @@ func ListAdd(c *fiber.Ctx) error {
|
|||
}
|
||||
|
||||
func ListEdit(c *fiber.Ctx) error {
|
||||
return c.SendString("ListEdit")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Modifier liste",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
var errors []string
|
||||
if c.Method() == "POST" {
|
||||
multiOriginal := list.Multi
|
||||
|
||||
name := c.FormValue("name")
|
||||
multi := c.FormValue("multi")
|
||||
|
||||
if len(name) > 100 || len(name) < 1 {
|
||||
errors = append(errors, "Le nom doit avoir entre 1 et 100 caractères")
|
||||
}
|
||||
|
||||
list.Name = name
|
||||
list.Multi = false
|
||||
if multi == "on" {
|
||||
list.Multi = true
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result := db.Save(&list)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
} else {
|
||||
if !list.Multi && multiOriginal {
|
||||
var listItems []models.ListItem
|
||||
result2 := db.Find(&listItems,
|
||||
"list_id = ? AND `default` = ?",
|
||||
list.ID, true,
|
||||
)
|
||||
|
||||
if result2.RowsAffected > 1 {
|
||||
db.Model(&models.ListItem{}).Where(
|
||||
"list_id = ?", list.ID,
|
||||
).Update("default", false)
|
||||
}
|
||||
}
|
||||
|
||||
c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d",
|
||||
list.ID,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render("list_form", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"Errors": errors,
|
||||
})
|
||||
}
|
||||
|
||||
func ListDelete(c *fiber.Ctx) error {
|
||||
return c.SendString("ListDelete")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
result := db.Delete(&models.List{}, id)
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect("/admin/lists")
|
||||
}
|
||||
|
||||
func ListItemAdd(c *fiber.Ctx) error {
|
||||
return c.SendString("ListItemAdd")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Ajouter un élément à la liste",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
listItem := models.ListItem{
|
||||
ListID: list.ID,
|
||||
}
|
||||
var errors []string
|
||||
|
||||
if c.Method() == "POST" {
|
||||
value := c.FormValue("value")
|
||||
isDefault := c.FormValue("default")
|
||||
|
||||
if len(value) > 100 || len(value) < 1 {
|
||||
errors = append(errors, "La valeur doit avoir entre 1 et 100 caractères")
|
||||
}
|
||||
|
||||
listItem.Value = value
|
||||
listItem.Default = false
|
||||
if isDefault == "on" {
|
||||
listItem.Default = true
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result := db.Create(&listItem)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
} else {
|
||||
if listItem.Default && !list.Multi {
|
||||
db.Model(&models.ListItem{}).Where(
|
||||
"list_id = ? AND id <> ?",
|
||||
list.ID, listItem.ID,
|
||||
).Update("default", false)
|
||||
}
|
||||
|
||||
c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d",
|
||||
list.ID,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render("listitem_form", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"ListItem": listItem,
|
||||
"Errors": errors,
|
||||
})
|
||||
}
|
||||
|
||||
func ListItemEdit(c *fiber.Ctx) error {
|
||||
return c.SendString("ListItemEdit")
|
||||
id := c.Params("id")
|
||||
itemid := c.Params("itemid")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var listItem models.ListItem
|
||||
result2 := db.Find(&listItem, "id = ?", itemid)
|
||||
|
||||
if errors.Is(result2.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result2.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Modifier un élément de la liste",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
var errors []string
|
||||
if c.Method() == "POST" {
|
||||
value := c.FormValue("value")
|
||||
isDefault := c.FormValue("default")
|
||||
|
||||
if len(value) > 100 || len(value) < 1 {
|
||||
errors = append(errors, "La valeur doit avoir entre 1 et 100 caractères")
|
||||
}
|
||||
|
||||
listItem.Value = value
|
||||
listItem.Default = false
|
||||
if isDefault == "on" {
|
||||
listItem.Default = true
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result3 := db.Save(&listItem)
|
||||
if result3.Error != nil {
|
||||
return result3.Error
|
||||
} else {
|
||||
if listItem.Default && !list.Multi {
|
||||
db.Model(&models.ListItem{}).Where(
|
||||
"list_id = ? AND id <> ?",
|
||||
list.ID, listItem.ID,
|
||||
).Update("default", false)
|
||||
}
|
||||
|
||||
c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d",
|
||||
list.ID,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render("listitem_form", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"ListItem": listItem,
|
||||
"Errors": errors,
|
||||
})
|
||||
}
|
||||
|
||||
func ListItemDelete(c *fiber.Ctx) error {
|
||||
return c.SendString("ListItemDelete")
|
||||
id := c.Params("id")
|
||||
itemid := c.Params("itemid")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
result2 := db.Delete(&models.ListItem{}, itemid)
|
||||
if result2.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d", list.ID,
|
||||
))
|
||||
}
|
||||
|
|
|
|||
11
main.go
11
main.go
|
|
@ -93,8 +93,9 @@ func main() {
|
|||
app.Use(middlewares.TemplatesMiddleware)
|
||||
app.Use("/admin", middlewares.AuthzAdmin)
|
||||
|
||||
// Homepage
|
||||
// Main pages
|
||||
app.Get("/", controllers.Homepage)
|
||||
app.Get("/admin", controllers.Admin)
|
||||
|
||||
// Login & logout
|
||||
app.Get("/login", controllers.LoginForm)
|
||||
|
|
@ -118,12 +119,12 @@ func main() {
|
|||
app.Post("/admin/lists/add", controllers.ListAdd)
|
||||
app.Get("/admin/lists/:id<int;min(0)>/edit", controllers.ListEdit)
|
||||
app.Post("/admin/lists/:id<int;min(0)>/edit", controllers.ListEdit)
|
||||
app.Delete("/admin/lists/:id<int;min(0)>", controllers.ListDelete)
|
||||
app.Post("/admin/lists/:id<int;min(0)>/delete", controllers.ListDelete)
|
||||
app.Get("/admin/lists/:id<int;min(0)>/items/add", controllers.ListItemAdd)
|
||||
app.Post("/admin/lists/:id<int;min(0)>/items/add", controllers.ListItemAdd)
|
||||
app.Get("/admin/lists/:id<int;min(0)>/items/:id<int;min(0)>", controllers.ListItemEdit)
|
||||
app.Post("/admin/lists/:id<int;min(0)>/items/:id<int;min(0)>", controllers.ListItemEdit)
|
||||
app.Delete("/admin/lists/:id<int;min(0)>/items/:id<int;min(0)>", controllers.ListItemDelete)
|
||||
app.Get("/admin/lists/:id<int;min(0)>/items/:itemid<int;min(0)>", controllers.ListItemEdit)
|
||||
app.Post("/admin/lists/:id<int;min(0)>/items/:itemid<int;min(0)>", controllers.ListItemEdit)
|
||||
app.Post("/admin/lists/:id<int;min(0)>/items/:itemid<int;min(0)>/delete", controllers.ListItemDelete)
|
||||
|
||||
listenAddr := fmt.Sprintf(
|
||||
"%s:%d",
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ type List struct {
|
|||
type ListItem struct {
|
||||
gorm.Model
|
||||
Value string
|
||||
Default string
|
||||
Default bool
|
||||
ListID uint
|
||||
List List
|
||||
}
|
||||
|
|
|
|||
11
static/functions.js
Normal file
11
static/functions.js
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
$(document).ready(function() {
|
||||
$(".areyousure").on("click", function(e) {
|
||||
if(!confirm("Êtes-vous sûr ?")) {
|
||||
e.preventDefault();
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
feather.replace();
|
||||
});
|
||||
50
views/admin.html
Normal file
50
views/admin.html
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Administration</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/sections">
|
||||
<div class="alert alert-primary">
|
||||
<i class="feather me-2" data-feather="home"></i>
|
||||
Gestion des <b>sections</b>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/lists">
|
||||
<div class="alert alert-primary">
|
||||
<i class="feather me-2" data-feather="list"></i>
|
||||
Gestion des <b>listes</b>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/fields">
|
||||
<div class="alert alert-primary">
|
||||
<i class="feather me-2" data-feather="database"></i>
|
||||
Gestion des <b>champs supplémentaires</b>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin/users">
|
||||
<div class="alert alert-primary">
|
||||
<i class="feather me-2" data-feather="users"></i>
|
||||
Gestion des <b>utilisateurs</b>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -2,8 +2,14 @@
|
|||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<h1>Tableau de bord</h1>
|
||||
<hr>
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">Accueil</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
|
|
@ -22,6 +28,25 @@
|
|||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/export">
|
||||
<div class="alert alert-primary">
|
||||
<i class="feather me-2" data-feather="download"></i>
|
||||
<b>Exporter</b> les données
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if Globals.UserIsAdmin %}
|
||||
<div class="col-md-6">
|
||||
<a class="dashboard-tile" href="/admin">
|
||||
<div class="alert alert-primary">
|
||||
<i class="feather me-2" data-feather="settings"></i>
|
||||
<b>Administration</b> de l'application
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -28,11 +28,7 @@
|
|||
<script src="/static/jquery/jquery.min.js"></script>
|
||||
<script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/static/feather/dist/feather.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
feather.replace();
|
||||
});
|
||||
</script>
|
||||
<script src="/static/functions.js"></script>
|
||||
{% block javascript %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
98
views/list.html
Normal file
98
views/list.html
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<li class="breadcrumb-item active">{{ List.Name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<b>Nom</b><br>
|
||||
{{ List.Name }}
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<b>Liste à choix multiples</b><br>
|
||||
{% if List.Multi %}Oui{% else %}Non{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<a class="btn btn-md btn-primary" href="/admin/lists/{{ List.ID }}/edit">
|
||||
<i class="feather" data-feather="edit-2"></i>
|
||||
Modifier
|
||||
</a>
|
||||
<form
|
||||
action="/admin/lists/{{ List.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-md btn-danger areyousure" type="submit">
|
||||
<i class="feather" data-feather="trash-2"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
{% if ListItems %}
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Valeur</th>
|
||||
<th>Par défaut</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for Item in ListItems %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}">
|
||||
{{ Item.Value }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if Item.Default %}
|
||||
Oui
|
||||
{% else %}
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<form
|
||||
action="/admin/lists/{{ List.ID }}/items/{{ Item.ID }}/delete"
|
||||
method="post"
|
||||
class="d-inline p-0"
|
||||
>
|
||||
<button class="btn btn-md btn-danger areyousure" type="submit">
|
||||
<i class="feather" data-feather="trash-2"></i>
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<div>
|
||||
Pas encore d'éléments dans cette liste.
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="mt-3">
|
||||
<a class="btn btn-md btn-primary" href="/admin/lists/{{ List.ID }}/items/add">
|
||||
<i class="feather" data-feather="plus"></i>
|
||||
Ajouter
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -2,8 +2,23 @@
|
|||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<h1>Ajouter un liste</h1>
|
||||
<hr>
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
|
||||
{% if List.ID %}
|
||||
<li class="breadcrumb-item"><a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a></li>
|
||||
<li class="breadcrumb-item active">Modifier</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
|
|
|
|||
71
views/listitem_form.html
Normal file
71
views/listitem_form.html
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
{% extends "layouts/main.html" %}
|
||||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists">Listes</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin/lists/{{ List.ID }}">{{ List.Name }}</a></li>
|
||||
|
||||
{% if ListItem.ID %}
|
||||
<li class="breadcrumb-item active">Modifier élément</li>
|
||||
{% else %}
|
||||
<li class="breadcrumb-item active">Ajouter élément</li>
|
||||
{% endif %}
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
{% if Errors %}
|
||||
<div class="alert alert-danger">
|
||||
<ul class="m-0">
|
||||
{% for Error in Errors %}
|
||||
<li>{{ Error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="list" method="post">
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="value" class="form-label">
|
||||
Valeur
|
||||
</label>
|
||||
<input
|
||||
id="value"
|
||||
class="form-control"
|
||||
type="text"
|
||||
name="value"
|
||||
required
|
||||
value="{{ ListItem.Value }}"
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="form-check-input me-2"
|
||||
id="default"
|
||||
name="default"
|
||||
{% if ListItem.Default %}checked{% endif %}
|
||||
>
|
||||
<label for="default" class="form-label">
|
||||
Valeur sélectionnée par défaut
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<button class="btn btn-primary" type="submit">
|
||||
<i class="me-1" data-feather="save"></i>
|
||||
Enregistrer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -2,23 +2,41 @@
|
|||
|
||||
{% block main %}
|
||||
<div class="container mt-4">
|
||||
<h1>Listes</h1>
|
||||
<hr>
|
||||
<div class="mb-4">
|
||||
<nav>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/admin">Administration</a></li>
|
||||
<li class="breadcrumb-item active">Listes</li>
|
||||
</ol>
|
||||
</nav>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
{% if Lists %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-borderless table-hover">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
<th>Choix multiples</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for List in Lists %}
|
||||
<tr>
|
||||
<td
|
||||
class="item-click"
|
||||
onclick="window.location.href='/admin/lists/{{ List.ID }}'"
|
||||
>
|
||||
<td>
|
||||
<a href="/admin/lists/{{ List.ID }}">
|
||||
{{ List.Name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if List.Multi %}
|
||||
Oui
|
||||
{% else %}
|
||||
Non
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
|||
|
|
@ -67,6 +67,11 @@
|
|||
<i class="feather me-2" data-feather="database"></i>Champs supplémentaires
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/admin/users">
|
||||
<i class="feather me-2" data-feather="users"></i>Utilisateurs
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue