Let invited speakers bypass Events registration and join as panelists.
Deploy Ladill Meet / deploy (push) Successful in 1m30s
Deploy Ladill Meet / deploy (push) Successful in 1m30s
Verify speaker tokens from Events on join, grant panelist role for linked webinars, and point bulk comms links to the attendees page instead of the JSON preview API. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -88,6 +88,17 @@ class JoinController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
$speakerToken = trim((string) $request->query('speaker', ''));
|
||||
if ($speakerToken !== '' && $this->requiresEventsRegistration($room, $request)) {
|
||||
if ($this->verifyAndStoreSpeaker($request, $room, $speakerToken)) {
|
||||
return redirect()->route('meet.join', $room);
|
||||
}
|
||||
|
||||
return $this->gateView($request, $room)->withErrors([
|
||||
'speaker' => 'Speaker invitation link is invalid or expired.',
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->requiresEventsRegistration($room, $request)) {
|
||||
return $this->gateView($request, $room);
|
||||
}
|
||||
@@ -200,7 +211,9 @@ class JoinController extends Controller
|
||||
} elseif ($room->isConference() && $role !== 'host') {
|
||||
$role = $this->conferences->resolveJoinRole($room, $user, $email, $role);
|
||||
} elseif ($room->isWebinar() && $role !== 'host') {
|
||||
if ($room->isEventsLinked()) {
|
||||
if (EventsRegistrationSession::isSpeakerVerified($request, $room)) {
|
||||
$role = 'panelist';
|
||||
} elseif ($room->isEventsLinked()) {
|
||||
$role = 'attendee';
|
||||
} else {
|
||||
return back()->withErrors([
|
||||
@@ -337,7 +350,28 @@ class JoinController extends Controller
|
||||
return false;
|
||||
}
|
||||
|
||||
return ! EventsRegistrationSession::isVerified($request, $room);
|
||||
return ! EventsRegistrationSession::canJoinEventsLinked($request, $room);
|
||||
}
|
||||
|
||||
protected function verifyAndStoreSpeaker(Request $request, Room $room, string $speakerToken): bool
|
||||
{
|
||||
$eventId = EventsSourceLink::eventId($room);
|
||||
if (! $eventId || ! $this->events->isConfigured()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$speaker = $this->events->verifySpeakerInvite($eventId, $room->owner_ref, $speakerToken);
|
||||
if (! $speaker) {
|
||||
return false;
|
||||
}
|
||||
|
||||
EventsRegistrationSession::store($request, $room, [
|
||||
'email' => $speaker['email'] ?? null,
|
||||
'name' => $speaker['name'] ?? null,
|
||||
'speaker_token' => $speakerToken,
|
||||
]);
|
||||
|
||||
return EventsRegistrationSession::isSpeakerVerified($request, $room);
|
||||
}
|
||||
|
||||
protected function verifyAndStoreBadge(Request $request, Room $room, string $badgeCode): bool
|
||||
|
||||
Reference in New Issue
Block a user