- Mediathek: Video-Vorschaubilder statt Icons (FFmpeg-Thumbnails + Backfill-Command), Kategorie "Sonstiges" - B2in Media-Picker zeigt alle Medientypen, Typ wird automatisch erkannt; Thumbnail-Preview vor allen Medien-URL-Feldern - B2in Marke/Footer: Footer ein/aus, Logo+Claim frei positionierbar (Ecken) mit Constraints, separate Anzeige-Schalter - Angebote-Modul dynamisch: kein Slide-Typ mehr, einheitliches Detail-Layout mit ein-/ausblendbaren Bloecken, Logo/Brand pro Slide, Streichpreis-Option - Player: leere Module stoppen Endlosschleife, dynamische Layout-Anpassung bei verstecktem Footer/Header - Fix: Script-Ladereihenfolge (Livewire vor Flux), entfernte stale public/flux/flux.js, Modal-Crash beim Aktualisieren behoben Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
1.8 KiB
PHP
57 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\DisplayVersion;
|
|
use App\Models\DisplayVersionItem;
|
|
use App\Services\DisplayPlaylistConfigBuilder;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
|
|
|
class ModulePreviewController extends Controller
|
|
{
|
|
public function show(DisplayVersion $module): BinaryFileResponse
|
|
{
|
|
return $this->playerResponse();
|
|
}
|
|
|
|
public function showItem(DisplayVersion $module, DisplayVersionItem $item): BinaryFileResponse
|
|
{
|
|
abort_unless($item->display_version_id === $module->id, 404);
|
|
|
|
return $this->playerResponse();
|
|
}
|
|
|
|
private function playerResponse(): BinaryFileResponse
|
|
{
|
|
return response()->file(public_path('_cabinet/display/index.html'), [
|
|
'Cache-Control' => 'no-cache, must-revalidate',
|
|
]);
|
|
}
|
|
|
|
public function config(DisplayVersion $module, DisplayPlaylistConfigBuilder $configBuilder): JsonResponse
|
|
{
|
|
$module->load('items');
|
|
|
|
if (! $module->is_active) {
|
|
return response()->json(['error' => 'Module preview not configured'], 404);
|
|
}
|
|
|
|
return response()->json($configBuilder->fromModules($module->newCollection([$module])));
|
|
}
|
|
|
|
public function configItem(DisplayVersion $module, DisplayVersionItem $item, DisplayPlaylistConfigBuilder $configBuilder): JsonResponse
|
|
{
|
|
abort_unless($item->display_version_id === $module->id, 404);
|
|
|
|
if (! $module->is_active) {
|
|
return response()->json(['error' => 'Module preview not configured'], 404);
|
|
}
|
|
|
|
$item->is_active = true;
|
|
$module->setRelation('items', $item->newCollection([$item]));
|
|
|
|
return response()->json($configBuilder->fromModules($module->newCollection([$module]), $item->updated_at));
|
|
}
|
|
}
|