Skip to content

Commit 5a9f134

Browse files
committed
Merge branch 'develop'
* develop: add thumbnail icon for svg (con't) Fix styling add thumbnail icon for svg bugfix: missing thumbnail for media library bugfix: have error on bulk action for media library add limited mime type + max size + min size configs for medira library
2 parents c0d830d + 06e4d58 commit 5a9f134

11 files changed

Lines changed: 199 additions & 55 deletions

File tree

resources/views/components/media-library/thumbnail-icon.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@props(['icon'])
22

3-
@if (str_starts_with($icon, 'inspirecms-support::'))
3+
@if (str_starts_with($icon, 'inspirecms::'))
44
<x-filament::icon :alias="$icon" {{ $attributes }} />
55
@else
66
<x-filament::icon :icon="$icon" {{ $attributes }} />
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" fill="currentColor">
2+
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
3+
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
4+
<g id="SVGRepo_iconCarrier">
5+
<style type="text/css">
6+
.st0 {
7+
fill: currentColor;
8+
}
9+
</style>
10+
<g>
11+
<path class="st0" d="M378.409,0H208.294h-13.176l-9.314,9.315L57.017,138.101l-9.314,9.315v13.176v265.513 c0,47.36,38.528,85.896,85.895,85.896h244.811c47.361,0,85.888-38.535,85.888-85.896V85.896C464.297,38.528,425.77,0,378.409,0z M432.493,426.104c0,29.877-24.214,54.091-54.084,54.091H133.598c-29.877,0-54.091-24.214-54.091-54.091V160.592h83.717 c24.884,0,45.07-20.179,45.07-45.071V31.804h170.114c29.87,0,54.084,24.214,54.084,54.091V426.104z"></path>
12+
<path class="st0" d="M180.296,296.668l-4.846-0.67c-10.63-1.487-14.265-4.978-14.265-10.104c0-5.78,4.309-9.817,12.383-9.817 c5.653,0,11.305,1.62,15.745,3.764c1.886,0.942,3.903,1.487,5.789,1.487c4.845,0,8.612-3.63,8.612-8.616 c0-3.226-1.481-5.921-4.71-7.939c-5.384-3.372-15.476-6.06-25.572-6.06c-19.781,0-32.436,11.171-32.436,27.998 c0,16.15,10.232,24.898,28.938,27.454l4.846,0.67c10.903,1.48,14.129,4.846,14.129,10.229c0,6.326-5.247,10.766-14.939,10.766 c-6.727,0-12.111-1.745-19.645-5.921c-1.616-0.942-3.634-1.62-5.788-1.62c-5.115,0-8.885,3.91-8.885,8.756 c0,3.226,1.616,6.326,4.713,8.344c6.054,3.764,15.878,7.8,28.798,7.8c23.823,0,35.934-12.24,35.934-28.795 C209.097,307.84,199.273,299.356,180.296,296.668z"></path>
13+
<path class="st0" d="M281.108,259.382c-4.577,0-7.939,2.43-9.556,7.674l-16.69,54.51h-0.402l-17.634-54.51 c-1.745-5.244-4.978-7.674-9.551-7.674c-5.653,0-9.692,4.176-9.692,9.287c0,1.347,0.269,2.834,0.67,4.175l23.286,68.104 c2.96,8.477,6.727,11.57,12.652,11.57c5.785,0,9.555-3.093,12.516-11.57l23.282-68.104c0.406-1.341,0.674-2.828,0.674-4.175 C290.664,263.558,286.76,259.382,281.108,259.382z"></path>
14+
<path class="st0" d="M364.556,300.836h-18.841c-5.114,0-8.344,3.1-8.344,7.806c0,4.713,3.23,7.814,8.344,7.814h6.193 c0.538,0,0.803,0.258,0.803,0.803c0,3.505-0.265,6.598-1.075,9.014c-1.882,5.796-7.67,9.426-14.669,9.426 c-7.943,0-12.921-3.903-14.939-10.096c-1.075-3.365-1.48-7.8-1.48-19.648c0-11.842,0.405-16.15,1.48-19.516 c2.018-6.325,6.867-10.228,14.67-10.228c5.924,0,10.362,1.885,13.859,6.724c2.695,3.777,5.387,4.852,8.749,4.852 c4.981,0,9.021-3.638,9.021-8.888c0-2.151-0.674-4.035-1.752-5.921c-4.842-8.204-15.071-14.264-29.877-14.264 c-16.287,0-28.935,7.408-33.644,22.204c-2.022,6.466-2.559,11.576-2.559,25.038c0,13.454,0.538,18.573,2.559,25.031 c4.709,14.802,17.357,22.204,33.644,22.204c16.286,0,28.668-8.204,33.374-22.881c1.617-5.111,2.29-12.645,2.29-20.716v-0.95 C372.362,303.664,369.538,300.836,364.556,300.836z"></path>
15+
</g>
16+
</g>
17+
</svg>

src/Base/Manifests/MediaLibraryRegistry.php

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ class MediaLibraryRegistry implements MediaLibraryRegistryInterface
1919
*/
2020
protected array $registerConversionsUsing = [];
2121

22+
protected ?array $limitedMimeTypes = null;
23+
24+
protected ?int $maxSize = null;
25+
26+
protected ?int $minSize = null;
27+
2228
public function setDisk(string $disk): void
2329
{
2430
$this->disk = $disk;
@@ -39,6 +45,30 @@ public function setShouldMapVideoPropertiesWithFfmpeg(bool $condition): void
3945
$this->shouldMapVideoPropertiesWithFfmpeg = $condition;
4046
}
4147

48+
public function setLimitedMimeTypes(array $limitedMimeTypes): void
49+
{
50+
$this->limitedMimeTypes = $limitedMimeTypes;
51+
}
52+
53+
public function registerConversionUsing(Closure $callback, bool $merge = true): void
54+
{
55+
if ($merge) {
56+
$this->registerConversionsUsing[] = $callback;
57+
} else {
58+
$this->registerConversionsUsing = [$callback];
59+
}
60+
}
61+
62+
public function setMaxSize(?int $maxSize): void
63+
{
64+
$this->maxSize = $maxSize;
65+
}
66+
67+
public function setMinSize(?int $minSize): void
68+
{
69+
$this->minSize = $minSize;
70+
}
71+
4272
public function getDisk(): string
4373
{
4474
return $this->disk;
@@ -59,17 +89,28 @@ public function shouldMapVideoPropertiesWithFfmpeg(): bool
5989
return $this->shouldMapVideoPropertiesWithFfmpeg;
6090
}
6191

62-
public function registerConversionUsing(Closure $callback, bool $merge = true): void
92+
public function hasLimitedMimeTypes(): bool
6393
{
64-
if ($merge) {
65-
$this->registerConversionsUsing[] = $callback;
66-
} else {
67-
$this->registerConversionsUsing = [$callback];
68-
}
94+
return ! empty($this->getLimitedMimeTypes());
95+
}
96+
97+
public function getLimitedMimeTypes(): array
98+
{
99+
return $this->limitedMimeTypes ?? [];
69100
}
70101

71102
public function getRegisterConversionsUsing(): array
72103
{
73104
return $this->registerConversionsUsing;
74105
}
106+
107+
public function getMaxSize(): ?int
108+
{
109+
return $this->maxSize;
110+
}
111+
112+
public function getMinSize(): ?int
113+
{
114+
return $this->minSize;
115+
}
75116
}

