/** * Run Composer dependency check for uninstall * * @param array $packages * @return array * @throws \RuntimeException */ public function runUninstallReadinessCheck(array $packages) { try { $packagesAndTypes = $this->composerInfo->getRootRequiredPackageTypesByName(); $dependencies = $this->packageDependencyChecker->checkDependencies($packages, true); $messages = []; $themes = []; foreach ($packages as $package) { if (!isset($packagesAndTypes[$package])) { throw new \RuntimeException('Package ' . $package . ' not found in the system.'); } switch ($packagesAndTypes[$package]) { case ComposerInformation::METAPACKAGE_PACKAGE_TYPE: unset($dependencies[$package]); break; case ComposerInformation::THEME_PACKAGE_TYPE: $themes[] = $package; break; } if (!empty($dependencies[$package])) { $messages[] = $package . " has the following dependent package(s): " . implode(', ', $dependencies[$package]); } } if (!empty($themes)) { $messages = array_merge($messages, $this->themeDependencyChecker->checkChildThemeByPackagesName($themes)); } if (!empty($messages)) { throw new \RuntimeException(implode(PHP_EOL, $messages)); } return ['success' => true]; } catch (\RuntimeException $e) { $message = str_replace(PHP_EOL, '<br/>', htmlspecialchars($e->getMessage())); return ['success' => false, 'error' => $message]; } }
/** * 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; }