die eventphotospage funktioniert nun zuverlässig
This commit is contained in:
@@ -60,19 +60,44 @@ class PhotoController extends Controller
|
||||
: null;
|
||||
|
||||
$query = Photo::where('event_id', $event->id)
|
||||
->with('event')->withCount('likes')
|
||||
->orderBy('created_at', 'desc');
|
||||
->with('event')->withCount('likes');
|
||||
|
||||
// Filters
|
||||
if ($request->has('status')) {
|
||||
$query->where('status', $request->status);
|
||||
}
|
||||
|
||||
if ($request->boolean('featured')) {
|
||||
$query->where('is_featured', true);
|
||||
}
|
||||
|
||||
if ($request->has('user_id')) {
|
||||
$query->where('uploader_id', $request->user_id);
|
||||
}
|
||||
|
||||
$perPage = $request->get('per_page', 20);
|
||||
if ($request->filled('ingest_source')) {
|
||||
$query->where('ingest_source', $request->string('ingest_source'));
|
||||
}
|
||||
|
||||
$visibility = strtolower((string) $request->input('visibility', ''));
|
||||
if ($visibility === 'visible') {
|
||||
$query->where('status', '!=', 'hidden');
|
||||
} elseif ($visibility === 'hidden') {
|
||||
$query->where('status', 'hidden');
|
||||
}
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$term = strtolower(trim((string) $request->get('search')));
|
||||
$query->where(function ($inner) use ($term) {
|
||||
$inner->whereRaw('LOWER(original_name) LIKE ?', ['%'.$term.'%'])
|
||||
->orWhereRaw('LOWER(filename) LIKE ?', ['%'.$term.'%']);
|
||||
});
|
||||
}
|
||||
|
||||
$direction = strtolower($request->get('sort', 'desc')) === 'asc' ? 'asc' : 'desc';
|
||||
$query->orderBy('created_at', $direction);
|
||||
|
||||
$perPage = max(1, min((int) $request->get('per_page', 40), 100));
|
||||
$photos = $query->paginate($perPage);
|
||||
|
||||
return PhotoResource::collection($photos)->additional([
|
||||
@@ -80,6 +105,37 @@ class PhotoController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function visibility(Request $request, string $eventSlug, Photo $photo): JsonResponse
|
||||
{
|
||||
$tenantId = $request->attributes->get('tenant_id');
|
||||
$event = Event::where('slug', $eventSlug)
|
||||
->where('tenant_id', $tenantId)
|
||||
->firstOrFail();
|
||||
|
||||
if ($photo->event_id !== $event->id) {
|
||||
return ApiError::response(
|
||||
'photo_not_found',
|
||||
'Foto nicht gefunden',
|
||||
'Das Foto gehört nicht zu diesem Event.',
|
||||
Response::HTTP_NOT_FOUND,
|
||||
['photo_id' => $photo->id]
|
||||
);
|
||||
}
|
||||
|
||||
$validated = $request->validate([
|
||||
'visible' => ['required', 'boolean'],
|
||||
]);
|
||||
|
||||
$photo->status = $validated['visible'] ? 'approved' : 'hidden';
|
||||
$photo->save();
|
||||
$photo->load('event')->loadCount('likes');
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Photo visibility updated',
|
||||
'data' => new PhotoResource($photo),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly uploaded photo.
|
||||
*/
|
||||
@@ -397,6 +453,9 @@ class PhotoController extends Controller
|
||||
$assets = EventMediaAsset::where('photo_id', $photo->id)->get();
|
||||
|
||||
foreach ($assets as $asset) {
|
||||
if (! is_string($asset->path) || $asset->path === '') {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Storage::disk($asset->disk)->delete($asset->path);
|
||||
} catch (\Throwable $e) {
|
||||
@@ -412,7 +471,13 @@ class PhotoController extends Controller
|
||||
// Ensure legacy paths are removed if assets missing
|
||||
if ($assets->isEmpty()) {
|
||||
$fallbackDisk = $this->eventStorageManager->getHotDiskForEvent($event);
|
||||
Storage::disk($fallbackDisk)->delete([$photo->path, $photo->thumbnail_path]);
|
||||
$paths = array_values(array_filter([
|
||||
is_string($photo->path) ? $photo->path : null,
|
||||
is_string($photo->thumbnail_path) ? $photo->thumbnail_path : null,
|
||||
]));
|
||||
if (! empty($paths)) {
|
||||
Storage::disk($fallbackDisk)->delete($paths);
|
||||
}
|
||||
}
|
||||
|
||||
$eventPackage = $event->eventPackage;
|
||||
|
||||
Reference in New Issue
Block a user