src/Base/Manifests/MediaLibraryRegistryInterface.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ public function setThumbnailCrop(int $width, int $height): void;
1212

1313
public function setShouldMapVideoPropertiesWithFfmpeg(bool $condition): void;
1414

15+
public function setLimitedMimeTypes(array $limitedMimeTypes): void;
16+
17+
public function registerConversionUsing(\Closure $callback, bool $merge = true): void;
18+
19+
public function setMaxSize(?int $maxSize): void;
20+
21+
public function setMinSize(?int $minSize): void;
22+
1523
public function getDisk(): string;
1624

1725
public function getDirectory(): string;
@@ -23,7 +31,13 @@ public function getThumbnailCrop(): array;
2331

2432
public function shouldMapVideoPropertiesWithFfmpeg(): bool;
2533

26-
public function registerConversionUsing(\Closure $callback, bool $merge = true): void;
34+
public function hasLimitedMimeTypes(): bool;
35+
36+
public function getLimitedMimeTypes(): array;
2737

2838
public function getRegisterConversionsUsing(): array;
39+
40+
public function getMaxSize(): ?int;
41+
42+
public function getMinSize(): ?int;
2943
}

src/Facades/MediaLibraryRegistry.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,19 @@
1010
* @method static void setDirectory(string $directory)
1111
* @method static void setThumbnailCrop(int $width, int $height)
1212
* @method static void setShouldMapVideoPropertiesWithFfmpeg(bool $condition)
13+
* @method static void setLimitedMimeTypes(array $limitedMimeTypes)
14+
* @method static void registerConversionUsing(\Closure $callback, bool $merge = true)
15+
* @method static void setMaxSize(?int $maxSize)
16+
* @method static void setMinSize(?int $minSize)
1317
* @method static string getDisk()
1418
* @method static string getDirectory()
1519
* @method static array getThumbnailCrop()
1620
* @method static bool shouldMapVideoPropertiesWithFfmpeg()
17-
* @method static void registerConversionUsing(\Closure $callback, bool $merge = true)
21+
* @method static bool hasLimitedMimeTypes()
22+
* @method static array getLimitedMimeTypes()
1823
* @method static array getRegisterConversionsUsing()
24+
* @method static ?int getMaxSize()
25+
* @method static ?int getMinSize()
1926
*
2027
* @see \SolutionForest\InspireCms\Support\Base\Manifests\MediaLibraryRegistry
2128
*/

