15 use Symfony\Component\Console\Input\InputInterface;
    16 use Symfony\Component\Console\Input\InputOption;
    17 use Symfony\Component\Console\Output\OutputInterface;
    38     private $objectManager;
    45     private $backupRollbackFactory;
    52     private $deploymentConfig;
    57     private $maintenanceModeEnabler;
    75         $this->objectManager = $objectManagerProvider->
get();
    76         $this->backupRollbackFactory = $this->objectManager->get(\
Magento\Framework\Setup\BackupRollbackFactory::class);
    78         $this->maintenanceModeEnabler =
    79             $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class);
    80         parent::__construct();
    92                 InputOption::VALUE_NONE,
    93                 'Take code and configuration files backup (excluding temporary files)'    96                 self::INPUT_KEY_MEDIA,
    98                 InputOption::VALUE_NONE,
   104                 InputOption::VALUE_NONE,
   105                 'Take complete database backup'   108         $this->setName(
'setup:backup')
   109             ->setDescription(
'Takes backup of Magento Application code base, media and database')
   119         if (!$this->deploymentConfig->isAvailable()
   120             && ($input->getOption(self::INPUT_KEY_MEDIA) || $input->getOption(self::INPUT_KEY_DB))) {
   121             $output->writeln(
"<info>No information is available: the Magento application is not installed.</info>");
   123             return \Magento\Framework\Console\Cli::RETURN_FAILURE;
   125         $returnValue = $this->maintenanceModeEnabler->executeInMaintenanceMode(
   126             function () use ($input, 
$output) {
   128                     $inputOptionProvided = 
false;
   130                     $backupHandler = $this->backupRollbackFactory->create(
$output);
   131                     if ($input->getOption(self::INPUT_KEY_CODE)) {
   132                         $backupHandler->codeBackup($time);
   133                         $inputOptionProvided = 
true;
   135                     if ($input->getOption(self::INPUT_KEY_MEDIA)) {
   137                         $inputOptionProvided = 
true;
   139                     if ($input->getOption(self::INPUT_KEY_DB)) {
   140                         $this->setAreaCode();
   141                         $backupHandler->dbBackup($time);
   142                         $inputOptionProvided = 
true;
   144                     if (!$inputOptionProvided) {
   145                         throw new \InvalidArgumentException(
   146                             'Not enough information provided to take backup.'   149                     return \Magento\Framework\Console\Cli::RETURN_SUCCESS;
   151                     $output->writeln(
'<error>' . $e->getMessage() . 
'</error>');
   152                     return \Magento\Framework\Console\Cli::RETURN_FAILURE;
   167     private function setAreaCode()
   169         $areaCode = 
'adminhtml';
   171         $appState = $this->objectManager->get(\
Magento\Framework\
App\State::class);
   172         $appState->setAreaCode($areaCode);
   174         $configLoader = $this->objectManager->get(\
Magento\Framework\
ObjectManager\ConfigLoaderInterface::class);
   175         $this->objectManager->configure($configLoader->load($areaCode));
 
__construct(ObjectManagerProvider $objectManagerProvider, MaintenanceMode $maintenanceMode, DeploymentConfig $deploymentConfig, MaintenanceModeEnabler $maintenanceModeEnabler=null)
execute(InputInterface $input, OutputInterface $output)