feat(forms): add PHP enums for form builder
9 backed string enums covering purpose, field type, submission status/mode/review, field width, value storage hint, snapshot mode, webhook delivery status. FormPurpose/FormFieldType include helper methods per ARCH §3/§5. All with declare(strict_types=1) and values() helpers for validation rules. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
119
api/app/Enums/FormBuilder/FormPurpose.php
Normal file
119
api/app/Enums/FormBuilder/FormPurpose.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Enums\FormBuilder;
|
||||
|
||||
enum FormPurpose: string
|
||||
{
|
||||
case EVENT_REGISTRATION = 'event_registration';
|
||||
case USER_PROFILE = 'user_profile';
|
||||
case ARTIST_PROFILE = 'artist_profile';
|
||||
case COMPANY_PROFILE = 'company_profile';
|
||||
case ARTIST_ADVANCE = 'artist_advance';
|
||||
case SUPPLIER_INTAKE = 'supplier_intake';
|
||||
case INCIDENT_REPORT = 'incident_report';
|
||||
case FEEDBACK = 'feedback';
|
||||
case POST_EVENT_EVALUATION = 'post_event_evaluation';
|
||||
case SIGNATURE_CONTRACT = 'signature_contract';
|
||||
case SIGNATURE_CODE_OF_CONDUCT = 'signature_code_of_conduct';
|
||||
case SIGNATURE_RECEIPT = 'signature_receipt';
|
||||
case ABSENCE_REPORT = 'absence_report';
|
||||
case CHECK_OUT_INVENTORY = 'check_out_inventory';
|
||||
case PUBLIC_COMPLAINT = 'public_complaint';
|
||||
case PUBLIC_PRESS_REQUEST = 'public_press_request';
|
||||
case PUBLIC_RSVP = 'public_rsvp';
|
||||
case ONBOARDING_WIZARD = 'onboarding_wizard';
|
||||
case EVENT_SETUP_WIZARD = 'event_setup_wizard';
|
||||
case COMPANY_CUSTOM = 'company_custom';
|
||||
case ARTIST_CUSTOM = 'artist_custom';
|
||||
case CUSTOM = 'custom';
|
||||
|
||||
/**
|
||||
* @return array<int, string>
|
||||
*/
|
||||
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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user