*/ public static function values(): array { return array_map(fn (self $case): string => $case->value, self::cases()); } /** * Default subject_type for each purpose per ARCH ยง3.1. * null = subject may be null (public or ambiguous). */ public function defaultSubjectType(): ?string { return match ($this) { self::EVENT_REGISTRATION, self::POST_EVENT_EVALUATION, self::SIGNATURE_RECEIPT, self::ABSENCE_REPORT, self::CHECK_OUT_INVENTORY => 'person', self::USER_PROFILE, self::SIGNATURE_CODE_OF_CONDUCT => 'user', self::ARTIST_PROFILE, self::ARTIST_ADVANCE, self::ARTIST_CUSTOM => 'artist', self::COMPANY_PROFILE, self::SUPPLIER_INTAKE, self::COMPANY_CUSTOM => 'company', self::ONBOARDING_WIZARD => 'organisation', self::EVENT_SETUP_WIZARD => 'event', self::INCIDENT_REPORT, self::FEEDBACK, self::SIGNATURE_CONTRACT => 'user', self::PUBLIC_COMPLAINT, self::PUBLIC_PRESS_REQUEST, self::PUBLIC_RSVP, self::CUSTOM => null, }; } public function defaultSubmissionMode(): FormSubmissionMode { return match ($this) { self::EVENT_REGISTRATION, self::ARTIST_ADVANCE, self::SUPPLIER_INTAKE => FormSubmissionMode::DRAFT_SINGLE, self::INCIDENT_REPORT, self::FEEDBACK, self::SIGNATURE_RECEIPT, self::ABSENCE_REPORT, self::CHECK_OUT_INVENTORY, self::PUBLIC_COMPLAINT, self::PUBLIC_PRESS_REQUEST => FormSubmissionMode::MULTIPLE, self::USER_PROFILE, self::ARTIST_PROFILE, self::COMPANY_PROFILE, self::POST_EVENT_EVALUATION, self::SIGNATURE_CONTRACT, self::SIGNATURE_CODE_OF_CONDUCT, self::PUBLIC_RSVP, self::ONBOARDING_WIZARD, self::EVENT_SETUP_WIZARD, self::COMPANY_CUSTOM, self::ARTIST_CUSTOM, self::CUSTOM => FormSubmissionMode::SINGLE, }; } public function allowsPublicAccess(): bool { return match ($this) { self::PUBLIC_COMPLAINT, self::PUBLIC_PRESS_REQUEST, self::PUBLIC_RSVP, self::ARTIST_ADVANCE, self::SUPPLIER_INTAKE => true, default => false, }; } }