-
app/Enums/UserType.php
Open in GitHubuse App\Enums\Traits\HasOptions; use App\Exceptions\UnknownPersonaException; use App\Models\Tenant; use Illuminate\Support\Collection; enum UserType: string { use HasOptions; case staff = 'staff'; case guardian = 'guardian'; case student = 'student'; public function label(): string { return match ($this) { self::staff => __('Staff'), self::guardian => __('Contact'), self::student => __('Student'), }; } public static function fromData(Collection $data): UserType { if ($persona = $data->get('persona', $data->get('usertype'))) { return match ($persona) { 'student' => self::student, 'staff', 'teacher' => self::staff, 'guardian', 'parent' => self::guardian, }; } throw new UnknownPersonaException("Unknown persona type from data: {$data->toJson()}"); } public function getSisKeyFromData(Collection $data): string { $tenant = Tenant::current(); $id = $data->get('usersDCID') ?? $data->get('ps_dcid') ?? $data->get('dcid'); return "{$tenant->id}|{$this->value}|{$id}"; } public function getSisKeyFromSisId(string|int $sisId): string { $tenant = Tenant::current(); return "{$tenant->id}|{$this->value}|{$sisId}"; } }
-
app/Models/User.php
Open in GitHubuse App\Enums\UserType; class User extends Authenticatable implements ExistsInSis { // ... protected $casts = [ 'user_type' => UserType::class, 'is_24h' => 'boolean', 'can_book' => 'boolean', 'notification_config' => 'collection', ]; // ... }
-
app/Enums/Traits/HasOptions.php
Open in GitHubuse Illuminate\Support\Collection; trait HasOptions { public static function options(): array { return array_reduce( static::cases(), function (array $carry, $sis) { $carry[$sis->value] = $sis->label(); return $carry; }, [] ); } public static function collect(): Collection { return collect(static::cases()); } public static function selectOptions(): array { return array_map(fn ($sis) => [ 'label' => $sis->label(), 'value' => $sis->value, ], static::cases()); } public function label(): string { return 'Default label'; } }
-
app/Models/User.php
Open in GitHubclass User extends Authenticatable implements ExistsInSis { // ... public function filters(): array { return [ TextFilter::make('search', __('Search')) ->hide() ->using(fn (Builder $builder, string $search) => $builder->search($search)), TextFilter::make('first_name', __('First name')), TextFilter::make('last_name', __('Last name')), MultipleSelectFilter::make('user_type', __('User type')) ->options(UserType::options()), MultipleSelectFilter::make('teacher', __('Teachers')) ->hide() ->using(fn (Builder $builder) => $builder ->whereHas('sections') ->orWhereHas('altSections')), ]; } // ... }