MainToWorkflowEngineBranchBackupMigrator
in package
implements
BackupPayloadMigratorInterface
Upgrades pre-branch backup payloads to the feature/workflow-engine object model.
Table of Contents
Interfaces
- BackupPayloadMigratorInterface
- Upgrades decoded backup payloads before they are restored to the current schema.
Constants
- ELIGIBLE_RECOMMENDATION_STATES : mixed = ['Need to Schedule', 'Scheduled', 'Given', 'Ann...
- LEGACY_EMAIL_TEMPLATE_SLUGS : mixed = ['App\Mailer\KMPMailer::resetPassword' => ['slu...
Methods
-
migrate()
: array{payload: array
, stats: array } - name() : string
- Return the stable migrator identifier for restore reporting.
- shouldRun() : bool
- addBestowalRecommendationLink() : bool
- backfillEmailTemplateSlugs() : void
- backfillReasonSummaries() : void
- bestowalStateForRecommendation() : string
- bestowalStatusForState() : string
- Map a bestowal state to its high-level status bucket.
- buildBestowalRow() : array<string, mixed>
- emailTemplateMappingFor() : array{slug: string, name: string, description: string}|array{}
- existingBestowalByPrimaryRecommendation() : array<int, int>
- existingBestowalRecommendationLinks() : array<string, bool>
- hasLegacyEmailTemplateRows() : bool
- isEligibleParentRecommendation() : bool
- isEmptyId() : bool
- Check whether a legacy foreign key value is effectively empty.
- legacyEmailTemplateSlugFor() : string
- missingRequiredBestowalData() : bool
- needsBestowalMigration() : bool
- Return true only for payloads that predate the complete bestowal model.
- nextId() : int
- nullableInt() : int|null
- Normalize optional legacy foreign key values.
- reasonSummaryForRecommendation() : string|null
- setRecommendationBestowalId() : bool
- slugify() : string
- Convert legacy identifiers into URL-safe slugs.
- uniqueSlug() : string
- variablesSchemaFromAvailableVars() : string|null
- Build a current variables schema from legacy available_vars JSON.
Constants
ELIGIBLE_RECOMMENDATION_STATES
private
mixed
ELIGIBLE_RECOMMENDATION_STATES
= ['Need to Schedule', 'Scheduled', 'Given', 'Announced Not Given']
LEGACY_EMAIL_TEMPLATE_SLUGS
private
mixed
LEGACY_EMAIL_TEMPLATE_SLUGS
= ['App\Mailer\KMPMailer::resetPassword' => ['slug' => 'password-reset', 'name' => 'Password Reset', 'description' => 'Sent when a member requests a password reset link.'], 'App\Mailer\KMPMailer::mobileCard' => ['slug' => 'mobile-card-url', 'name' => 'Mobile Card URL', 'description' => 'Sent when a member requests their mobile card link.'], 'App\Mailer\KMPMailer::newRegistration' => ['slug' => 'member-registration-welcome', 'name' => 'Member Registration Welcome', 'description' => 'Welcome email sent to a newly registered adult member with a password-reset link.'], 'App\Mailer\KMPMailer::notifySecretaryOfNewMember' => ['slug' => 'member-registration-secretary', 'name' => 'New Member Secretary Notification', 'description' => 'Sent to the kingdom secretary when a new adult member registers.'], 'App\Mailer\KMPMailer::notifySecretaryOfNewMinorMember' => ['slug' => 'member-registration-secretary-minor', 'name' => 'New Minor Member Secretary Notification', 'description' => 'Sent to the kingdom secretary when a new minor member registers.'], 'App\Mailer\KMPMailer::notifyOfWarrant' => ['slug' => 'warrant-issued', 'name' => 'Warrant Issued', 'description' => 'Sent when a warrant roster workflow activates a warrant for a member.'], 'App\Mailer\KMPMailer::sendFromTemplate' => ['slug' => 'award-recommendation-submitted', 'name' => 'Award Recommendation Submitted', 'description' => 'Sent to the Crown when a new award recommendation is submitted.'], 'Officers\Mailer\OfficersMailer::notifyOfHire' => ['slug' => 'officer-hire-notification', 'name' => 'Officer Hire Notification', 'description' => 'Sent to a member when they are appointed to an office.'], 'Officers\Mailer\OfficersMailer::notifyOfRelease' => ['slug' => 'officer-release-notification', 'name' => 'Officer Release Notification', 'description' => 'Sent to a member when they are released from an office.'], 'Activities\Mailer\ActivitiesMailer::notifyApprover' => ['slug' => 'authorization-approval-request', 'name' => 'Authorization Approval Request', 'description' => 'Sent to the next approver when an authorization request needs review.'], 'Activities\Mailer\ActivitiesMailer::notifyRequester' => ['slug' => 'authorization-request-update', 'name' => 'Authorization Request Update', 'description' => 'Sent to the requester when an authorization request status changes.'], 'Activities\Mailer\ActivitiesMailer::notifyApproverOfRetraction' => ['slug' => 'authorization-request-retracted', 'name' => 'Authorization Request Retracted', 'description' => 'Sent to an approver when a pending authorization request is retracted.']]
Methods
migrate()
public
migrate(array<string, mixed> $payload) : array{payload: array, stats: array}
Parameters
- $payload : array<string, mixed>
-
Decoded backup payload.
Return values
array{payload: arrayname()
Return the stable migrator identifier for restore reporting.
public
name() : string
Return values
stringshouldRun()
public
shouldRun(array<string, mixed> $payload) : bool
Parameters
- $payload : array<string, mixed>
-
Decoded backup payload.
Return values
booladdBestowalRecommendationLink()
private
addBestowalRecommendationLink(array<string, mixed> &$payload, array<string, bool> &$existingLinks, int &$nextLinkId, int $bestowalId, int $recommendationId, string $now) : bool
Parameters
- $payload : array<string, mixed>
- $existingLinks : array<string, bool>
- $nextLinkId : int
- $bestowalId : int
- $recommendationId : int
- $now : string
Return values
boolbackfillEmailTemplateSlugs()
private
backfillEmailTemplateSlugs(array<string, mixed> &$payload, array<string, int> &$stats) : void
Parameters
- $payload : array<string, mixed>
- $stats : array<string, int>
backfillReasonSummaries()
private
backfillReasonSummaries(array<string, mixed> &$payload) : void
Parameters
- $payload : array<string, mixed>
bestowalStateForRecommendation()
private
bestowalStateForRecommendation(array<string, mixed> $recommendation) : string
Parameters
- $recommendation : array<string, mixed>
Return values
stringbestowalStatusForState()
Map a bestowal state to its high-level status bucket.
private
bestowalStatusForState(string $state) : string
Parameters
- $state : string
Return values
stringbuildBestowalRow()
private
buildBestowalRow(int $bestowalId, array<string, mixed> $recommendation, string $now) : array<string, mixed>
Parameters
- $bestowalId : int
- $recommendation : array<string, mixed>
- $now : string
Return values
array<string, mixed>emailTemplateMappingFor()
private
emailTemplateMappingFor(array<string, mixed> $row) : array{slug: string, name: string, description: string}|array{}
Parameters
- $row : array<string, mixed>
Return values
array{slug: string, name: string, description: string}|array{}existingBestowalByPrimaryRecommendation()
private
existingBestowalByPrimaryRecommendation(array<int, mixed> $bestowals) : array<int, int>
Parameters
- $bestowals : array<int, mixed>
Return values
array<int, int>existingBestowalRecommendationLinks()
private
existingBestowalRecommendationLinks(array<int, mixed> $links) : array<string, bool>
Parameters
- $links : array<int, mixed>
Return values
array<string, bool>hasLegacyEmailTemplateRows()
private
hasLegacyEmailTemplateRows(array<int, mixed> $rows) : bool
Parameters
- $rows : array<int, mixed>
Return values
boolisEligibleParentRecommendation()
private
isEligibleParentRecommendation(array<string, mixed> $recommendation) : bool
Parameters
- $recommendation : array<string, mixed>
Return values
boolisEmptyId()
Check whether a legacy foreign key value is effectively empty.
private
isEmptyId(mixed $value) : bool
Parameters
- $value : mixed
Return values
boollegacyEmailTemplateSlugFor()
private
legacyEmailTemplateSlugFor(array<string, mixed> $row) : string
Parameters
- $row : array<string, mixed>
Return values
stringmissingRequiredBestowalData()
private
missingRequiredBestowalData(array<string, mixed> $recommendation) : bool
Parameters
- $recommendation : array<string, mixed>
Return values
boolneedsBestowalMigration()
Return true only for payloads that predate the complete bestowal model.
private
needsBestowalMigration(array<string, mixed> $payload) : bool
Modern backups include both tables even when they contain no rows. Their recommendations must not be reinterpreted as legacy data during every restore.
Parameters
- $payload : array<string, mixed>
-
Decoded backup payload.
Return values
boolnextId()
private
nextId(array<int, mixed> $rows) : int
Parameters
- $rows : array<int, mixed>
Return values
intnullableInt()
Normalize optional legacy foreign key values.
private
nullableInt(mixed $value) : int|null
Parameters
- $value : mixed
Return values
int|nullreasonSummaryForRecommendation()
private
reasonSummaryForRecommendation(array<string, mixed> $recommendation) : string|null
Parameters
- $recommendation : array<string, mixed>
Return values
string|nullsetRecommendationBestowalId()
private
setRecommendationBestowalId(array<string, mixed> &$payload, int $index, int $bestowalId) : bool
Parameters
- $payload : array<string, mixed>
- $index : int
- $bestowalId : int
Return values
boolslugify()
Convert legacy identifiers into URL-safe slugs.
private
slugify(string $value) : string
Parameters
- $value : string
Return values
stringuniqueSlug()
private
uniqueSlug(string $baseSlug, array<string, bool> $usedSlugs) : string
Parameters
- $baseSlug : string
- $usedSlugs : array<string, bool>
Return values
stringvariablesSchemaFromAvailableVars()
Build a current variables schema from legacy available_vars JSON.
private
variablesSchemaFromAvailableVars(mixed $availableVars) : string|null
Parameters
- $availableVars : mixed