*/ use HasFactory; protected $fillable = [ 'name', 'location', 'is_active', 'is_test', 'preview_token', ]; protected function casts(): array { return [ 'is_active' => 'boolean', 'is_test' => 'boolean', ]; } /** * @deprecated Wird in Phase 7 entfernt. Nutze stattdessen liveModules() * oder die Playlist-Relationen (livePlaylist, draftPlaylist). */ public function versions(): BelongsToMany { return $this->belongsToMany(DisplayVersion::class, 'display_display_version') ->withPivot('sort_order') ->orderByPivot('sort_order'); } /** * @return HasMany */ public function playlists(): HasMany { return $this->hasMany(DisplayPlaylist::class); } /** * @return HasOne */ public function livePlaylist(): HasOne { return $this->hasOne(DisplayPlaylist::class) ->where('status', DisplayPlaylist::STATUS_PUBLISHED); } /** * @return HasOne */ public function draftPlaylist(): HasOne { return $this->hasOne(DisplayPlaylist::class) ->where('status', DisplayPlaylist::STATUS_DRAFT); } /** * Liefert die Module der aktuell veröffentlichten Bespielung in Reihenfolge. */ public function liveModules(): BelongsToMany { return $this->belongsToMany( DisplayVersion::class, 'display_playlist_items', 'display_playlist_id', 'display_version_id' ) ->wherePivotIn( 'display_playlist_id', DisplayPlaylist::query() ->where('display_id', $this->id ?? 0) ->where('status', DisplayPlaylist::STATUS_PUBLISHED) ->select('id') ) ->withPivot(['sort_order', 'id']) ->withTimestamps() ->orderByPivot('sort_order'); } public function ensurePreviewToken(): string { if (! $this->preview_token) { $this->preview_token = Str::random(40); $this->save(); } return $this->preview_token; } }