87 lines
2.5 KiB
PHP
87 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Support\Onboarding;
|
|
|
|
final class OnboardingTaskCatalog
|
|
{
|
|
/**
|
|
* @return array<int, array{task_type: string, title: string, step: int, prerequisites: array<int, string>}>
|
|
*/
|
|
public static function all(): array
|
|
{
|
|
return [
|
|
[
|
|
'task_type' => OnboardingTaskType::VerifyPermissions,
|
|
'title' => 'Verify permissions',
|
|
'step' => 4,
|
|
'prerequisites' => [],
|
|
],
|
|
[
|
|
'task_type' => OnboardingTaskType::ConsentStatus,
|
|
'title' => 'Check consent status',
|
|
'step' => 4,
|
|
'prerequisites' => [OnboardingTaskType::VerifyPermissions],
|
|
],
|
|
[
|
|
'task_type' => OnboardingTaskType::ConnectionDiagnostics,
|
|
'title' => 'Run connection diagnostics',
|
|
'step' => 4,
|
|
'prerequisites' => [OnboardingTaskType::VerifyPermissions],
|
|
],
|
|
[
|
|
'task_type' => OnboardingTaskType::InitialSync,
|
|
'title' => 'Initial sync',
|
|
'step' => 5,
|
|
'prerequisites' => [OnboardingTaskType::VerifyPermissions],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array{task_type: string, title: string, step: int, prerequisites: array<int, string>}|null
|
|
*/
|
|
public static function find(string $taskType): ?array
|
|
{
|
|
foreach (self::all() as $task) {
|
|
if ($task['task_type'] === $taskType) {
|
|
return $task;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param array<string, string> $latestEvidenceStatusByTaskType
|
|
*/
|
|
public static function prerequisitesMet(string $taskType, array $latestEvidenceStatusByTaskType): bool
|
|
{
|
|
return count(self::unmetPrerequisites($taskType, $latestEvidenceStatusByTaskType)) === 0;
|
|
}
|
|
|
|
/**
|
|
* @param array<string, string> $latestEvidenceStatusByTaskType
|
|
* @return array<int, string>
|
|
*/
|
|
public static function unmetPrerequisites(string $taskType, array $latestEvidenceStatusByTaskType): array
|
|
{
|
|
$task = self::find($taskType);
|
|
|
|
if (! $task) {
|
|
return [];
|
|
}
|
|
|
|
$unmet = [];
|
|
|
|
foreach ($task['prerequisites'] as $requiredTaskType) {
|
|
$status = $latestEvidenceStatusByTaskType[$requiredTaskType] ?? 'unknown';
|
|
|
|
if ($status !== 'ok') {
|
|
$unmet[] = $requiredTaskType;
|
|
}
|
|
}
|
|
|
|
return $unmet;
|
|
}
|
|
}
|