{{-- Bölüm kütüphanesinin "veri kaynağı" paneli. Hem Genel Bakış kipinde hem Site Editörü'ndeki kütüphanede aynı içerik gösterilir; bu yüzden veri + üretici burada tek yerde tutulur. Gerekli değişken: $availableSections (bölüm manifesti). --}} @php $sourceMap = \App\Services\Site\Templates\VoyageTemplate::dataSources(); // "tours" işareti acentenin web'de listelenebilen tur tiplerine açılır: // yalnızca yetkisi olan tipler bağlantı olarak çıkar (yoksa üçü de). $tourScreens = [ 'kultur-turu' => ['Kültür turları', 'agency.products.kultur-turlari.index'], 'yurtdisi-turu' => ['Yurt dışı turları', 'agency.products.yurtdisi-turlari.index'], 'gunubirlik-tur' => ['Günübirlik turlar', 'agency.products.gunubirlik-turlar.index'], ]; $activeCodes = app(\App\Services\Site\SiteService::class) ->activeProductTypeCodes(auth()->user()->agency); $tourLinks = collect($tourScreens) ->filter(fn ($screen, $code) => in_array($code, $activeCodes, true)) ->whenEmpty(fn () => collect($tourScreens)) ->map(fn ($screen) => ['label' => $screen[0], 'route' => $screen[1]]) ->values() ->all(); $resolveLinks = function ($links) use ($tourLinks) { if ($links === 'tours') { $links = $tourLinks; } return collect($links ?? []) // Route adı tanımlı değilse (modül kapalıysa) bağlantı çizilmez ->filter(fn ($link) => \Illuminate\Support\Facades\Route::has($link['route'])) ->map(fn ($link) => ['label' => $link['label'], 'url' => route($link['route'])]) ->values() ->all(); }; $sourcePayload = collect($availableSections)->map(fn ($definition, $key) => [ 'fields' => collect($definition['fields'] ?? [])->pluck('label')->filter()->values()->all(), 'blocks' => collect($sourceMap[$key] ?? [])->map(fn ($block) => [ 'icon' => $block['icon'], 'title' => $block['title'], 'text' => $block['text'], 'links' => $resolveLinks($block['links'] ?? null), ])->all(), ])->all(); @endphp