Add kiosk join/leave pages, waiting room, and meeting feedback.
Deploy Ladill Meet / deploy (push) Successful in 47s

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>
This commit is contained in:
isaacclad
2026-07-01 13:33:48 +00:00
co-authored by Cursor
parent 5e34d71de0
commit 7ae26a467c
26 changed files with 865 additions and 124 deletions
@@ -0,0 +1,80 @@
<?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,
]);
}
}