Files
ladill-meet/app/Http/Controllers/Meet/LeaveController.php
T
isaaccladandCursor 7ae26a467c
Deploy Ladill Meet / deploy (push) Successful in 47s
Add kiosk join/leave pages, waiting room, and meeting feedback.
Redesign public join flows on the Frontdesk kiosk template, enforce host
admission when waiting room is enabled, and collect star ratings after leave.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 13:33:48 +00:00

81 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Meet;
use App\Http\Controllers\Controller;
use App\Models\Participant;
use App\Models\Room;
use App\Models\Session;
use App\Models\SessionFeedback;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class LeaveController extends Controller
{
public function show(Request $request, Session $session): View|RedirectResponse
{
$session->loadMissing('room.organization');
abort_unless($session->room, 404);
$feedback = (array) $request->session()->get('meet.left.feedback', []);
if (($feedback['session_uuid'] ?? null) !== $session->uuid) {
return redirect()->route('meet.join', $session->room);
}
return view('meet.left.show', [
'session' => $session,
'room' => $session->room,
'organization' => $session->room->organization,
'feedback' => $feedback,
]);
}
public function store(Request $request, Session $session): RedirectResponse
{
$feedback = (array) $request->session()->get('meet.left.feedback', []);
abort_unless(($feedback['session_uuid'] ?? null) === $session->uuid, 403);
$validated = $request->validate([
'rating' => ['required', 'integer', 'min:1', 'max:5'],
'audio_rating' => ['nullable', 'integer', 'min:1', 'max:5'],
'video_rating' => ['nullable', 'integer', 'min:1', 'max:5'],
'comment' => ['nullable', 'string', 'max:1000'],
]);
SessionFeedback::updateOrCreate(
[
'session_id' => $session->id,
'participant_uuid' => $feedback['participant_uuid'] ?? null,
],
[
'display_name' => $feedback['display_name'] ?? null,
'user_ref' => $feedback['user_ref'] ?? null,
'rating' => $validated['rating'],
'audio_rating' => $validated['audio_rating'] ?? null,
'video_rating' => $validated['video_rating'] ?? null,
'comment' => $validated['comment'] ?? null,
],
);
$request->session()->forget('meet.left.feedback');
return redirect()
->route('meet.left.thanks', $session)
->with('rated', true);
}
public function thanks(Request $request, Session $session): View
{
$session->loadMissing('room.organization');
return view('meet.left.thanks', [
'session' => $session,
'room' => $session->room,
'organization' => $session->room->organization,
]);
}
}