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