schema([ TextInput::make('name') ->label('Event-Name') ->required(), TextInput::make('title') ->label('Galerie Titel') ->required(), TextInput::make('images_path') ->label('Upload-Pfad') ->helperText('Relativ zu public/storage, z.B. uploads/event-xyz') ->default(fn () => 'uploads/'.Str::slug('event-'.Str::random(4))) ->required(), Toggle::make('allow_print') ->label('Drucken erlauben') ->default(true), Toggle::make('allow_ai_styles') ->label('AI-Stile erlauben') ->default(true), Toggle::make('upload_enabled') ->label('Uploads aktivieren') ->default(true), ]) ->statePath('data'); } public function save(): void { $data = $this->form->getState(); $gallery = new Gallery([ 'name' => $data['name'], 'title' => $data['title'], 'images_path' => trim($data['images_path'], '/'), 'is_public' => true, 'allow_ai_styles' => (bool) $data['allow_ai_styles'], 'allow_print' => (bool) $data['allow_print'], 'upload_enabled' => (bool) $data['upload_enabled'], ]); $gallery->slug = Str::uuid()->toString(); $plainToken = Str::random(40); $gallery->setUploadToken($plainToken); $gallery->save(); $this->result = [ 'gallery' => $gallery->only(['id', 'name', 'slug', 'images_path']), 'upload_token' => $plainToken, 'upload_url' => route('api.sparkbooth.upload'), 'gallery_url' => route('gallery.show', $gallery), ]; Notification::make() ->title('Galerie erstellt und Upload-Token generiert.') ->success() ->send(); } protected function getFormActions(): array { return [ \Filament\Actions\Action::make('save') ->label('Setup erstellen') ->submit('save'), ]; } }