Files

241 lines
12 KiB
HTML

<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:define name="title">Mon Profil - UnionFlow</ui:define>
<ui:define name="content">
<!-- En-tête du profil -->
<div class="grid">
<div class="col-12">
<div class="card">
<div class="flex align-items-center justify-content-between">
<div class="flex align-items-center">
<div class="bg-primary text-white border-round flex align-items-center justify-content-center mr-4"
style="width: 5rem; height: 5rem; font-size: 2rem; font-weight: bold;">
#{userSession.currentUser.initiales}
</div>
<div>
<h2 class="mb-2">#{userSession.currentUser.nomComplet}</h2>
<div class="flex align-items-center gap-2 mb-2">
<p:tag value="#{userSession.typeCompte}"
severity="#{userSession.isSuperAdmin() ? 'danger' : (userSession.isAdmin() ? 'warning' : 'info')}" />
<span class="text-600"></span>
<span class="text-600">#{userSession.currentUser.email}</span>
</div>
<div class="text-600">
<i class="pi pi-building mr-1"></i>
#{userSession.entite.description}
</div>
</div>
</div>
<div>
<p:commandButton value="Modifier le profil"
icon="pi pi-pencil"
styleClass="ui-button-outlined"
onclick="PF('dlgEditProfile').show();" />
</div>
</div>
</div>
</div>
</div>
<!-- Informations détaillées -->
<div class="grid">
<div class="col-12 md:col-6">
<div class="card">
<h5>📋 Informations Personnelles</h5>
<div class="field-group">
<div class="field">
<label class="font-medium text-900">Nom complet</label>
<div class="text-600">#{userSession.currentUser.nomComplet}</div>
</div>
<div class="field">
<label class="font-medium text-900">Nom d'utilisateur</label>
<div class="text-600">#{userSession.currentUser.username}</div>
</div>
<div class="field">
<label class="font-medium text-900">Adresse email</label>
<div class="text-600">#{userSession.currentUser.email}</div>
</div>
<div class="field">
<label class="font-medium text-900">Type de compte</label>
<div>
<p:tag value="#{userSession.typeCompte}"
severity="#{userSession.isSuperAdmin() ? 'danger' : (userSession.isAdmin() ? 'warning' : 'info')}" />
</div>
</div>
</div>
</div>
</div>
<div class="col-12 md:col-6">
<div class="card">
<h5>🏢 Informations de l'Entité</h5>
<div class="field-group">
<div class="field">
<label class="font-medium text-900">Nom de l'entité</label>
<div class="text-600">#{userSession.entite.nom}</div>
</div>
<div class="field">
<label class="font-medium text-900">Type d'entité</label>
<div class="text-600">#{userSession.entite.type}</div>
</div>
<div class="field">
<label class="font-medium text-900">Localisation</label>
<div class="text-600">
<i class="pi pi-map-marker mr-1"></i>
#{userSession.entite.ville}, #{userSession.entite.pays}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Rôles et permissions -->
<div class="grid">
<div class="col-12 md:col-6">
<div class="card">
<h5>🔐 Rôles et Permissions</h5>
<div class="field-group">
<div class="field">
<label class="font-medium text-900">Rôles assignés</label>
<div class="flex gap-2 flex-wrap">
<ui:repeat value="#{userSession.roles}" var="role">
<p:tag value="#{role}"
severity="#{role == 'SUPER_ADMIN' ? 'danger' : (role == 'ADMIN_ENTITE' ? 'warning' : 'info')}" />
</ui:repeat>
</div>
</div>
<div class="field" rendered="#{userSession.permissions != null}">
<label class="font-medium text-900">Permissions spéciales</label>
<div class="flex gap-1 flex-wrap">
<ui:repeat value="#{userSession.permissions}" var="permission">
<p:tag value="#{permission}" severity="secondary" />
</ui:repeat>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 md:col-6">
<div class="card">
<h5>🔒 Sécurité de la Session</h5>
<div class="field-group">
<div class="field">
<label class="font-medium text-900">Statut de connexion</label>
<div>
<p:tag value="Connecté" severity="success" />
<span class="text-600 ml-2">Session active</span>
</div>
</div>
<div class="field">
<label class="font-medium text-900">Temps restant</label>
<div class="text-600">
<i class="pi pi-clock mr-1"></i>
#{jwtTokenManager.timeUntilExpiration / 60} minutes
</div>
</div>
<div class="field">
<label class="font-medium text-900">Actions sécurisées</label>
<div class="flex gap-2">
<p:commandButton value="Changer mot de passe"
icon="pi pi-key"
styleClass="ui-button-outlined ui-button-warning ui-button-sm"
onclick="PF('dlgChangePassword').show();" />
<p:commandButton value="Déconnecter autres sessions"
icon="pi pi-sign-out"
styleClass="ui-button-outlined ui-button-danger ui-button-sm" />
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Dialog pour modifier le profil -->
<p:dialog header="Modifier le Profil" widgetVar="dlgEditProfile" modal="true" width="500">
<h:form id="formEditProfile">
<div class="ui-fluid">
<div class="field">
<p:outputLabel for="editNom" value="Nom" />
<p:inputText id="editNom" value="#{userSession.currentUser.nom}" />
</div>
<div class="field">
<p:outputLabel for="editPrenom" value="Prénom" />
<p:inputText id="editPrenom" value="#{userSession.currentUser.prenom}" />
</div>
<div class="field">
<p:outputLabel for="editEmail" value="Email" />
<p:inputText id="editEmail" value="#{userSession.currentUser.email}" />
</div>
</div>
<div class="flex gap-2 mt-3">
<p:commandButton value="Enregistrer"
icon="pi pi-check"
styleClass="ui-button-success"
update="@form"
oncomplete="if(!args.validationFailed) PF('dlgEditProfile').hide();" />
<p:commandButton value="Annuler"
icon="pi pi-times"
styleClass="ui-button-secondary"
onclick="PF('dlgEditProfile').hide();"
type="button" />
</div>
</h:form>
</p:dialog>
<!-- Dialog pour changer le mot de passe -->
<p:dialog header="Changer le Mot de Passe" widgetVar="dlgChangePassword" modal="true" width="400">
<h:form id="formChangePassword">
<div class="ui-fluid">
<div class="field">
<p:outputLabel for="currentPassword" value="Mot de passe actuel" />
<p:password id="currentPassword" required="true" />
</div>
<div class="field">
<p:outputLabel for="newPassword" value="Nouveau mot de passe" />
<p:password id="newPassword" required="true" toggleMask="true" />
</div>
<div class="field">
<p:outputLabel for="confirmPassword" value="Confirmer le mot de passe" />
<p:password id="confirmPassword" required="true" />
</div>
</div>
<div class="flex gap-2 mt-3">
<p:commandButton value="Changer"
icon="pi pi-check"
styleClass="ui-button-warning"
update="@form"
oncomplete="if(!args.validationFailed) PF('dlgChangePassword').hide();" />
<p:commandButton value="Annuler"
icon="pi pi-times"
styleClass="ui-button-secondary"
onclick="PF('dlgChangePassword').hide();"
type="button" />
</div>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>