Adjust watermark permissions and transparency
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Support;
|
||||
|
||||
use App\Models\Event;
|
||||
use App\Models\Package;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class WatermarkConfigResolver
|
||||
@@ -29,7 +30,21 @@ class WatermarkConfigResolver
|
||||
{
|
||||
$event->loadMissing('eventPackage.package');
|
||||
|
||||
return $event->eventPackage?->package?->watermark_allowed === false ? 'none' : 'basic';
|
||||
return self::determineRemovalAllowed($event) ? 'none' : 'basic';
|
||||
}
|
||||
|
||||
public static function determineRemovalAllowed(Event $event): bool
|
||||
{
|
||||
$event->loadMissing('eventPackage.package', 'eventPackages.package');
|
||||
|
||||
$package = $event->eventPackage?->package;
|
||||
|
||||
if (! $package && $event->relationLoaded('eventPackages')) {
|
||||
$package = $event->eventPackages->first()?->package;
|
||||
}
|
||||
|
||||
return self::packageHasFeature($package, 'no_watermark')
|
||||
|| self::packageHasFeature($package, 'watermark_removal');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,13 +54,6 @@ class WatermarkConfigResolver
|
||||
{
|
||||
$policy = self::determinePolicy($event);
|
||||
|
||||
if ($policy === 'none') {
|
||||
return [
|
||||
'type' => 'none',
|
||||
'policy' => $policy,
|
||||
];
|
||||
}
|
||||
|
||||
$baseSetting = null;
|
||||
|
||||
if (class_exists(\App\Models\WatermarkSetting::class) && \Illuminate\Support\Facades\Schema::hasTable('watermark_settings')) {
|
||||
@@ -65,8 +73,15 @@ class WatermarkConfigResolver
|
||||
'offset_y' => $baseSetting?->offset_y ?? config('watermark.base.offset_y', 0),
|
||||
];
|
||||
|
||||
$event->loadMissing('eventPackage.package', 'tenant');
|
||||
$event->loadMissing('eventPackage.package', 'eventPackages.package', 'tenant');
|
||||
$package = $event->eventPackage?->package;
|
||||
|
||||
if (! $package && $event->relationLoaded('eventPackages')) {
|
||||
$package = $event->eventPackages->first()?->package;
|
||||
}
|
||||
$brandingAllowed = self::determineBrandingAllowed($event);
|
||||
$watermarkAllowed = $package?->watermark_allowed !== false;
|
||||
$removalAllowed = self::determineRemovalAllowed($event);
|
||||
$eventWatermark = Arr::get($event->settings, 'watermark', []);
|
||||
$tenantWatermark = Arr::get($event->tenant?->settings, 'watermark', []);
|
||||
$serveOriginals = (bool) Arr::get($event->settings, 'watermark_serve_originals', false);
|
||||
@@ -75,7 +90,11 @@ class WatermarkConfigResolver
|
||||
? ($eventWatermark['mode'] ?? $tenantWatermark['mode'] ?? 'base')
|
||||
: 'base';
|
||||
|
||||
if ($mode === 'off' && $policy === 'basic') {
|
||||
if ($mode === 'custom' && (! $brandingAllowed || ! $watermarkAllowed)) {
|
||||
$mode = 'base';
|
||||
}
|
||||
|
||||
if ($mode === 'off' && ! $removalAllowed) {
|
||||
$mode = 'base';
|
||||
}
|
||||
|
||||
@@ -111,4 +130,30 @@ class WatermarkConfigResolver
|
||||
'serve_originals' => $serveOriginals,
|
||||
];
|
||||
}
|
||||
|
||||
private static function packageHasFeature(?Package $package, string $feature): bool
|
||||
{
|
||||
if (! $package) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$features = $package->features ?? [];
|
||||
|
||||
if (is_string($features)) {
|
||||
$decoded = json_decode($features, true);
|
||||
if (json_last_error() === JSON_ERROR_NONE) {
|
||||
$features = $decoded;
|
||||
}
|
||||
}
|
||||
|
||||
if (! is_array($features)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (array_is_list($features)) {
|
||||
return in_array($feature, $features, true);
|
||||
}
|
||||
|
||||
return isset($features[$feature]) && (bool) $features[$feature];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user