user_form.html
196 lignes · 8397 octets
{% extends "base.html" %} {% block title %}{{ page_title }}{% endblock %} {% block navbar %} {% include "components/navbar.html" %} {% endblock %} {% block content %} <div class="container mx-auto px-4 py-8"> <!-- Breadcrumb --> <div class="text-sm breadcrumbs mb-6"> <ul> <li><a href="/">{{ breadcrumb_home }}</a></li> <li><a href="/admin">{{ breadcrumb_admin }}</a></li> <li><a href="/admin/users">{{ breadcrumb_users }}</a></li> <li>{{ breadcrumb_mode }}</li> </ul> </div> <div class="flex justify-between items-center mb-6"> <h1 class="text-3xl font-bold">{{ form_title }}</h1> <a href="/admin/users" class="btn btn-ghost"> <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" /> </svg> {{ back_to_list }} </a> </div> <!-- Messages d'erreur/succès --> <div id="form-messages" class="mb-6"></div> <!-- User Form --> <div class="card bg-base-100 shadow-xl"> <div class="card-body"> {% if mode == "create" %} <form method="POST" action="/admin/users" class="space-y-6" hx-post="/admin/users" hx-target="#form-messages" hx-swap="innerHTML" hx-indicator="#form-loading" > {% else %} <form method="PUT" action="/admin/users/{{ user_id }}" class="space-y-6" hx-put="/admin/users/{{ user_id }}" hx-target="#form-messages" hx-swap="innerHTML" hx-indicator="#form-loading" > {% endif %} <input type="hidden" name="csrf_token" value="{{ csrf_token }}"> <!-- Username Field --> <div class="form-control"> <label class="label"> <span class="label-text font-semibold">{{ username_label }}</span> <span class="label-text-alt text-error">*</span> </label> {% if mode == "create" %} <input type="text" name="username" value="{{ form_username }}" placeholder="{{ username_placeholder }}" class="input input-bordered w-full" minlength="3" maxlength="39" pattern="[a-z0-9-]+" title="{{ username_pattern }}" required > {% else %} <input type="text" value="{{ form_username }}" class="input input-bordered w-full input-disabled" readonly > <input type="hidden" name="username" value="{{ form_username }}"> {% endif %} <label class="label"> <span class="label-text-alt">{{ username_readonly_hint }}</span> </label> </div> <!-- Email Field --> <div class="form-control"> <label class="label"> <span class="label-text font-semibold">{{ email_label }}</span> <span class="label-text-alt text-error">*</span> </label> <input type="email" name="email" value="{{ form_email }}" placeholder="{{ email_placeholder }}" class="input input-bordered w-full" required > {% if mode == "edit" %} <label class="label"> <span class="label-text-alt">{{ email_change_hint }}</span> </label> {% endif %} </div> <!-- Password Field (only for create mode or if resetting) --> {% if mode == "create" %} <div class="form-control"> <label class="label"> <span class="label-text font-semibold">{{ password_label }}</span> <span class="label-text-alt">{{ password_optional }}</span> </label> <input type="password" name="password" placeholder="{{ password_placeholder }}" class="input input-bordered w-full" > <label class="label"> <span class="label-text-alt">{{ password_hint }}</span> </label> </div> {% endif %} <!-- Roles Field --> <div class="form-control"> <label class="label"> <span class="label-text font-semibold">{{ roles_label }}</span> <span class="label-text-alt text-error">*</span> </label> <div class="space-y-2"> {% for role in available_roles %} <label class="label cursor-pointer justify-start gap-3"> <input type="checkbox" name="roles" value="{{ role.name }}" class="checkbox checkbox-primary" {% if role.is_selected %}checked{% endif %} > <div class="flex-1"> <span class="label-text font-medium">{{ role.name }}</span> {% if role.description.len() > 0 %} <p class="text-sm text-base-content/70">{{ role.description }}</p> {% endif %} </div> </label> {% endfor %} </div> <label class="label"> <span class="label-text-alt">{{ roles_hint }}</span> </label> </div> <!-- Must Change Password (only for edit mode) --> {% if mode == "edit" %} <div class="form-control"> <label class="label cursor-pointer justify-start gap-3"> <input type="checkbox" name="must_change_password" value="true" class="checkbox checkbox-warning" {% if must_change_password %}checked{% endif %} > <div class="flex-1"> <span class="label-text font-medium">{{ must_change_password_label }}</span> <p class="text-sm text-base-content/70">{{ must_change_password_desc }}</p> </div> </label> </div> {% endif %} <!-- Form Actions --> <div class="flex justify-end gap-4 pt-4 border-t"> <a href="/admin/users" class="btn btn-ghost">{{ cancel }}</a> <button type="submit" class="btn btn-primary" id="submit-btn"> <span id="form-loading" class="htmx-indicator loading loading-spinner loading-sm mr-2"></span> {{ submit_label }} </button> </div> </form> {% if mode != "create" %} {% endif %} </div> </div> </div> {% endblock %}
GitRust