@extends('layout') @section('title', $member->display_name.' - Famille Letzelter') @section('meta', \Illuminate\Support\Str::limit( filled($member->bio) ? (string) \Illuminate\Support\Str::of($member->bio)->stripTags()->squish() : "Fiche de {$member->display_name}, membre de la famille Letzelter de Philippsbourg (Moselle) : état civil, descendance, photos et souvenirs.", 155)) @section('schema', 'ProfilePage') @php $peutEditer = auth()->check() && (auth()->user()->is_admin || $member->user_id === auth()->id()); $estAdmin = auth()->check() && auth()->user()->is_admin; // Meme regle que la fiche personne : admin, la personne, un parent vivant. $peutInd = $ind ? $ind->peutEtreModifieePar(auth()->user()) : false; $stylo = ''; $complet = $ind ? $ind->donneesCompletesVisibles() : true; $nomAffiche = $ind ? $ind->nomVisiteur() : $member->display_name; // Le visage d'une personne vivante ne sort pas sans compte connecte. $portrait = ! $complet ? null : ($member->avatar_path ? \Illuminate\Support\Facades\Storage::disk('public')->url($member->avatar_path) : ($ind ? $ind->portrait_url : null)); // Dates de vie : rien ne s'affiche si les deux sont vides (pas de « ★ - » orphelin). $vie = []; if ($ind && $complet) { if (filled($ind->naissance_date)) $vie[] = '★ '.$ind->naissance_date; if (filled($ind->deces_date)) $vie[] = '† '.$ind->deces_date; } $unions = $ind ? $ind->unions() : collect(); @endphp @section('content') {{-- ═══ 1. Portrait, identité et frise des âges ═══════════════════ --}}
@if ($ind && ($peutInd || ! auth()->check())) {!! $stylo !!} @endif
@if ($portrait) {{ $nomAffiche }} @else {{ \Illuminate\Support\Str::substr($nomAffiche, 0, 1) }} @endif @if ($peutInd)
@csrf
@endif
@if ($peutEditer) {{-- Le téléversement retombe sur cette page : MemberSpaceController::avatar termine par back(). --}}
@csrf
@if ($estAdmin && $ind) Portrait généalogique @endif @endif

Famille Letzelter

{{ $nomAffiche }}

@if ($vie)

{{ implode(' · ', $vie) }}

@endif
@if ($ind) Sa fiche généalogique → @endif @if ($peutEditer) Modifier cette fiche @endif
{{-- La frise : une photo par tranche de vingt ans, à côté du nom. --}}
@if ($frise->isNotEmpty())

Au fil des âges

@foreach ($frise as $i => $etape) @endforeach
@else

Au fil des âges

@if ($ind && ! $complet) Les photos d'une personne vivante ne sont visibles que par les membres connectés. @else Aucune photo datée pour l'instant. En ajoutant l'année de chaque cliché, cette frise se remplit toute seule, une image par tranche de vingt ans. @endif

@if ($estAdmin && $ind) Dater des photos → @endif
@endif
{{-- ═══ 2. État civil ═══════════════════════════════════════════════ --}} @if ($ind)

État civil

{{-- Meme presentation que la fiche personne (partials.personne-champs) : naissance, deces et age sur une ligne, puis le signalement. --}} @php // Repli sur la profession du cahier d'origine, en memoire seulement. if (blank($ind->profession) && filled($member->profession)) { $ind->profession = $member->profession; } @endphp @if ($complet && filled($ind->nom_naissance))

{{ $ind->sexe === 'f' ? 'Née' : 'Né' }} {{ $ind->nom_naissance }}

@endif @include('partials.personne-champs', ['ind' => $ind]) @if ($complet && $estAdmin && blank($ind->naissance_date) && blank($ind->deces_date))

Compléter l'état civil →

@endif {{-- Les unions, en blocs serrés : un par mariage. --}} @if ($unions->isNotEmpty())
@foreach ($unions as $i => $u) @php $conj = $u->partner1_id === $ind->id ? $u->partner2 : $u->partner1; $rang = $unions->count() === 1 ? 'Union' : (['Première union', 'Deuxième union', 'Troisième union', 'Quatrième union'][$i] ?? 'Union suivante'); $enfants = $u->children; @endphp

{{ $rang }}

