maintenanceMode = $maintenanceMode;
}
/**
* Enable maintenance mode
*
* @param OutputInterface $output
* @return void
*/
private function enableMaintenanceMode(OutputInterface $output)
{
if ($this->maintenanceMode->isOn()) {
$this->skipDisableMaintenanceMode = true;
$output->writeln('Maintenance mode already enabled');
return;
}
$this->maintenanceMode->set(true);
$this->skipDisableMaintenanceMode = false;
$output->writeln('Enabling maintenance mode');
}
/**
* Disable maintenance mode
*
* @param OutputInterface $output
* @return void
*/
private function disableMaintenanceMode(OutputInterface $output)
{
if ($this->skipDisableMaintenanceMode) {
$output->writeln('Skipped disabling maintenance mode');
return;
}
$this->maintenanceMode->set(false);
$output->writeln('Disabling maintenance mode');
}
/**
* Run task in maintenance mode
*
* @param callable $task
* @param OutputInterface $output
* @param bool $holdMaintenanceOnFailure
* @return mixed
* @throws \Throwable if error occurred
*/
public function executeInMaintenanceMode(callable $task, OutputInterface $output, bool $holdMaintenanceOnFailure)
{
$this->enableMaintenanceMode($output);
try {
$result = call_user_func($task);
} catch (\Throwable $e) {
if (!$holdMaintenanceOnFailure) {
$this->disableMaintenanceMode($output);
}
throw $e;
}
$this->disableMaintenanceMode($output);
return $result;
}
}