From 8e15398e783ec3dd8dcf102362d090d45070f7e9 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:04:19 +0200 Subject: [PATCH] feat: show warning when dependencies are not installed --- .../DependencyManager/DependencyManager.php | 37 +++++++++++++++++++ src/Classes/IndexController.php | 17 +++++++++ 2 files changed, 54 insertions(+) diff --git a/src/Classes/DependencyManager/DependencyManager.php b/src/Classes/DependencyManager/DependencyManager.php index 91e13c50..7de0b174 100644 --- a/src/Classes/DependencyManager/DependencyManager.php +++ b/src/Classes/DependencyManager/DependencyManager.php @@ -17,6 +17,7 @@ use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\CombinationSatisfyerResult; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\DependencyBuilder; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\SystemSetFactory; +use RobinTheHood\ModifiedModuleLoaderClient\Loader\LocalModuleLoader; use RobinTheHood\ModifiedModuleLoaderClient\Module; use RobinTheHood\ModifiedModuleLoaderClient\Loader\ModuleLoader; use RobinTheHood\ModifiedModuleLoaderClient\Logger\LogLevel; @@ -139,4 +140,40 @@ private function canBeInstalledTestChanged(Module $module, array $modules): void } } } + + /** + * Liefert alle fehlenden (nicht installierte) Abhängigkeiten zu einem Modul + * + * @return array + */ + public function getMissingDependencies(Module $module): array + { + $moduleLoader = LocalModuleLoader::getModuleLoader(); + $moduleLoader->resetCache(); + $missing = []; + + foreach ($module->getRequire() as $archiveName => $version) { + $found = false; + $depModules = $moduleLoader->loadAllVersionsByArchiveName($archiveName); + foreach ($depModules as $depModule) { + if (!$depModule->isInstalled()) { + continue; + } + + if (!$this->comparator->satisfies($depModule->getVersion(), $version)) { + continue; + } + + $found = true; + $missing += $this->getMissingDependencies($depModule); + break; + } + + if (!$found) { + $missing += [$archiveName => $version]; + } + } + + return $missing; + } } diff --git a/src/Classes/IndexController.php b/src/Classes/IndexController.php index f78622e0..cfcf12a2 100644 --- a/src/Classes/IndexController.php +++ b/src/Classes/IndexController.php @@ -22,6 +22,7 @@ use RobinTheHood\ModifiedModuleLoaderClient\SendMail; use RobinTheHood\ModifiedModuleLoaderClient\Config; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\DependencyException; +use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\DependencyManager; use RuntimeException; class IndexController extends Controller @@ -241,6 +242,22 @@ public function invokeModuleInfo() ]); } + $dependencyManger = new DependencyManager(); + $missingDependencies = $dependencyManger->getMissingDependencies($module); + if ($missingDependencies) { + $string = ''; + foreach ($missingDependencies as $archiveName => $version) { + $string .= '▶️ ' . $archiveName . ' ' . $version . "\n"; + } + + Notification::pushFlashMessage([ + 'type' => 'warning', + 'text' => + 'Einige Abhängigkeiten sind nicht installiert. Das Fehlen von Abhängigkeiten kann zu Fehlern bei der + Ausführung des Moduls führen. Installiere die folgenden fehlenden Abhänigkeiten: ' . nl2br($string) + ]); + } + return $this->render('ModuleInfo', [ 'module' => $module ]);