@extends('layouts.app') @section('title','Plan du site (Merlin)') @section('content')
Plan du site
Le plan dessiné dans Merlin est repris sur la page « Le plan » du site, en version interactive. Seul le plan commercial est repris : les vignettes non publiques, les vignettes annulées, les stands et animations sans numéro d'emplacement (pas encore placés), le fond de plan technique et les tracés techniques (portes, passages, fenêtres) sont écartés à l'import et n'entrent jamais dans la base du site.

Connexion : {{ $configured ? 'configurée ✅' : 'manquante (MERLIN_API_KEY et MERLIN_BASE_URL dans le .env)' }}

@if($eventId === '')

Aucun événement choisi. Sélectionnez-le d'abord sur la page Programme (Merlin) : le plan et le programme partagent le même événement.

@else

Événement : {{ $eventId }} (choisi sur la page Programme (Merlin)).

@endif
@csrf @method('PUT')

Avant cette date, le public voit « Le plan arrive bientôt » ; les membres connectés voient déjà le plan, avec un bandeau rouge d'avertissement. Champ vide = jamais dévoilé.

@csrf
@csrf
@csrf
Voir la page

Ce bouton recharge tous les caches (La Comte, Orgexpo, photographes, invités, programme, plan) : les sources se citent les unes les autres, une mise à jour partielle laisserait des fiches manquantes ou dépareillées.

@if($plan)

En cache : {{ $plan->elements }} élément(s) public(s) @if($plan->masques) · {{ $plan->masques }} vignette(s) technique(s) écartée(s) @endif · terrain {{ $plan->payload['largeur_m'] ?? '?' }} × {{ $plan->payload['hauteur_m'] ?? '?' }} m · {{ count($plan->payload['fonds'] ?? []) }} fond(s) d'image · dernière synchro {{ \Illuminate\Support\Carbon::parse($plan->synced_at)->diffForHumans() }}. L'import automatique (cron) rafraîchit aussi le plan toutes les heures.

@else

Aucun plan en cache pour l'instant : cliquez sur « Tout recharger ».

@endif
@if(session('plan_summary')) @php($s = session('plan_summary'))
Résultat du test
{{ $s['publics'] }}
Vignettes publiques
{{ $s['total'] - $s['publics'] }}
Écartées (techniques, annulées, sans numéro)
{{ $s['fonds_publics'] }}
Fond(s) d'image repris
{{ $s['terrain'] }}
Terrain
@if(!empty($s['sans_numero']))

{{ $s['sans_numero'] }} emplacement(s) (stands ou animations) sans numéro : ils n'apparaissent pas sur le plan public tant qu'un numéro ne leur est pas attribué dans Merlin. Les décors, eux, restent visibles.

@endif @if($s['fonds_techniques'])

{{ $s['fonds_techniques'] }} fond(s) de plan technique détecté(s) : ils ne seront jamais repris sur le site.

@endif
@endif
Comment ça marche

Le plan reste modifiable uniquement dans Merlin : le site n'en garde qu'une copie, redessinée à l'échelle (tout est en mètres). Une vignette qui bouge dans Merlin bouge ici au prochain import.
Pour que l'import fonctionne, la clé API du site doit porter le scope plan:public (Merlin → Super admin → Clés API). C'est le scope le plus sûr : Merlin ne nous envoie alors que les vignettes publiques.
Au clic sur une vignette, le site affiche sa fiche : nom, numéro d'emplacement, et la description/photo venant de La Comte (animations) ou d'Orgexpo (exposants) quand la vignette y est reliée. Une scène posée sur le plan affiche en plus ce qui s'y joue, repris du programme (rien avant sa date de diffusion).
Les animations numérotées s'affichent en petite puce (goutte au numéro d'emplacement) plutôt qu'en grand bloc, pour ne pas masquer le fond de plan ; exposants, stands et scènes gardent leur vignette.
Les serrures et personnages du jeu d'Yggdrasil deviennent des pastilles colorées : au clic, le site annonce le jeu et, si la pastille est raccordée à un stand dans Merlin, chez qui aller chercher. Pour en cacher une au public, cochez « Invisible au public » dans Merlin.
Les autocollants (arbres, ponts, décors) habillent le plan sous les vignettes : ils ne se cliquent pas et ne comptent pas comme emplacements.
Les images (fond de plan, décors) sont copiées sur le site et allégées à la taille où elles s'affichent : elles ne sont redemandées à Merlin que la première fois. Si vous en retouchez une dans Merlin, utilisez « Tout recharger, images comprises ».

@endsection