21 private $composerInfo;
26 private $packageDependencyChecker;
33 private $themeDependencyChecker;
47 $this->composerInfo = $composerInfo;
48 $this->packageDependencyChecker = $dependencyChecker;
49 $this->themeDependencyChecker = $themeDependencyCheckerFactory->
create();
62 $packagesAndTypes = $this->composerInfo->getRootRequiredPackageTypesByName();
63 $dependencies = $this->packageDependencyChecker->checkDependencies($packages,
true);
67 foreach ($packages as $package) {
68 if (!isset($packagesAndTypes[$package])) {
69 throw new \RuntimeException(
'Package ' . $package .
' not found in the system.');
72 switch ($packagesAndTypes[$package]) {
74 unset($dependencies[$package]);
81 if (!empty($dependencies[$package])) {
82 $messages[] = $package .
" has the following dependent package(s): " 83 . implode(
', ', $dependencies[$package]);
87 if (!empty($themes)) {
88 $messages = array_merge(
90 $this->themeDependencyChecker->checkChildThemeByPackagesName($themes)
94 if (!empty($messages)) {
95 throw new \RuntimeException(implode(PHP_EOL, $messages));
98 return [
'success' =>
true];
100 $message = str_replace(PHP_EOL,
'<br/>', htmlspecialchars($e->getMessage()));
101 return [
'success' =>
false,
'error' =>
$message];
__construct(ComposerInformation $composerInfo, DependencyChecker $dependencyChecker, ThemeDependencyCheckerFactory $themeDependencyCheckerFactory)
runUninstallReadinessCheck(array $packages)