newName = ''; $this->newType = ''; $this->showCreateModal = true; } public function createVersion(): void { $this->validate([ 'newName' => 'required|string|max:255', 'newType' => 'required|string|in:video-display,b2in,offers', ], [ 'newName.required' => 'Bitte geben Sie einen Namen ein.', 'newType.required' => 'Bitte wählen Sie einen Typ aus.', ]); $version = DisplayVersion::create([ 'name' => $this->newName, 'type' => $this->newType, 'settings' => $this->defaultSettingsForType($this->newType), 'is_active' => true, ]); $this->showCreateModal = false; $this->newName = ''; $this->newType = ''; session()->flash('success', 'Modul "'.$version->name.'" wurde erstellt!'); $this->redirect( route('admin.cms.display-module-edit', $version), navigate: true ); } public function deleteVersion(int $id): void { $version = DisplayVersion::query() ->withCount([ 'playlistItems as displays_count' => fn ($query) => $query ->join('display_playlists', 'display_playlist_items.display_playlist_id', '=', 'display_playlists.id') ->select(DB::raw('count(distinct display_playlists.display_id)')), ]) ->findOrFail($id); if ($version->displays_count > 0) { session()->flash('error', 'Modul "'.$version->name.'" wird noch von '.$version->displays_count.' Display(s) verwendet und kann nicht gelöscht werden. Entfernen Sie es zuerst aus den betroffenen Bespielungen.'); return; } $name = $version->name; $version->delete(); session()->flash('success', 'Modul "'.$name.'" wurde gelöscht!'); } public function toggleActive(int $id): void { $version = DisplayVersion::findOrFail($id); $version->update(['is_active' => ! $version->is_active]); } /** * @return array */ private function defaultSettingsForType(string $type): array { return DisplayModuleSettings::defaults($type); } public function render() { $versions = DisplayVersion::withCount([ 'items', 'playlistItems as displays_count' => fn ($query) => $query ->join('display_playlists', 'display_playlist_items.display_playlist_id', '=', 'display_playlists.id') ->select(DB::raw('count(distinct display_playlists.display_id)')), ]) ->orderBy('name') ->get(); return view('livewire.admin.cms.display-version-list', [ 'versions' => $versions, 'types' => DisplayVersionType::cases(), ]); } }