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; } }