feat: event registration branding with vertical wizard layout
- Add registration_banner_url, registration_welcome_text, registration_logo_url columns to events table with migration - Add uploadImage endpoint (POST .../upload-image) with form request validation for banner and logo images (jpg/png/webp, max 5MB) - Include branding fields in EventResource and PublicRegistrationDataController - Build registration settings UI in organizer event settings page with banner/logo upload and welcome text editor - Redesign portal registration page: hero banner with gradient overlay, welcome text card, vertical step navigation (desktop) / horizontal chips (mobile), two-column form fields with density="comfortable" - Update success page with event banner and consistent branding - Seed welcome text for Echt Feesten 2026 - Add 9 PHPUnit tests covering image upload, branding fields in API responses Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@ namespace App\Http\Controllers\Api\V1;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Api\V1\StoreEventRequest;
|
||||
use App\Http\Requests\Api\V1\UpdateEventRequest;
|
||||
use App\Http\Requests\Api\V1\UploadEventImageRequest;
|
||||
use App\Http\Resources\Api\V1\EventResource;
|
||||
use App\Models\Event;
|
||||
use App\Models\Organisation;
|
||||
@@ -15,6 +16,7 @@ use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
final class EventController extends Controller
|
||||
{
|
||||
@@ -126,6 +128,24 @@ final class EventController extends Controller
|
||||
return EventResource::collection($children);
|
||||
}
|
||||
|
||||
public function uploadImage(UploadEventImageRequest $request, Organisation $organisation, Event $event): JsonResponse
|
||||
{
|
||||
Gate::authorize('update', [$event, $organisation]);
|
||||
|
||||
$path = $request->file('image')->store(
|
||||
"events/{$event->id}",
|
||||
'public'
|
||||
);
|
||||
|
||||
$field = $request->type === 'banner'
|
||||
? 'registration_banner_url'
|
||||
: 'registration_logo_url';
|
||||
|
||||
$event->update([$field => Storage::disk('public')->url($path)]);
|
||||
|
||||
return response()->json(['url' => $event->fresh()->{$field}]);
|
||||
}
|
||||
|
||||
public function stats(Event $event): JsonResponse
|
||||
{
|
||||
Gate::authorize('view', $event);
|
||||
|
||||
Reference in New Issue
Block a user