Update - Lions User Manager - Client (Quarkus PrimeFaces Freya)

This commit is contained in:
dahoud
2025-12-06 22:07:05 +00:00
parent 53ea02ccad
commit 51d087e5be
189 changed files with 38558 additions and 1 deletions

View File

@@ -0,0 +1,28 @@
<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">
<!--
Composant réutilisable: Footer (WOU/DRY Pattern)
Auteur: Lions User Manager
Version: 1.0.0
Description: Pied de page avec informations
-->
<div class="layout-footer">
<div class="grid">
<div class="col-12">
<div class="footer-bottom text-center">
<h4>Lions User Manager</h4>
<h6>Copyright © Lions Dev Team - Gestion centralisée des utilisateurs Keycloak</h6>
<p class="text-600 text-sm mt-2">Version 1.0.0</p>
</div>
</div>
</div>
</div>
</ui:composition>

View File

@@ -0,0 +1,58 @@
<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"
xmlns:fr="http://primefaces.org/freya">
<!--
Composant réutilisable: Menu Navigation (WOU/DRY Pattern)
Auteur: Lions User Manager
Version: 1.0.0
Description: Menu de navigation latéral pour Lions User Manager
-->
<div class="menu-wrapper">
<div class="sidebar-logo">
<a href="/pages/user-manager/dashboard">
<p:graphicImage name="images/logo-freya-single.svg" library="freya-layout" />
</a>
<a href="#" class="sidebar-pin" title="Toggle Menu">
<span class="pin"></span>
</a>
</div>
<div class="layout-menu-container">
<h:form id="menuform">
<fr:menu widgetVar="FreyaMenuWidget">
<!-- Dashboard -->
<p:menuitem id="m_dashboard" value="Tableau de Bord" icon="pi pi-home" outcome="/pages/user-manager/dashboard" />
<!-- Gestion Utilisateurs -->
<p:submenu id="m_users" label="Gestion Utilisateurs" icon="pi pi-users">
<p:menuitem id="m_users_list" value="Liste des Utilisateurs" icon="pi pi-list" outcome="/pages/user-manager/users/list" />
<p:menuitem id="m_users_create" value="Nouvel Utilisateur" icon="pi pi-user-plus" outcome="/pages/user-manager/users/create" />
</p:submenu>
<!-- Gestion Rôles -->
<p:submenu id="m_roles" label="Gestion Rôles" icon="pi pi-shield">
<p:menuitem id="m_roles_list" value="Liste des Rôles" icon="pi pi-list" outcome="/pages/user-manager/roles/list" />
<p:menuitem id="m_roles_assign" value="Attribution Rôles" icon="pi pi-key" outcome="/pages/user-manager/roles/assign" />
</p:submenu>
<!-- Audit -->
<p:submenu id="m_audit" label="Audit" icon="pi pi-history">
<p:menuitem id="m_audit_logs" value="Journal d'Audit" icon="pi pi-file-o" outcome="/pages/user-manager/audit/logs" />
</p:submenu>
<!-- Synchronisation -->
<p:submenu id="m_sync" label="Synchronisation" icon="pi pi-sync">
<p:menuitem id="m_sync_dashboard" value="Dashboard" icon="pi pi-dashboard" outcome="/pages/user-manager/sync/dashboard" />
</p:submenu>
</fr:menu>
</h:form>
</div>
</div>
</ui:composition>

View File

@@ -0,0 +1,52 @@
<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"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
<!--
Composant en-tête de page réutilisable (WOU/DRY Pattern)
Auteur: Lions User Manager
Version: 1.0.0
Description: En-tête de page avec icône, titre, description et actions
Paramètres:
- icon: String (optionnel) - Classe d'icône PrimeIcons (ex: "pi pi-users text-blue-500")
- title: String (requis) - Titre de la page
- description: String (optionnel) - Description de la page
Usage:
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="icon" value="pi pi-users text-blue-500" />
<ui:param name="title" value="Gestion des Utilisateurs" />
<ui:param name="description" value="Gestion centralisée des utilisateurs Keycloak" />
<ui:define name="actions">
Boutons d'action ici
</ui:define>
</ui:include>
-->
<div class="grid mb-4">
<div class="col-12">
<div class="card">
<div class="flex align-items-center justify-content-between">
<div>
<h3 class="mb-2">
<c:if test="#{not empty icon}">
<i class="#{icon} mr-2"></i>
</c:if>
#{title}
</h3>
<p class="text-600 m-0" rendered="#{not empty description}">#{description}</p>
</div>
<div>
<ui:insert name="actions" />
</div>
</div>
</div>
</div>
</div>
</ui:composition>

