{# SAM User Card Component - Card displaying user info with avatar and optional progress Parameters: - user: object (required) - User data with fullname, email, etc. - progress: number - Optional completion percentage (0-100) - showRemoveButton: bool - Show remove/delete button - cohorts: array - Optional list of cohort names - url: string - Link to user detail page - compact: bool - Compact display mode - showEmail: bool - Show email (default: true) - inactiveDays: number - Days of inactivity (shows warning) Usage: {% include 'sam/_components/user_card.html.twig' with { user: {fullname: 'John Doe', email: 'john@example.com'}, progress: 75, url: path('app_sam_users_detail', {id: user.id}) } %} #} {% set userName = user.fullname|default(user.firstname ~ ' ' ~ user.lastname)|default('Utilisateur') %} {% set userInitials = userName|split(' ')|map(w => w|slice(0, 1))|slice(0, 2)|join('')|upper %} {% set userEmail = user.email|default('') %} {% set isCompact = compact|default(false) %} {% set isSuspended = user.suspended|default(false) %} {% set cardClasses = ['sam-user-card'] %} {% if isCompact %} {% set cardClasses = cardClasses|merge(['sam-user-card--compact']) %} {% endif %} {% if url is defined and url %} {% set cardClasses = cardClasses|merge(['sam-user-card--clickable']) %} {% endif %} {% if isSuspended %} {% set cardClasses = cardClasses|merge(['sam-user-card--suspended']) %} {% endif %} {% set tag = url is defined and url ? 'a' : 'div' %} <{{ tag }}{% if url is defined and url %} href="{{ url }}"{% endif %} class="{{ cardClasses|join(' ') }}"> {# Avatar #} {% include 'sam/_components/avatar.html.twig' with { type: 'user', initials: userInitials, size: isCompact ? 'sm' : 'md', suspended: isSuspended } %} {# User info #}