Improve conferences, guest entry, Afia, and cross-app scheduling.
Deploy Ladill Meet / deploy (push) Successful in 50s
Deploy Ladill Meet / deploy (push) Successful in 50s
Route guests through silent SSO to the Meet product page, fix Afia context query, add conference green-room UX and copy, and extend service API for Care/CRM/Invoice calendar integration. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Meet;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Participant;
|
||||
use App\Models\Recording;
|
||||
use App\Models\Room;
|
||||
use App\Models\Session;
|
||||
use App\Services\Meet\ChatService;
|
||||
use App\Services\Meet\Media\MediaProviderInterface;
|
||||
@@ -37,8 +38,11 @@ class MeetingRoomController extends Controller
|
||||
return redirect()->route('meet.ended', $session);
|
||||
}
|
||||
|
||||
$room = $session->room;
|
||||
$kind = $room->isConference() ? 'conference' : 'meeting';
|
||||
|
||||
$participantUuid = $request->session()->get("meet.participant.{$session->uuid}");
|
||||
abort_unless($participantUuid, 403, 'Please join the meeting first.');
|
||||
abort_unless($participantUuid, 403, "Please join the {$kind} first.");
|
||||
|
||||
$participant = Participant::where('uuid', $participantUuid)
|
||||
->where('session_id', $session->id)
|
||||
@@ -48,7 +52,7 @@ class MeetingRoomController extends Controller
|
||||
return redirect()->route('meet.join.waiting', $session->room);
|
||||
}
|
||||
|
||||
abort_unless($participant->status === 'joined', 403, 'You are not in this meeting.');
|
||||
abort_unless($participant->status === 'joined', 403, "You are not in this {$kind}.");
|
||||
|
||||
$token = $this->media->isConfigured()
|
||||
? $this->sessions->generateMediaToken($participant)
|
||||
@@ -72,6 +76,10 @@ class MeetingRoomController extends Controller
|
||||
'activeRecording' => $session->recordings()->where('status', 'recording')->first(),
|
||||
'watermark' => $room->organization?->securitySetting('watermark_enabled', false),
|
||||
'isWebinar' => $room->isWebinar() || $room->isConference() || $room->isSpace(),
|
||||
'isConference' => $room->isConference(),
|
||||
'isGreenRoom' => $session->session_mode === 'green_room',
|
||||
'sessionMode' => $session->session_mode,
|
||||
'presenterRefs' => (array) $session->presenter_refs,
|
||||
'isAudioOnly' => $isAudioOnly,
|
||||
'isSpace' => $room->isSpace(),
|
||||
'canPublish' => $room->isSpace()
|
||||
@@ -91,10 +99,43 @@ class MeetingRoomController extends Controller
|
||||
$this->sessions->end($session, $participant->user_ref ?? $participant->uuid);
|
||||
|
||||
$room = $session->room;
|
||||
$route = $room->isWebinar() ? 'meet.webinars.show' : 'meet.rooms.show';
|
||||
|
||||
return redirect()->route($route, $room)
|
||||
->with('success', $room->isWebinar() ? 'Webinar ended.' : 'Meeting ended.');
|
||||
return redirect()->route($this->roomShowRoute($room), $room)
|
||||
->with('success', $this->roomEndedMessage($room));
|
||||
}
|
||||
|
||||
protected function roomShowRoute(Room $room): string
|
||||
{
|
||||
if ($room->isWebinar()) {
|
||||
return 'meet.webinars.show';
|
||||
}
|
||||
|
||||
if ($room->isConference()) {
|
||||
return 'meet.conferences.show';
|
||||
}
|
||||
|
||||
if ($room->isSpace()) {
|
||||
return 'meet.spaces.show';
|
||||
}
|
||||
|
||||
return 'meet.rooms.show';
|
||||
}
|
||||
|
||||
protected function roomEndedMessage(Room $room): string
|
||||
{
|
||||
if ($room->isWebinar()) {
|
||||
return 'Webinar ended.';
|
||||
}
|
||||
|
||||
if ($room->isConference()) {
|
||||
return 'Conference ended.';
|
||||
}
|
||||
|
||||
if ($room->isSpace()) {
|
||||
return 'Room closed.';
|
||||
}
|
||||
|
||||
return 'Meeting ended.';
|
||||
}
|
||||
|
||||
public function leave(Request $request, Session $session): RedirectResponse
|
||||
|
||||
Reference in New Issue
Block a user