Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
UninstallLanguageCommand.php
Go to the documentation of this file.
1 <?php
8 
14 use Symfony\Component\Console\Command\Command;
15 use Symfony\Component\Console\Input\InputArgument;
16 use Symfony\Component\Console\Input\InputInterface;
17 use Symfony\Component\Console\Input\InputOption;
18 use Symfony\Component\Console\Output\OutputInterface;
19 
25 class UninstallLanguageCommand extends Command
26 {
30  const PACKAGE_ARGUMENT = 'package';
31 
35  const BACKUP_CODE_OPTION = 'backup-code';
36 
40  private $dependencyChecker;
41 
45  private $remove;
46 
50  private $composerInfo;
51 
55  private $cache;
56 
60  private $backupRollbackFactory;
61 
71  public function __construct(
72  DependencyChecker $dependencyChecker,
73  Remove $remove,
74  ComposerInformation $composerInfo,
75  Cache $cache,
76  BackupRollbackFactory $backupRollbackFactory
77  ) {
78  $this->dependencyChecker = $dependencyChecker;
79  $this->remove = $remove;
80  $this->composerInfo = $composerInfo;
81  $this->cache = $cache;
82  $this->backupRollbackFactory = $backupRollbackFactory;
83 
84  parent::__construct();
85  }
86 
90  protected function configure()
91  {
92  $this->setName('i18n:uninstall')
93  ->setDescription('Uninstalls language packages')
94  ->setDefinition([
95  new InputArgument(
96  self::PACKAGE_ARGUMENT,
97  InputArgument::IS_ARRAY | InputArgument::REQUIRED,
98  'Language package name'
99  ),
100  new InputOption(
101  self::BACKUP_CODE_OPTION,
102  '-b',
103  InputOption::VALUE_NONE,
104  'Take code and configuration files backup (excluding temporary files)'
105  ),
106  ]);
107 
108  parent::configure();
109  }
110 
114  protected function execute(InputInterface $input, OutputInterface $output)
115  {
116  $languages = $input->getArgument(self::PACKAGE_ARGUMENT);
117  $packagesToRemove = [];
118  $dependencies = $this->dependencyChecker->checkDependencies($languages, true);
119 
120  foreach ($languages as $package) {
121  if (!$this->validate($package)) {
122  $output->writeln("<info>Package $package is not a Magento language and will be skipped.</info>");
123  } else {
124  if (sizeof($dependencies[$package]) > 0) {
125  $output->writeln("<info>Package $package has dependencies and will be skipped.</info>");
126  } else {
127  $packagesToRemove[] = $package;
128  }
129  }
130  }
131 
132  if ($packagesToRemove !== []) {
133  if ($input->getOption(self::BACKUP_CODE_OPTION)) {
134  $backupRestore = $this->backupRollbackFactory->create($output);
135  $backupRestore->codeBackup(time());
136  } else {
137  $output->writeln('<info>You are removing language package without a code backup.</info>');
138  }
139 
140  $output->writeln($this->remove->remove($packagesToRemove));
141  $this->cache->clean();
142  } else {
143  $output->writeln('<info>Nothing is removed.</info>');
144  }
145  }
146 
154  private function validate($package)
155  {
156  $installedPackages = $this->composerInfo->getRootRequiredPackageTypesByName();
157 
158  if (isset($installedPackages[$package]) && $installedPackages[$package] === 'magento2-language') {
159  return true;
160  }
161 
162  return false;
163  }
164 }
__construct(DependencyChecker $dependencyChecker, Remove $remove, ComposerInformation $composerInfo, Cache $cache, BackupRollbackFactory $backupRollbackFactory)
execute(InputInterface $input, OutputInterface $output)