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>
127 lines
3.4 KiB
PHP
127 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
use App\Models\Room;
|
|
|
|
class EventsSourceLink
|
|
{
|
|
public static function isLinked(Room $room): bool
|
|
{
|
|
$source = (array) ($room->source ?? []);
|
|
|
|
return ($source['app'] ?? '') === 'events' && (int) ($source['event_id'] ?? 0) > 0;
|
|
}
|
|
|
|
public static function eventId(Room $room): ?int
|
|
{
|
|
if (! self::isLinked($room)) {
|
|
return null;
|
|
}
|
|
|
|
return (int) ((array) ($room->source ?? []))['event_id'];
|
|
}
|
|
|
|
public static function baseUrl(): string
|
|
{
|
|
return rtrim((string) config('meet.events_app_url', 'https://events.ladill.com'), '/');
|
|
}
|
|
|
|
public static function isApiConfigured(): bool
|
|
{
|
|
return filled(config('meet.events_api_url')) && filled(config('meet.events_api_key'));
|
|
}
|
|
|
|
public static function createEventUrl(?Room $room = null): string
|
|
{
|
|
return self::baseUrl().'/events/create';
|
|
}
|
|
|
|
public static function eventAdminUrl(Room $room): ?string
|
|
{
|
|
$eventId = self::eventId($room);
|
|
|
|
return $eventId ? self::baseUrl().'/events/'.$eventId.'/attendees' : null;
|
|
}
|
|
|
|
public static function eventEditUrl(Room $room): ?string
|
|
{
|
|
$eventId = self::eventId($room);
|
|
|
|
return $eventId ? self::baseUrl().'/events/'.$eventId : null;
|
|
}
|
|
|
|
public static function meetReturnUrl(Room $room): string
|
|
{
|
|
return route('meet.join', $room, absolute: true);
|
|
}
|
|
|
|
public static function eventRegistrationUrl(Room $room, ?string $meetReturn = null): ?string
|
|
{
|
|
$source = (array) ($room->source ?? []);
|
|
$stored = trim((string) ($source['registration_url'] ?? ''));
|
|
|
|
$url = $stored !== ''
|
|
? $stored
|
|
: (($eventId = self::eventId($room))
|
|
? self::baseUrl().'/q/'.($source['short_code'] ?? '')
|
|
: null);
|
|
|
|
if ($url === null) {
|
|
return null;
|
|
}
|
|
|
|
$meetReturn = trim((string) ($meetReturn ?? ''));
|
|
if ($meetReturn === '') {
|
|
return $url;
|
|
}
|
|
|
|
return $url.(str_contains($url, '?') ? '&' : '?').'meet_return='.urlencode($meetReturn);
|
|
}
|
|
|
|
public static function eventQrUrl(Room $room): ?string
|
|
{
|
|
$eventId = self::eventId($room);
|
|
|
|
return $eventId ? self::baseUrl().'/events/'.$eventId.'/download/png' : null;
|
|
}
|
|
|
|
public static function eventCommsUrl(Room $room): ?string
|
|
{
|
|
$eventId = self::eventId($room);
|
|
|
|
return $eventId ? self::baseUrl().'/events/'.$eventId.'/attendees#comms' : null;
|
|
}
|
|
|
|
public static function eventBadgesUrl(Room $room): ?string
|
|
{
|
|
$eventId = self::eventId($room);
|
|
|
|
return $eventId ? self::baseUrl().'/events/'.$eventId.'/badges' : null;
|
|
}
|
|
|
|
/** @return array<string, string|null> */
|
|
public static function urls(Room $room): array
|
|
{
|
|
return [
|
|
'admin' => self::eventAdminUrl($room),
|
|
'edit' => self::eventEditUrl($room),
|
|
'registration' => self::eventRegistrationUrl($room),
|
|
'qr' => self::eventQrUrl($room),
|
|
'comms' => self::eventCommsUrl($room),
|
|
'badges' => self::eventBadgesUrl($room),
|
|
];
|
|
}
|
|
|
|
public static function eventTitle(Room $room): ?string
|
|
{
|
|
if (! self::isLinked($room)) {
|
|
return null;
|
|
}
|
|
|
|
$title = trim((string) (((array) ($room->source ?? []))['event_title'] ?? ''));
|
|
|
|
return $title !== '' ? $title : null;
|
|
}
|
|
}
|