Add machine wash configuration and controls to self-serve module
This commit is contained in:
@@ -360,9 +360,13 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
$allowedServices = $this->normalizeServiceNames(
|
||||
is_array($metadata['allowed_services'] ?? null) ? (array)$metadata['allowed_services'] : []
|
||||
);
|
||||
$machineAvailable = array_key_exists('machine_available', $metadata)
|
||||
$machineWashEnabled = $this->isMachineWashEnabled();
|
||||
if (!$machineWashEnabled) {
|
||||
$allowedServices = $this->withoutMachineService($allowedServices);
|
||||
}
|
||||
$machineAvailable = $machineWashEnabled && (array_key_exists('machine_available', $metadata)
|
||||
? (bool)$metadata['machine_available']
|
||||
: ($lane->exists() && !empty($lane->relay_machine_id->value()));
|
||||
: ($lane->exists() && !empty($lane->relay_machine_id->value())));
|
||||
$allVisibleQuestionsAnswered = array_key_exists('all_visible_questions_answered', $metadata)
|
||||
? (bool)$metadata['all_visible_questions_answered']
|
||||
: true;
|
||||
@@ -408,6 +412,7 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
'events' => $events,
|
||||
'allowed_services' => $allowedServices,
|
||||
'machine_available' => $machineAvailable,
|
||||
'machine_wash_enabled' => $machineWashEnabled,
|
||||
'all_visible_questions_answered' => $allVisibleQuestionsAnswered,
|
||||
'allowed' => (bool)$session->allowed->value(),
|
||||
'config_version_id' => $metadata['config_version_id'] ?? null,
|
||||
@@ -687,7 +692,12 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
}
|
||||
}
|
||||
|
||||
$machineAvailable = !empty($lane->relay_machine_id->value());
|
||||
$machineWashEnabled = $this->isMachineWashEnabled();
|
||||
if (!$machineWashEnabled) {
|
||||
$allowedServices = $this->withoutMachineService($allowedServices);
|
||||
}
|
||||
|
||||
$machineAvailable = $machineWashEnabled && !empty($lane->relay_machine_id->value());
|
||||
$allVisibleQuestionsAnswered = true;
|
||||
foreach ($visibleQuestions as $question) {
|
||||
if ($question['answer'] === null) {
|
||||
@@ -726,8 +736,10 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
'tasks' => $visibleTasks,
|
||||
'allowed_services' => $allowedServices,
|
||||
'machine_available' => $machineAvailable,
|
||||
'machine_wash_enabled' => $machineWashEnabled,
|
||||
'all_visible_questions_answered' => $allVisibleQuestionsAnswered,
|
||||
'allowed' => $machineAllowed,
|
||||
'blocked_reason' => !$machineWashEnabled ? 'Machine wash is disabled globally.' : null,
|
||||
'config_version_id' => $publishedConfigVersionId === null ? null : (int)$publishedConfigVersionId,
|
||||
'config_source' => $configSource,
|
||||
'evaluation_trace' => [
|
||||
@@ -826,6 +838,7 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
'tasks' => $snapshot['tasks'],
|
||||
'allowed_services' => $snapshot['allowed_services'],
|
||||
'machine_available' => $snapshot['machine_available'],
|
||||
'machine_wash_enabled' => $snapshot['machine_wash_enabled'] ?? true,
|
||||
'all_visible_questions_answered' => $snapshot['all_visible_questions_answered'],
|
||||
'allowed' => $snapshot['allowed'],
|
||||
'blocked_reason' => $snapshot['blocked_reason'] ?? null,
|
||||
@@ -3310,6 +3323,7 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
return [
|
||||
'allowed_services' => $snapshot['allowed_services'],
|
||||
'machine_available' => (bool)$snapshot['machine_available'],
|
||||
'machine_wash_enabled' => (bool)($snapshot['machine_wash_enabled'] ?? true),
|
||||
'all_visible_questions_answered' => (bool)$snapshot['all_visible_questions_answered'],
|
||||
'config_version_id' => $snapshot['config_version_id'] ?? null,
|
||||
'evaluation_trace' => $snapshot['evaluation_trace'] ?? null,
|
||||
@@ -3608,6 +3622,27 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
));
|
||||
}
|
||||
|
||||
protected function isMachineWashEnabled(): bool
|
||||
{
|
||||
try {
|
||||
return (new selfserve())->config->machine_wash_enabled->isTrue();
|
||||
} catch (\Throwable) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int,string> $services
|
||||
* @return array<int,string>
|
||||
*/
|
||||
protected function withoutMachineService(array $services): array
|
||||
{
|
||||
return array_values(array_filter(
|
||||
$this->normalizeServiceNames($services),
|
||||
static fn(string $service): bool => $service !== selfserve_lane_services::MACHINE->name
|
||||
));
|
||||
}
|
||||
|
||||
protected function taskUsesMachineControls(array $task): bool
|
||||
{
|
||||
if (in_array(selfserve_lane_services::MACHINE->name, $this->normalizeServiceNames($this->normalizeJsonArray($task['services'] ?? null)), true)) {
|
||||
|
||||
Reference in New Issue
Block a user