{{-- Organigramme intégré (sans modale). Tout le CSS est scopé sous #organigrammeSection pour ne pas entrer en conflit avec le template admin (Bootstrap .card, etc.). --}}
@php use Illuminate\Support\Str; if (!function_exists('org_photo_url_from_payload')) { function org_photo_url_from_payload($r) { if (!empty($r['avatar_url'])) { $u = $r['avatar_url']; if (Str::startsWith($u, ['http://', 'https://', '/'])) { return $u; } return asset($u); } if (!empty($r['image'])) { $path = str_replace('\\', '/', $r['image']); if (Str::startsWith($path, 'storage/')) { $path = Str::after($path, 'storage/'); } // Miniature si elle existe (cf. commande photos:thumbs) : // 51 photos plein format sur une seule page, c'etait 37 Mo. return \App\Helpers\PhotoHelper::url($path); } return null; } } if (!function_exists('org_render_tree')) { function org_render_tree($nodes, $level = 1) { static $gid = 1; // Evalue une seule fois par requete : inutile de refaire le test // a chaque carte, l'arbre en compte une cinquantaine. static $peutVoirFiche = null; if ($peutVoirFiche === null) { $peutVoirFiche = \Illuminate\Support\Facades\Gate::allows('users.view'); } if (!$nodes || !is_array($nodes)) return; echo '
'; foreach ($nodes as $node) { $currentId = 'g' . ($gid++); echo '
'; echo '
'; if (!empty($node['responsables'])) { foreach ($node['responsables'] as $r) { $prenom = e($r['prenom'] ?? ''); $nom = e($r['nom'] ?? ''); $poste = e($r['poste'] ?? ''); $avatar = org_photo_url_from_payload($r); // La carte devient un lien vers la fiche de l'employe. // C'est bien la carte elle-meme qui change de balise et non // un qui l'enveloppe : .people est un conteneur flex dont // .card est un item, intercaler un wrapper casserait la mise // en page. Le CSS et le JS ciblent .card sans presumer de la // balise, le rendu est donc identique. $lien = $peutVoirFiche && !empty($r['id']); if ($lien) { echo ''; } else { echo ''; } } echo '
'; if (!empty($node['subordonnes'])) { echo '
'; org_render_tree($node['subordonnes'], $level + 1); echo '
'; } echo '
'; } echo '
'; } } org_render_tree($orgTree); @endphp