Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
MaintenanceModeEnabler.php
Go to the documentation of this file.
1 <?php
7 
9 use Symfony\Component\Console\Output\OutputInterface;
10 
16 {
20  private $maintenanceMode;
21 
25  private $skipDisableMaintenanceMode;
26 
30  public function __construct(MaintenanceMode $maintenanceMode)
31  {
32  $this->maintenanceMode = $maintenanceMode;
33  }
34 
41  private function enableMaintenanceMode(OutputInterface $output)
42  {
43  if ($this->maintenanceMode->isOn()) {
44  $this->skipDisableMaintenanceMode = true;
45  $output->writeln('<info>Maintenance mode already enabled</info>');
46  return;
47  }
48 
49  $this->maintenanceMode->set(true);
50  $this->skipDisableMaintenanceMode = false;
51  $output->writeln('<info>Enabling maintenance mode</info>');
52  }
53 
60  private function disableMaintenanceMode(OutputInterface $output)
61  {
62  if ($this->skipDisableMaintenanceMode) {
63  $output->writeln('<info>Skipped disabling maintenance mode</info>');
64  return;
65  }
66 
67  $this->maintenanceMode->set(false);
68  $output->writeln('<info>Disabling maintenance mode</info>');
69  }
70 
80  public function executeInMaintenanceMode(callable $task, OutputInterface $output, bool $holdMaintenanceOnFailure)
81  {
82  $this->enableMaintenanceMode($output);
83 
84  try {
85  $result = call_user_func($task);
86  } catch (\Throwable $e) {
87  if (!$holdMaintenanceOnFailure) {
88  $this->disableMaintenanceMode($output);
89  }
90  throw $e;
91  }
92 
93  $this->disableMaintenanceMode($output);
94  return $result;
95  }
96 }
executeInMaintenanceMode(callable $task, OutputInterface $output, bool $holdMaintenanceOnFailure)