dependencyChecker = $dependencyChecker;
$this->remove = $remove;
$this->composerInfo = $composerInfo;
$this->cache = $cache;
$this->backupRollbackFactory = $backupRollbackFactory;
parent::__construct();
}
/**
* {@inheritdoc}
*/
protected function configure()
{
$this->setName('i18n:uninstall')
->setDescription('Uninstalls language packages')
->setDefinition([
new InputArgument(
self::PACKAGE_ARGUMENT,
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
'Language package name'
),
new InputOption(
self::BACKUP_CODE_OPTION,
'-b',
InputOption::VALUE_NONE,
'Take code and configuration files backup (excluding temporary files)'
),
]);
parent::configure();
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$languages = $input->getArgument(self::PACKAGE_ARGUMENT);
$packagesToRemove = [];
$dependencies = $this->dependencyChecker->checkDependencies($languages, true);
foreach ($languages as $package) {
if (!$this->validate($package)) {
$output->writeln("Package $package is not a Magento language and will be skipped.");
} else {
if (sizeof($dependencies[$package]) > 0) {
$output->writeln("Package $package has dependencies and will be skipped.");
} else {
$packagesToRemove[] = $package;
}
}
}
if ($packagesToRemove !== []) {
if ($input->getOption(self::BACKUP_CODE_OPTION)) {
$backupRestore = $this->backupRollbackFactory->create($output);
$backupRestore->codeBackup(time());
} else {
$output->writeln('You are removing language package without a code backup.');
}
$output->writeln($this->remove->remove($packagesToRemove));
$this->cache->clean();
} else {
$output->writeln('Nothing is removed.');
}
}
/**
* Validates user input
*
* @param string $package
*
* @return bool
*/
private function validate($package)
{
$installedPackages = $this->composerInfo->getRootRequiredPackageTypesByName();
if (isset($installedPackages[$package]) && $installedPackages[$package] === 'magento2-language') {
return true;
}
return false;
}
}