Files
fotospiel-app/app/Http/Resources/Tenant/EventJoinTokenResource.php
Codex Agent 6290a3a448 Fix tenant event form package selector so it no longer renders empty-value options, handles loading/empty
states, and pulls data from the authenticated /api/v1/tenant/packages endpoint.
    (resources/js/admin/pages/EventFormPage.tsx, resources/js/admin/api.ts)
  - Harden tenant-admin auth flow: prevent PKCE state loss, scope out StrictMode double-processing, add SPA
    routes for /event-admin/login and /event-admin/logout, and tighten token/session clearing semantics (resources/js/admin/auth/{context,tokens}.tsx, resources/js/admin/pages/{AuthCallbackPage,LogoutPage}.tsx,
    resources/js/admin/router.tsx, routes/web.php)
2025-10-19 23:00:47 +02:00

59 lines
2.0 KiB
PHP

<?php
namespace App\Http\Resources\Tenant;
use App\Models\Event;
use App\Support\JoinTokenLayoutRegistry;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class EventJoinTokenResource extends JsonResource
{
/**
* @param Request $request
*/
public function toArray($request): array
{
/** @var Event|null $eventFromRoute */
$eventFromRoute = $request->route('event');
$eventContext = $eventFromRoute instanceof Event ? $eventFromRoute : ($this->resource->event ?? null);
$layouts = $eventContext
? JoinTokenLayoutRegistry::toResponse(function (string $layoutId, string $format) use ($eventContext) {
return route('tenant.events.join-tokens.layouts.download', [
'event' => $eventContext,
'joinToken' => $this->resource,
'layout' => $layoutId,
'format' => $format,
]);
})
: [];
$layoutsUrl = $eventContext
? route('tenant.events.join-tokens.layouts.index', [
'event' => $eventContext,
'joinToken' => $this->resource,
])
: null;
$plainToken = $this->resource->plain_token ?? $this->token;
return [
'id' => $this->id,
'label' => $this->label,
'token' => $plainToken,
'token_preview' => $this->token_preview,
'url' => $plainToken ? url('/e/'.$plainToken) : null,
'usage_limit' => $this->usage_limit,
'usage_count' => $this->usage_count,
'expires_at' => optional($this->expires_at)->toIso8601String(),
'revoked_at' => optional($this->revoked_at)->toIso8601String(),
'is_active' => $this->isActive(),
'created_at' => optional($this->created_at)->toIso8601String(),
'metadata' => $this->metadata ?? new \stdClass(),
'layouts_url' => $layoutsUrl,
'layouts' => $layouts,
];
}
}