Update admin PWA events, branding, and packages
This commit is contained in:
@@ -1298,7 +1298,7 @@ class EventPublicController extends BaseController
|
||||
);
|
||||
}
|
||||
|
||||
$diskName = config('filesystems.default', 'public');
|
||||
$diskName = 'public';
|
||||
|
||||
try {
|
||||
$storage = Storage::disk($diskName);
|
||||
|
||||
@@ -453,7 +453,7 @@ class EventController extends Controller
|
||||
}
|
||||
|
||||
if ($assetDataUrl && $mode === 'custom' && $brandingAllowed) {
|
||||
if (! preg_match('/^data:image\\/(png|webp|jpe?g);base64,(.+)$/i', $assetDataUrl, $matches)) {
|
||||
if (! preg_match('/^data:image\\/(png|webp|jpe?g|svg\\+xml);base64,(.+)$/i', $assetDataUrl, $matches)) {
|
||||
throw ValidationException::withMessages([
|
||||
'settings.watermark.asset_data_url' => __('Ungültiges Wasserzeichen-Bild.'),
|
||||
]);
|
||||
@@ -473,7 +473,12 @@ class EventController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
$extension = str_starts_with(strtolower($matches[1]), 'jp') ? 'jpg' : strtolower($matches[1]);
|
||||
$mime = strtolower($matches[1]);
|
||||
$extension = match (true) {
|
||||
str_starts_with($mime, 'jp') => 'jpg',
|
||||
str_starts_with($mime, 'svg') => 'svg',
|
||||
default => $mime,
|
||||
};
|
||||
$path = sprintf('branding/watermarks/event-%s.%s', $event->id, $extension);
|
||||
Storage::disk('public')->put($path, $decoded);
|
||||
$assetPath = $path;
|
||||
|
||||
@@ -39,7 +39,9 @@ class TenantPackageController extends Controller
|
||||
|
||||
$activePackage = $tenant->activeResellerPackage?->load('package');
|
||||
|
||||
if ($activePackage instanceof TenantPackage) {
|
||||
if (! ($activePackage instanceof TenantPackage)) {
|
||||
$activePackage = $packages->firstWhere('active', true);
|
||||
} else {
|
||||
$this->hydratePackageSnapshot($activePackage, $usageEventPackage);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,8 @@ class EventStoreRequest extends FormRequest
|
||||
'settings.branding' => ['nullable', 'array'],
|
||||
'settings.branding.*' => ['nullable'],
|
||||
'settings.engagement_mode' => ['nullable', Rule::in(['tasks', 'photo_only'])],
|
||||
'settings.guest_downloads_enabled' => ['nullable', 'boolean'],
|
||||
'settings.guest_sharing_enabled' => ['nullable', 'boolean'],
|
||||
'settings.guest_upload_visibility' => ['nullable', Rule::in(['review', 'immediate'])],
|
||||
'settings.live_show' => ['nullable', 'array'],
|
||||
'settings.live_show.moderation_mode' => ['nullable', Rule::in(['off', 'manual', 'trusted_only'])],
|
||||
|
||||
@@ -8,6 +8,7 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Http\Resources\MissingValue;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\URL;
|
||||
|
||||
use function app;
|
||||
|
||||
@@ -18,6 +19,7 @@ class EventResource extends JsonResource
|
||||
$tenantId = $request->attributes->get('tenant_id');
|
||||
$showSensitive = $this->tenant_id === $tenantId;
|
||||
$settings = is_array($this->settings) ? $this->settings : [];
|
||||
$settings = $this->attachWatermarkAssetUrl($settings);
|
||||
$eventPackage = null;
|
||||
$memberPermissions = null;
|
||||
|
||||
@@ -97,6 +99,64 @@ class EventResource extends JsonResource
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $settings
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
protected function attachWatermarkAssetUrl(array $settings): array
|
||||
{
|
||||
$watermark = Arr::get($settings, 'watermark');
|
||||
$base = config('watermark.base', []);
|
||||
$base = is_array($base) ? $base : [];
|
||||
|
||||
if (! is_array($watermark)) {
|
||||
$watermark = [];
|
||||
}
|
||||
|
||||
$mode = $watermark['mode'] ?? null;
|
||||
if (! is_string($mode) || $mode === '') {
|
||||
$mode = 'base';
|
||||
$watermark['mode'] = $mode;
|
||||
}
|
||||
|
||||
if ($mode !== 'off') {
|
||||
foreach (['position', 'opacity', 'scale', 'padding', 'offset_x', 'offset_y'] as $key) {
|
||||
if (! array_key_exists($key, $watermark) && array_key_exists($key, $base)) {
|
||||
$watermark[$key] = $base[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$asset = $watermark['asset'] ?? null;
|
||||
if ((! is_string($asset) || $asset === '') && $mode !== 'off') {
|
||||
$asset = $base['asset'] ?? null;
|
||||
if (is_string($asset) && $asset !== '') {
|
||||
$watermark['asset'] = $asset;
|
||||
}
|
||||
}
|
||||
|
||||
if (! is_string($asset) || $asset === '') {
|
||||
$settings['watermark'] = $watermark;
|
||||
|
||||
return $settings;
|
||||
}
|
||||
|
||||
$normalized = ltrim($asset, '/');
|
||||
if (str_starts_with($normalized, 'storage/')) {
|
||||
$normalized = substr($normalized, strlen('storage/'));
|
||||
}
|
||||
|
||||
$watermark['asset_url'] = URL::temporarySignedRoute(
|
||||
'api.v1.branding.asset',
|
||||
now()->addSeconds(3600),
|
||||
['path' => $normalized]
|
||||
);
|
||||
|
||||
$settings['watermark'] = $watermark;
|
||||
|
||||
return $settings;
|
||||
}
|
||||
|
||||
protected function formatAddons(?\App\Models\EventPackage $eventPackage): array
|
||||
{
|
||||
if (! $eventPackage) {
|
||||
|
||||
Reference in New Issue
Block a user