diff --git a/setup/modulediscovery.class.inc.php b/setup/modulediscovery.class.inc.php index fd37bedb90..3be25ceb1d 100644 --- a/setup/modulediscovery.class.inc.php +++ b/setup/modulediscovery.class.inc.php @@ -255,10 +255,13 @@ class ModuleDiscovery } self::SortModulesByCountOfDepencenciesDescending($aOngoingDependencies); $aOrderedModules = []; - $iLoopCount = 1; - $iModulesCount = count($aModules); - while(($iLoopCount < $iModulesCount) && (count($aOngoingDependencies) > 0) ) + $iPreviousLoopDepencyCount=-1; + $iNextLoopCount=count($aOngoingDependencies); + while(($iNextLoopCount!=$iPreviousLoopDepencyCount) //stop loop when no new dependency is resolved + && ($iNextLoopCount > 0) //still remaining dependencies + ) { + $iPreviousLoopDepencyCount=$iNextLoopCount; foreach($aOngoingDependencies as $sId => $aCurrentRemainingDeps) { $aNextDependencies=[]; @@ -281,11 +284,13 @@ class ModuleDiscovery $aOngoingDependencies[$sId]=$aNextDependencies; } - $iLoopCount++; + + $iNextLoopCount=count($aOngoingDependencies); self::SortModulesByCountOfDepencenciesDescending($aOngoingDependencies); } if ($bAbortOnMissingDependency && count($aOngoingDependencies) > 0) { + self::SortModulesByCountOfDepencenciesDescending($aOngoingDependencies); $aModulesInfo = []; $aModuleDeps = []; foreach($aOngoingDependencies as $sId => $aCurrentRemainingDeps)