event photo wasserzeichen umgesetzt. Event admins können eigene einsetzen (als branding) falls das Paket es erlaubt. der Super Admin kann für die günstigen Pakete eigene Wasserzeichen erzwingen
This commit is contained in:
@@ -258,6 +258,7 @@ class EventResource extends Resource
|
||||
'create' => Pages\CreateEvent::route('/create'),
|
||||
'view' => Pages\ViewEvent::route('/{record}'),
|
||||
'edit' => Pages\EditEvent::route('/{record}/edit'),
|
||||
'watermark' => Pages\ManageWatermark::route('/{record}/watermark'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
141
app/Filament/Resources/EventResource/Pages/ManageWatermark.php
Normal file
141
app/Filament/Resources/EventResource/Pages/ManageWatermark.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\EventResource\Pages;
|
||||
|
||||
use App\Filament\Resources\EventResource;
|
||||
use Filament\Forms;
|
||||
use Filament\Notifications\Notification;
|
||||
use Filament\Resources\Pages\Page;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class ManageWatermark extends Page
|
||||
{
|
||||
protected static string $resource = EventResource::class;
|
||||
|
||||
protected string $view = 'filament.resources.event-resource.pages.manage-watermark';
|
||||
|
||||
public ?string $watermark_mode = 'base';
|
||||
public ?string $watermark_asset = null;
|
||||
public string $watermark_position = 'bottom-right';
|
||||
public float $watermark_opacity = 0.25;
|
||||
public float $watermark_scale = 0.2;
|
||||
public int $watermark_padding = 16;
|
||||
public bool $serve_originals = false;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$event = $this->record;
|
||||
$settings = $event->settings ?? [];
|
||||
$watermark = Arr::get($settings, 'watermark', []);
|
||||
|
||||
$this->watermark_mode = $watermark['mode'] ?? 'base';
|
||||
$this->watermark_asset = $watermark['asset'] ?? null;
|
||||
$this->watermark_position = $watermark['position'] ?? 'bottom-right';
|
||||
$this->watermark_opacity = (float) ($watermark['opacity'] ?? 0.25);
|
||||
$this->watermark_scale = (float) ($watermark['scale'] ?? 0.2);
|
||||
$this->watermark_padding = (int) ($watermark['padding'] ?? 16);
|
||||
$this->serve_originals = (bool) Arr::get($settings, 'watermark_serve_originals', false);
|
||||
}
|
||||
|
||||
protected function getForms(): array
|
||||
{
|
||||
return [
|
||||
'form' => $this->form(
|
||||
$this->makeForm()
|
||||
->schema([
|
||||
Forms\Components\Fieldset::make(__('filament-watermark.heading'))
|
||||
->schema([
|
||||
Forms\Components\Select::make('watermark_mode')
|
||||
->label(__('filament-watermark.mode.label'))
|
||||
->options([
|
||||
'base' => __('filament-watermark.mode.base'),
|
||||
'custom' => __('filament-watermark.mode.custom'),
|
||||
'off' => __('filament-watermark.mode.off'),
|
||||
])
|
||||
->required(),
|
||||
Forms\Components\FileUpload::make('watermark_asset')
|
||||
->label(__('filament-watermark.asset'))
|
||||
->disk('public')
|
||||
->directory('branding')
|
||||
->preserveFilenames()
|
||||
->image()
|
||||
->visible(fn (callable $get) => $get('watermark_mode') === 'custom'),
|
||||
Forms\Components\Select::make('watermark_position')
|
||||
->label(__('filament-watermark.position'))
|
||||
->options([
|
||||
'top-left' => 'Top Left',
|
||||
'top-right' => 'Top Right',
|
||||
'bottom-left' => 'Bottom Left',
|
||||
'bottom-right' => 'Bottom Right',
|
||||
'center' => 'Center',
|
||||
])
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('watermark_opacity')
|
||||
->label(__('filament-watermark.opacity'))
|
||||
->numeric()
|
||||
->minValue(0)
|
||||
->maxValue(1)
|
||||
->step(0.05)
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('watermark_scale')
|
||||
->label(__('filament-watermark.scale'))
|
||||
->numeric()
|
||||
->minValue(0.05)
|
||||
->maxValue(1)
|
||||
->step(0.05)
|
||||
->required(),
|
||||
Forms\Components\TextInput::make('watermark_padding')
|
||||
->label(__('filament-watermark.padding'))
|
||||
->numeric()
|
||||
->minValue(0)
|
||||
->required(),
|
||||
Forms\Components\Toggle::make('serve_originals')
|
||||
->label(__('filament-watermark.serve_originals'))
|
||||
->helperText('Nur Admin/Owner: falls aktiviert, werden Originale statt watermarked ausgeliefert.')
|
||||
->default(false),
|
||||
])
|
||||
->columns(2),
|
||||
])
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
{
|
||||
$event = $this->record;
|
||||
$package = $event->eventPackage?->package;
|
||||
|
||||
$brandingAllowed = $package?->branding_allowed === true;
|
||||
$policy = $package?->watermark_allowed === false ? 'none' : 'basic';
|
||||
|
||||
if (! $brandingAllowed && $this->watermark_mode === 'custom') {
|
||||
Notification::make()->title('Branding nicht erlaubt für dieses Paket')->danger()->send();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($policy === 'basic' && $this->watermark_mode === 'off') {
|
||||
Notification::make()->title('Kein Wasserzeichen ist in diesem Paket nicht erlaubt')->danger()->send();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$settings = $event->settings ?? [];
|
||||
$settings['watermark'] = [
|
||||
'mode' => $this->watermark_mode,
|
||||
'asset' => $this->watermark_asset,
|
||||
'position' => $this->watermark_position,
|
||||
'opacity' => (float) $this->watermark_opacity,
|
||||
'scale' => (float) $this->watermark_scale,
|
||||
'padding' => (int) $this->watermark_padding,
|
||||
];
|
||||
$settings['watermark_serve_originals'] = $this->serve_originals;
|
||||
|
||||
$event->forceFill(['settings' => $settings])->save();
|
||||
|
||||
Notification::make()
|
||||
->title(__('filament-watermark.saved'))
|
||||
->success()
|
||||
->send();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user