Files
fotospiel-app/app/Support/TenantOnboardingState.php
Codex Agent 1a4bdb1fe1 tenant admin startseite schicker gestaltet und super-admin und tenant admin (filament) aufgesplittet.
Es gibt nun task collections und vordefinierte tasks für alle. Onboarding verfeinert und webseite-carousel gefixt (logging später entfernen!)
2025-10-14 15:17:52 +02:00

88 lines
2.4 KiB
PHP

<?php
namespace App\Support;
use App\Models\EventJoinToken;
use App\Models\TaskCollection;
use App\Models\Tenant;
use Filament\Facades\Filament;
use Illuminate\Support\Arr;
use Illuminate\Support\Carbon;
class TenantOnboardingState
{
public static function tenant(?Tenant $tenant = null): ?Tenant
{
if ($tenant) {
return $tenant;
}
/** @var Tenant|null $tenant */
$tenant = Filament::getTenant();
return $tenant;
}
public static function status(?Tenant $tenant = null): array
{
$tenant = self::tenant($tenant);
if (! $tenant) {
return [
'packages' => false,
'event' => false,
'palette' => false,
'invite' => false,
];
}
$hasCustomCollections = TaskCollection::query()
->where('tenant_id', $tenant->id)
->exists();
$hasEvent = $tenant->events()->exists();
$palette = Arr::get($tenant->settings ?? [], 'branding.palette');
$hasInvite = EventJoinToken::query()
->whereHas('event', fn ($query) => $query->where('tenant_id', $tenant->id))
->exists();
return [
'packages' => $hasCustomCollections,
'event' => $hasEvent,
'palette' => filled($palette),
'invite' => $hasInvite,
];
}
public static function completed(?Tenant $tenant = null): bool
{
$status = self::status($tenant);
return collect($status)->every(fn ($done) => $done === true)
|| Arr::has(self::tenant($tenant)?->settings ?? [], 'onboarding.completed_at');
}
public static function markCompleted(Tenant $tenant, array $data = []): void
{
$settings = $tenant->settings ?? [];
Arr::set($settings, 'onboarding.completed_at', Carbon::now()->toIso8601String());
if (Arr::has($data, 'primary_event_id')) {
Arr::set($settings, 'onboarding.primary_event_id', Arr::get($data, 'primary_event_id'));
}
if (Arr::has($data, 'selected_packages')) {
Arr::set($settings, 'onboarding.selected_packages', Arr::get($data, 'selected_packages'));
}
if (Arr::has($data, 'qr_layout')) {
Arr::set($settings, 'onboarding.qr_layout', Arr::get($data, 'qr_layout'));
}
$tenant->forceFill(['settings' => $settings])->save();
}
}