22
33namespace Moox \Media \Http \Livewire ;
44
5- use Filament \Forms \Components \FileUpload ;
6- use Filament \Forms \Concerns \InteractsWithForms ;
7- use Filament \Forms \Contracts \HasForms ;
8- use Filament \Forms \Form ;
95use Livewire \Component ;
10- use Livewire \ WithFileUploads ;
6+ use Filament \ Forms \ Form ;
117use Livewire \WithPagination ;
128use Moox \Media \Models \Media ;
9+ use Livewire \WithFileUploads ;
10+ use Filament \Forms \Contracts \HasForms ;
11+ use Illuminate \Database \Eloquent \Model ;
12+ use Filament \Forms \Components \FileUpload ;
13+ use Filament \Forms \Concerns \InteractsWithForms ;
1314use Spatie \MediaLibrary \MediaCollections \FileAdderFactory ;
1415
1516/** @property \Filament\Forms\Form $form */
@@ -23,6 +24,8 @@ class MediaPickerModal extends Component implements HasForms
2324
2425 public ?string $ modelClass = null ;
2526
27+ public ?Model $ model = null ;
28+
2629 public $ media ;
2730
2831 public array $ selectedMediaIds = [];
@@ -52,28 +55,50 @@ class MediaPickerModal extends Component implements HasForms
5255
5356 public string $ dateFilter = '' ;
5457
58+
5559 protected $ listeners = [
5660 'set-media-picker-model ' => 'setModel ' ,
5761 'mediaUploaded ' => 'refreshMedia ' ,
5862 ];
5963
60- public function mount (): void
64+ public function mount (? int $ modelId = null , ? string $ modelClass = null ): void
6165 {
6266 $ this ->files = [];
6367 $ this ->form ->fill ();
68+
69+ $ this ->modelClass = $ modelClass ;
70+ $ this ->modelId = $ modelId ;
71+
72+ if (!$ this ->modelClass ) {
73+ $ this ->modelClass = Media::class;
74+ }
75+
76+ $ this ->modelClass = str_replace ('\\\\' , '\\' , $ this ->modelClass );
77+
78+ if (!class_exists ($ this ->modelClass )) {
79+ throw new \Exception ("Die Klasse {$ this ->modelClass } existiert nicht. " );
80+ }
81+
82+ if ($ this ->modelId ) {
83+ $ this ->model = app ($ this ->modelClass )::find ($ this ->modelId );
84+ }
85+
86+ if (!$ this ->modelId || !$ this ->model ) {
87+ $ this ->modelId = 0 ;
88+ }
6489 }
6590
6691 public function form (Form $ form ): Form
6792 {
6893 $ upload = FileUpload::make ('files ' )
6994 ->afterStateUpdated (function ($ state ) {
70- if (! $ state ) {
95+ if (!$ state ) {
7196 return ;
7297 }
7398
7499 $ processedFiles = session ('processed_files ' , []);
75100
76- if (! is_array ($ state )) {
101+ if (!is_array ($ state )) {
77102 $ model = new Media ;
78103 $ model ->exists = true ;
79104
@@ -82,14 +107,15 @@ public function form(Form $form): Form
82107
83108 $ title = pathinfo ($ state ->getClientOriginalName (), PATHINFO_FILENAME );
84109
110+ $ user = auth ()->user ();
85111 $ media ->title = $ title ;
86112 $ media ->alt = $ title ;
87- $ media ->original_model_type = Media::class ;
88- $ media ->original_model_id = $ media -> id ;
113+ $ media ->original_model_type = $ this -> modelClass ;
114+ $ media ->original_model_id = $ this -> modelId ?: null ;
89115 $ media ->model_id = $ media ->id ;
90116 $ media ->model_type = Media::class;
91- $ media ->uploader_type = get_class (auth ()-> user ()) ;
92- $ media ->uploader_id = auth () ->id () ;
117+ $ media ->uploader_type = $ user ? get_class ($ user) : null ;
118+ $ media ->uploader_id = $ user ? ->id;
93119
94120 if (str_starts_with ($ media ->mime_type , 'image/ ' )) {
95121 [$ width , $ height ] = getimagesize ($ media ->getPath ());
@@ -114,14 +140,15 @@ public function form(Form $form): Form
114140
115141 $ title = pathinfo ($ tempFile ->getClientOriginalName (), PATHINFO_FILENAME );
116142
143+ $ user = auth ()->user ();
117144 $ media ->title = $ title ;
118145 $ media ->alt = $ title ;
119- $ media ->original_model_type = Media::class ;
120- $ media ->original_model_id = $ media -> id ;
146+ $ media ->original_model_type = $ this -> modelClass ;
147+ $ media ->original_model_id = $ this -> modelId ?: null ;
121148 $ media ->model_id = $ media ->id ;
122149 $ media ->model_type = Media::class;
123- $ media ->uploader_type = get_class (auth ()-> user ()) ;
124- $ media ->uploader_id = auth () ->id () ;
150+ $ media ->uploader_type = $ user ? get_class ($ user) : null ;
151+ $ media ->uploader_id = $ user ? ->id;
125152
126153 if (str_starts_with ($ media ->mime_type , 'image/ ' )) {
127154 [$ width , $ height ] = getimagesize ($ media ->getPath ());
@@ -215,7 +242,7 @@ public function toggleMediaSelection(int $mediaId)
215242 $ this ->selectedMediaIds [] = $ mediaId ;
216243 }
217244 } else {
218- if (! empty ($ this ->selectedMediaIds ) && $ this ->selectedMediaIds [0 ] === $ mediaId ) {
245+ if (!empty ($ this ->selectedMediaIds ) && $ this ->selectedMediaIds [0 ] === $ mediaId ) {
219246 $ this ->selectedMediaIds = [];
220247 } else {
221248 $ this ->selectedMediaIds = [$ mediaId ];
@@ -254,15 +281,15 @@ public function applySelection()
254281 $ selectedMedia = Media::whereIn ('id ' , $ this ->selectedMediaIds )->get ();
255282
256283 if ($ selectedMedia ->isNotEmpty ()) {
257- if (! $ this ->multiple ) {
284+ if (!$ this ->multiple ) {
258285 $ media = $ selectedMedia ->first ();
259286 $ this ->dispatch ('mediaSelected ' , [
260287 'id ' => $ media ->id ,
261288 'url ' => $ media ->getUrl (),
262289 'file_name ' => $ media ->file_name ,
263290 ]);
264291 } else {
265- $ selectedMediaData = $ selectedMedia ->map (fn ($ media ) => [
292+ $ selectedMediaData = $ selectedMedia ->map (fn ($ media ) => [
266293 'id ' => $ media ->id ,
267294 'url ' => $ media ->getUrl (),
268295 'file_name ' => $ media ->file_name ,
@@ -313,10 +340,10 @@ public function render()
313340 $ media = Media::query ()
314341 ->when ($ this ->searchQuery , function ($ query ) {
315342 $ query ->where (function ($ subQuery ) {
316- $ subQuery ->where ('file_name ' , 'like ' , '% ' . $ this ->searchQuery . '% ' )
317- ->orWhere ('title ' , 'like ' , '% ' . $ this ->searchQuery . '% ' )
318- ->orWhere ('description ' , 'like ' , '% ' . $ this ->searchQuery . '% ' )
319- ->orWhere ('alt ' , 'like ' , '% ' . $ this ->searchQuery . '% ' );
343+ $ subQuery ->where ('file_name ' , 'like ' , '% ' . $ this ->searchQuery . '% ' )
344+ ->orWhere ('title ' , 'like ' , '% ' . $ this ->searchQuery . '% ' )
345+ ->orWhere ('description ' , 'like ' , '% ' . $ this ->searchQuery . '% ' )
346+ ->orWhere ('alt ' , 'like ' , '% ' . $ this ->searchQuery . '% ' );
320347 });
321348 })
322349 ->when ($ this ->fileTypeFilter , function ($ query ) {
0 commit comments