@if ($conj) @php $vieConj = []; if ($conj->donneesCompletesVisibles()) { if (filled($conj->naissance_date)) $vieConj[] = '★ '.\App\Support\Dates::afficher($conj->naissance_date); if (filled($conj->deces_date)) $vieConj[] = '† '.\App\Support\Dates::afficher($conj->deces_date); $ageConj = filled($conj->deces_date) ? \App\Support\Dates::ageAuDeces($conj->naissance_date, $conj->deces_date) : null; if ($ageConj) $vieConj[] = e($ageConj).' de vie'; } @endphp @include('partials.personne-entete', ['ind' => $conj, 'lien' => true, 'niveau' => 'p']) @if ($vieConj)

{!! implode(' · ', $vieConj) !!}

@endif @else

Conjoint(e) inconnu(e)

@endif @php $unionVisible = $complet && (! $conj || $conj->donneesCompletesVisibles()); $quand = $unionVisible && filled($u->mariage_date) ? \App\Support\Dates::afficher($u->mariage_date) : null; $ou = $unionVisible && filled($u->mariage_lieu) ? e($u->mariage_lieu) : null; @endphp @if ($quand || $ou)

Union {!! implode(', ', array_filter([$quand, $ou])) !!}

@elseif (! $unionVisible)

Date et lieu de l'union réservés aux membres connectés

@else

Date et lieu de l'union non renseignés

@endif @if ($enfants->count())

{{ $enfants->count() }} enfant{{ $enfants->count() > 1 ? 's' : '' }}

@foreach ($enfants as $e) {{ $e->nomVisiteur() }} @endforeach
@endif
@endforeach
@endif
@endif {{-- ═══ Album en mosaïque ═══════════════════════════════════════════ --}} @if ($ind)
@include('partials.album-mosaique', ['ind' => $ind, 'peut' => $peutInd])
@endif {{-- ═══ 3. La descendance, à partir de la personne ══════════════════ --}} @if ($ind)

Sa descendance

@php // Pluriels écrits à la main : les mots composés français // (petits-enfants) ne suivent pas la règle anglaise de Str::plural. $etiquettes = [ 1 => ['enfant', 'enfants'], 2 => ['petit-enfant', 'petits-enfants'], 3 => ['arrière-petit-enfant', 'arrière-petits-enfants'], 4 => ['arrière-arrière-petit-enfant', 'arrière-arrière-petits-enfants'], ]; $resume = []; foreach ($compteurs as $niveau => $nb) { [$singulier, $pluriel] = $etiquettes[$niveau] ?? ['descendant', 'descendants']; $resume[] = $nb.' '.($nb > 1 ? $pluriel : $singulier); } @endphp @if ($resume)

{{ implode(' · ', $resume) }}

@endif @php $aDesDescendants = collect($tree['unions'] ?? [])->contains(fn ($u) => ! empty($u['enfants'])); @endphp @if ($aDesDescendants) @include('partials.cascade-outils')
@include('partials.cascade', ['n' => $tree, 'pivot' => true])
@include('partials.cascade-mentions') @else

Aucune descendance enregistrée pour l'instant. @if ($estAdmin) Ajouter un enfant → @endif

@endif
@endif {{-- ═══ 4. Souvenirs : ce que la fiche d'album porte en propre ══════ --}} @php $gouts = collect(['fav_vacation' => 'Lieu de vacances préféré', 'fav_book' => 'Livre préféré', 'fav_film' => 'Film préféré']) ->filter(fn ($l, $champ) => filled($member->$champ)); @endphp @if ($gouts->isNotEmpty() || filled($member->citation) || filled($member->bio))

Souvenirs

@if (filled($member->citation))
{{ $member->citation }}
@endif @if ($gouts->isNotEmpty())
@foreach ($gouts as $champ => $libelle)
{{ $libelle }}
{{ $member->$champ }}
@endforeach
@endif @if (filled($member->bio))
@foreach (preg_split("/\n\s*\n/", $member->bio) as $para)

{!! \App\Support\Markup::inline(trim($para)) !!}

@endforeach
@endif
@endif {{-- ═══ 5. L'album, en dernier ══════════════════════════════════════ --}} @if ($member->photos->isNotEmpty())

Album

@endif
← Tous les membres Par {{ config('site.author') }} ·
@endsection