mirror of
https://github.com/AnimeThemes/animethemes-server.git
synced 2026-11-13 09:38:48 +01:00
77 lines
2.5 KiB
PHP
77 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\Actions\Models\Wiki\Image;
|
|
|
|
use App\Actions\Models\Wiki\Image\OptimizeImageAction as OptimizeImage;
|
|
use App\Filament\Actions\BaseAction;
|
|
use App\Filament\Components\Fields\Select;
|
|
use App\Filament\Components\Fields\TextInput;
|
|
use App\Models\Wiki\Image;
|
|
use Filament\Schemas\Schema;
|
|
use Filament\Support\Icons\Heroicon;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class OptimizeImageAction extends BaseAction
|
|
{
|
|
public static function getDefaultName(): ?string
|
|
{
|
|
return 'optimize-image';
|
|
}
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->label(__('filament.actions.models.wiki.optimize_image.name'));
|
|
|
|
$this->icon(Heroicon::ArrowPathRoundedSquare);
|
|
|
|
$this->visible(fn (Image $record) => Auth::user()->can('forceDelete', $record));
|
|
|
|
$this->action(fn (Image $record, array $data) => $this->handle($record, $data));
|
|
}
|
|
|
|
public function handle(Image $image, array $fields): void
|
|
{
|
|
$extension = Arr::get($fields, 'extension');
|
|
$width = ($value = Arr::get($fields, 'width')) !== null ? (int) $value : null;
|
|
$height = ($value = Arr::get($fields, 'height')) !== null ? (int) $value : null;
|
|
|
|
$action = new OptimizeImage($image, $extension, $width, $height);
|
|
|
|
$actionResult = $action->handle();
|
|
|
|
if ($actionResult->hasFailed()) {
|
|
$this->failedLog($actionResult->getMessage());
|
|
}
|
|
}
|
|
|
|
public function getSchema(Schema $schema): Schema
|
|
{
|
|
return $schema
|
|
->components([
|
|
Select::make('extension')
|
|
->label(__('filament.actions.models.wiki.optimize_image.extension.name'))
|
|
->helperText(__('filament.actions.models.wiki.optimize_image.extension.help'))
|
|
->options([
|
|
'avif' => 'avif',
|
|
])
|
|
->default('avif'),
|
|
|
|
TextInput::make('width')
|
|
->label(__('filament.actions.models.wiki.optimize_image.width.name'))
|
|
->helperText(__('filament.actions.models.wiki.optimize_image.width.help'))
|
|
->integer(),
|
|
|
|
TextInput::make('height')
|
|
->label(__('filament.actions.models.wiki.optimize_image.height.name'))
|
|
->helperText(__('filament.actions.models.wiki.optimize_image.height.help'))
|
|
->integer(),
|
|
])
|
|
->columns(1);
|
|
}
|
|
}
|