Add control room automations and uploader overrides
This commit is contained in:
@@ -2921,6 +2921,12 @@ class EventPublicController extends BaseController
|
||||
$policy = $this->guestPolicy();
|
||||
$uploadVisibility = Arr::get($eventModel->settings ?? [], 'guest_upload_visibility', $policy->guest_upload_visibility);
|
||||
$autoApproveUploads = $uploadVisibility === 'immediate';
|
||||
$controlRoom = Arr::get($eventModel->settings ?? [], 'control_room', []);
|
||||
$controlRoom = is_array($controlRoom) ? $controlRoom : [];
|
||||
$autoAddApprovedToLiveSetting = (bool) Arr::get($controlRoom, 'auto_add_approved_to_live', false);
|
||||
$trustedUploaders = Arr::get($controlRoom, 'trusted_uploaders', []);
|
||||
$forceReviewUploaders = Arr::get($controlRoom, 'force_review_uploaders', []);
|
||||
$autoAddApprovedToLiveDefault = $autoAddApprovedToLiveSetting || $autoApproveUploads;
|
||||
|
||||
$tenantModel = $eventModel->tenant;
|
||||
|
||||
@@ -2953,6 +2959,34 @@ class EventPublicController extends BaseController
|
||||
->resolveEventPackageForPhotoUpload($tenantModel, $eventId, $eventModel);
|
||||
|
||||
$deviceId = $this->resolveDeviceIdentifier($request);
|
||||
$deviceHasRule = static function (array $entries, string $deviceId): bool {
|
||||
foreach ($entries as $entry) {
|
||||
if (! is_array($entry)) {
|
||||
continue;
|
||||
}
|
||||
$candidate = $entry['device_id'] ?? null;
|
||||
if (is_string($candidate) && $candidate === $deviceId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
$deviceHasRules = $deviceId !== 'anonymous';
|
||||
$isForceReviewUploader = $deviceHasRules && is_array($forceReviewUploaders)
|
||||
? $deviceHasRule($forceReviewUploaders, $deviceId)
|
||||
: false;
|
||||
$isTrustedUploader = $deviceHasRules && is_array($trustedUploaders)
|
||||
? $deviceHasRule($trustedUploaders, $deviceId)
|
||||
: false;
|
||||
|
||||
if ($isForceReviewUploader) {
|
||||
$autoApproveUploads = false;
|
||||
} elseif ($isTrustedUploader) {
|
||||
$autoApproveUploads = true;
|
||||
}
|
||||
|
||||
$autoAddApprovedToLive = $autoAddApprovedToLiveDefault && $autoApproveUploads;
|
||||
|
||||
$deviceLimit = max(0, (int) ($policy->per_device_upload_limit ?? 50));
|
||||
$deviceCount = DB::table('photos')->where('event_id', $eventId)->where('guest_name', $deviceId)->count();
|
||||
@@ -3037,10 +3071,21 @@ class EventPublicController extends BaseController
|
||||
$liveApprovedAt = null;
|
||||
$liveReviewedAt = null;
|
||||
$liveStatus = PhotoLiveStatus::NONE->value;
|
||||
$securityMeta = $isForceReviewUploader
|
||||
? [
|
||||
'manual_review' => true,
|
||||
'manual_review_reason' => 'force_review_device',
|
||||
]
|
||||
: null;
|
||||
$securityMetaValue = $securityMeta ? json_encode($securityMeta) : null;
|
||||
|
||||
if ($liveOptIn) {
|
||||
if ($liveOptIn || $autoAddApprovedToLive) {
|
||||
$liveSubmittedAt = now();
|
||||
if ($liveModerationMode === 'off') {
|
||||
if ($autoAddApprovedToLive) {
|
||||
$liveStatus = PhotoLiveStatus::APPROVED->value;
|
||||
$liveApprovedAt = $liveSubmittedAt;
|
||||
$liveReviewedAt = $liveSubmittedAt;
|
||||
} elseif ($liveModerationMode === 'off') {
|
||||
$liveStatus = PhotoLiveStatus::APPROVED->value;
|
||||
$liveApprovedAt = $liveSubmittedAt;
|
||||
$liveReviewedAt = $liveSubmittedAt;
|
||||
@@ -3048,6 +3093,12 @@ class EventPublicController extends BaseController
|
||||
$liveStatus = PhotoLiveStatus::PENDING->value;
|
||||
}
|
||||
}
|
||||
if ($isForceReviewUploader) {
|
||||
$liveStatus = PhotoLiveStatus::REJECTED->value;
|
||||
$liveSubmittedAt = null;
|
||||
$liveApprovedAt = null;
|
||||
$liveReviewedAt = now();
|
||||
}
|
||||
|
||||
$photoId = DB::table('photos')->insertGetId([
|
||||
'event_id' => $eventId,
|
||||
@@ -3071,6 +3122,7 @@ class EventPublicController extends BaseController
|
||||
'emotion_id' => $this->resolveEmotionId($validated, $eventId),
|
||||
'is_featured' => 0,
|
||||
'metadata' => null,
|
||||
'security_meta' => $securityMetaValue,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
|
||||
@@ -20,6 +20,7 @@ use App\Support\WatermarkConfigResolver;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
@@ -131,6 +132,11 @@ class PhotoController extends Controller
|
||||
|
||||
$photo->status = $validated['visible'] ? 'approved' : 'hidden';
|
||||
$photo->save();
|
||||
|
||||
$autoRemoveLiveOnHide = (bool) Arr::get($event->settings ?? [], 'control_room.auto_remove_live_on_hide', false);
|
||||
if ($autoRemoveLiveOnHide && ! $validated['visible']) {
|
||||
$photo->rejectForLiveShow($request->user(), 'hidden');
|
||||
}
|
||||
$photo->load('event')->loadCount('likes');
|
||||
|
||||
return response()->json([
|
||||
@@ -531,6 +537,11 @@ class PhotoController extends Controller
|
||||
|
||||
$photo->update($validated);
|
||||
|
||||
$autoRemoveLiveOnHide = (bool) Arr::get($event->settings ?? [], 'control_room.auto_remove_live_on_hide', false);
|
||||
if ($autoRemoveLiveOnHide && ($validated['status'] ?? null) === 'rejected') {
|
||||
$photo->rejectForLiveShow($request->user());
|
||||
}
|
||||
|
||||
if ($validated['status'] ?? null === 'approved') {
|
||||
$photo->load('event')->loadCount('likes');
|
||||
// Trigger event for new photo notification
|
||||
|
||||
Reference in New Issue
Block a user