View File

@@ -0,0 +1,117 @@
<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">
<!--
Composant réutilisable: Topbar (WOU/DRY Pattern)
Auteur: Lions User Manager
Version: 1.0.0
Description: Barre supérieure avec logo, menu et profil utilisateur
-->
<div class="layout-topbar">
<div class="layout-topbar-wrapper">
<div class="layout-topbar-left">
<a href="#" class="menu-button">
<i class="pi pi-bars"/>
</a>
<h:link id="logolink" outcome="/pages/user-manager/dashboard" styleClass="layout-topbar-logo">
<p:graphicImage name="images/#{guestPreferences.lightLogo ? 'logo-freya-white.svg' : 'logo-freya.svg'}" library="freya-layout" />
</h:link>
</div>
<ui:include src="/templates/components/layout/menu.xhtml" />
<div class="layout-topbar-right">
<ul class="layout-topbar-actions">
<li class="topbar-item user-profile">
<a href="#" class="user-profile-link">
<div class="bg-primary text-white border-circle flex align-items-center justify-content-center user-avatar"
style="width: 36px; height: 36px; font-size: 14px; font-weight: bold; margin-right: 0.75rem;">
#{userSessionBean.initials}
</div>
<span class="user-info">
<span class="user-name">
#{userSessionBean.fullName}
<span class="user-status online"></span>
<span class="user-separator">|</span>
<span class="user-role">#{userSessionBean.primaryRole}</span>
</span>
<span class="user-email">#{userSessionBean.email}</span>
</span>
</a>
<ul class="user-dropdown-menu">
<!-- En-tête du menu avec infos utilisateur -->
<li class="user-dropdown-header">
<div class="user-dropdown-avatar">
<div class="bg-primary text-white border-circle flex align-items-center justify-content-center"
style="width: 48px; height: 48px; font-size: 20px; font-weight: bold;">
#{userSessionBean.initials}
</div>
<span class="user-status-indicator online"></span>
</div>
<div class="user-dropdown-info">
<div class="user-dropdown-name text-900 font-semibold">#{userSessionBean.fullName}</div>
<div class="user-dropdown-email text-600 text-sm">#{userSessionBean.email}</div>
<div class="user-dropdown-role text-500 text-xs">#{userSessionBean.primaryRole}</div>
</div>
</li>
<!-- Séparateur -->
<li class="user-dropdown-divider"></li>
<!-- Actions principales -->
<li class="user-dropdown-section">
<div class="section-title">Mon Compte</div>
<div class="section-items">
<h:link outcome="/pages/user-manager/users/profile" styleClass="dropdown-item">
<i class="pi pi-user"></i>
<span>Mon Profil</span>
<i class="pi pi-angle-right item-arrow"></i>
</h:link>
<h:link outcome="/pages/user-manager/settings" styleClass="dropdown-item">
<i class="pi pi-cog"></i>
<span>Paramètres</span>
<i class="pi pi-angle-right item-arrow"></i>
</h:link>
<a href="#" class="dropdown-item">
<i class="pi pi-shield"></i>
<span>Sécurité</span>
<i class="pi pi-angle-right item-arrow"></i>
</a>
</div>
</li>
<!-- Séparateur -->
<li class="user-dropdown-divider"></li>
<!-- Actions système -->
<li class="user-dropdown-section">
<div class="section-items">
<a href="#" class="dropdown-item">
<i class="pi pi-question-circle"></i>
<span>Aide &amp; Support</span>
</a>
<h:form>
<p:commandLink action="#{userSessionBean.logout}" styleClass="dropdown-item logout-item">
<i class="pi pi-sign-out"></i>
<span>Déconnexion</span>
</p:commandLink>
</h:form>
</div>
</li>
</ul>
</li>
</ul>
<a href="#" class="layout-rightpanel-button">
<i class="pi pi-arrow-left"/>
</a>
</div>
</div>
</div>
</ui:composition>