src/InspireCmsSupportServiceProvider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ protected function getIcons(): array
131131

132132
'pdf' => view('inspirecms-support::icons.pdf'),
133133
'excel' => view('inspirecms-support::icons.excel'),
134+
'svg' => view('inspirecms-support::icons.svg'),
134135

135136
])->mapWithKeys(fn ($icon, $key) => ["{$iconPrefix}{$key}" => $icon])->all();
136137
}

src/MediaLibrary/Actions/Action.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ protected function setUp(): void
1717

1818
$this->model(ModelRegistry::get(MediaAsset::class));
1919

20-
$this->modelLabel(fn ($record) => $record ? $this->getRecordTitle($record) : __('inspirecms-support::media-library.media'));
20+
$this->modelLabel(fn ($record) => $record ? $this->getRecordTitle($record) : __('inspirecms-support::media-library.media.singular'));
2121

2222
$this->recordTitleAttribute('title');
2323
}

src/MediaLibrary/Actions/EditAction.php

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ protected function setUp(): void
4646

4747
return $data;
4848
})
49-
->form([
50-
FileUpload::make('file')
49+
->form(function () {
50+
51+
$file = FileUpload::make('file')
5152
->label(__('inspirecms-support::media-library.forms.file.label'))
5253
->validationAttribute(__('inspirecms-support::media-library.forms.file.validation_attribute'))
5354
->disk(MediaLibraryRegistry::getDisk())
@@ -73,18 +74,33 @@ protected function setUp(): void
7374
$record->addMedia($file)->toMediaCollection();
7475

7576
return $record->getFirstMedia()->getPathRelativeToRoot();
76-
}),
77-
TextInput::make('title')
78-
->label(__('inspirecms-support::media-library.forms.title.label'))
79-
->validationAttribute(__('inspirecms-support::media-library.forms.title.validation_attribute'))
80-
->required(),
81-
TextInput::make('caption')
82-
->label(__('inspirecms-support::media-library.forms.caption.label'))
83-
->validationAttribute(__('inspirecms-support::media-library.forms.title.caption')),
84-
Textarea::make('description')
85-
->label(__('inspirecms-support::media-library.forms.description.label'))
86-
->validationAttribute(__('inspirecms-support::media-library.forms.description.caption')),
87-
])
77+
});
78+
79+
if (MediaLibraryRegistry::hasLimitedMimeTypes()) {
80+
$file->acceptedFileTypes(MediaLibraryRegistry::getLimitedMimeTypes());
81+
}
82+
83+
if (($maxSize = MediaLibraryRegistry::getMaxSize()) !== null) {
84+
$file->maxSize($maxSize);
85+
}
86+
if (($minSize = MediaLibraryRegistry::getMinSize()) !== null) {
87+
$file->minSize($minSize);
88+
}
89+
90+
return [
91+
$file,
92+
TextInput::make('title')
93+
->label(__('inspirecms-support::media-library.forms.title.label'))
94+
->validationAttribute(__('inspirecms-support::media-library.forms.title.validation_attribute'))
95+
->required(),
96+
TextInput::make('caption')
97+
->label(__('inspirecms-support::media-library.forms.caption.label'))
98+
->validationAttribute(__('inspirecms-support::media-library.forms.title.caption')),
99+
Textarea::make('description')
100+
->label(__('inspirecms-support::media-library.forms.description.label'))
101+
->validationAttribute(__('inspirecms-support::media-library.forms.description.caption')),
102+
];
103+
})
88104
->action(function (array $data, ?Model $record, Action $action) {
89105
if (empty($data) || ! $record) {
90106
return;

src/MediaLibrary/Actions/UploadAction.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,31 @@ protected function setUp(): void
3737

3838
$this->modalSubmitActionLabel(__('inspirecms-support::media-library.buttons.upload.label'));
3939

40-
$this->form([
40+
$this->form(function () {
4141

42-
\Filament\Forms\Components\FileUpload::make('files')
42+
$file = \Filament\Forms\Components\FileUpload::make('files')
4343
->label(__('inspirecms-support::media-library.forms.files.label'))
4444
->validationAttribute(__('inspirecms-support::media-library.forms.files.validation_attribute'))
4545
->disk(MediaLibraryRegistry::getDisk())
4646
->directory(MediaLibraryRegistry::getDirectory())
4747
->imageEditor()
4848
->multiple()
49-
->storeFiles(false),
49+
->storeFiles(false);
5050

51-
])->action(function (array $data) {
51+
if (MediaLibraryRegistry::hasLimitedMimeTypes()) {
52+
$file->acceptedFileTypes(MediaLibraryRegistry::getLimitedMimeTypes());
53+
}
54+
55+
if (($maxSize = MediaLibraryRegistry::getMaxSize()) !== null) {
56+
$file->maxSize($maxSize);
57+
}
58+
if (($minSize = MediaLibraryRegistry::getMinSize()) !== null) {
59+
$file->minSize($minSize);
60+
}
61+
62+
return [$file];
63+
64+
})->action(function (array $data) {
5265
if (empty($data['files'])) {
5366
return;
5467
}

src/Models/Contracts/MediaAsset.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ public function getThumbnailUrl();
5454
*/
5555
public function getThumbnail();
5656

57+
/**
58+
* Determine if the media asset is a svg.
59+
*
60+
* @return bool True if the media asset is s svg, false otherwise.
61+
*/
62+
public function isSvg();
63+
5764
/**
5865
* Determine if the media asset is an image.
5966
*
@@ -75,6 +82,13 @@ public function isVideo();
7582
*/
7683
public function isAudio();
7784

85+
/**
86+
* Determine if the media asset is a PDF.
87+
*
88+
* @return bool True if the media asset is a PDF, false otherwise.
89+
*/
90+
public function isPdf();
91+
7892
/**
7993
* Determine if the media asset is a folder.
8094
*

0 commit comments

Comments
 (0)