diff --git a/setup/module/iTopModulesDependencyValidationService.php b/setup/module/iTopModulesDependencyValidationService.php index e0c0955e50..4ac543ce93 100644 --- a/setup/module/iTopModulesDependencyValidationService.php +++ b/setup/module/iTopModulesDependencyValidationService.php @@ -44,19 +44,26 @@ class iTopModulesDependencyValidationService { self::$oInstance = $instance; } - private static function GetModulesDataByModuleName() : array { - if (count(self::$aModulesDataByModuleName)>0){ - return self::$aModulesDataByModuleName; - } + public static function GetModulesDataByModuleName() : array { + if (count(self::$aModulesDataByModuleName)==0){ + glob(APPROOT.'data/production-modules/*', GLOB_ONLYDIR); + glob(APPROOT.'data/extensions/*', GLOB_ONLYDIR); - $aDirsToScan = [ - APPROOT.'datamodels/2.x', - APPROOT.'extensions', - APPROOT.'extensions', - APPROOT.'data/production-modules', - APPROOT.'data/production-modules', - ]; - self::$aModulesDataByModuleName = ModuleDiscovery::GetAvailableModules($aDirsToScan, true); + + $aDirsToScan = array_merge([ + APPROOT.'datamodels/2.x', + APPROOT.'extensions', + APPROOT.'data/production-modules', + ], + glob(APPROOT.'data/production-modules/*', GLOB_ONLYDIR), + glob(APPROOT.'data/extensions/*', GLOB_ONLYDIR) + ); + + foreach (ModuleDiscovery::GetAvailableModules($aDirsToScan, true) as $sModuleId => $aModuleData) { + list($sModuleName,) = \ModuleDiscovery::GetModuleName($sModuleId); + self::$aModulesDataByModuleName[$sModuleName] = $aModuleData; + } + } return self::$aModulesDataByModuleName; } @@ -135,7 +142,7 @@ class iTopModulesDependencyValidationService { $aFullnameClassesByModuleName=[]; foreach (self::GetModulesDataByModuleName() as $sModuleName => $aModuleData){ //echo "$sModuleName\n"; - $aFiles = $aModuleData[2]['datamodel'] ?? []; + $aFiles = $aModuleData['datamodel'] ?? []; $sDir = dirname($aModuleData['module_file_path']); $aDeps=[]; diff --git a/setup/modulediscovery.class.inc.php b/setup/modulediscovery.class.inc.php index 7aae265a7c..257167bf22 100755 --- a/setup/modulediscovery.class.inc.php +++ b/setup/modulediscovery.class.inc.php @@ -87,7 +87,7 @@ class ModuleDiscovery // Cache the results and the source directories protected static $m_aSearchDirs = null; protected static $m_aModules = array(); - protected static $m_aModuleVersionByName = array(); + public static $m_aModuleVersionByName = array(); // All the entries below are list of file paths relative to the module directory protected static $m_aFilesList = array('datamodel', 'webservice', 'dictionary', 'data.struct', 'data.sample'); @@ -246,7 +246,7 @@ class ModuleDiscovery ksort($aDependencies); $aOrderedModules = []; $iLoopCount = 1; - while(($iLoopCount < count($aModules)+1) && (count($aDependencies) > 0) ) + while(($iLoopCount < count($aModules)) && (count($aDependencies) > 0) ) { foreach($aDependencies as $sId => $aRemainingDeps) { diff --git a/tests/php-unit-tests/integration-tests/iTopModulesDependencyValidationServiceTest.php b/tests/php-unit-tests/integration-tests/iTopModulesDependencyValidationServiceTest.php index 3cc455e28b..3214bd122e 100644 --- a/tests/php-unit-tests/integration-tests/iTopModulesDependencyValidationServiceTest.php +++ b/tests/php-unit-tests/integration-tests/iTopModulesDependencyValidationServiceTest.php @@ -68,7 +68,7 @@ class iTopModulesDependencyValidationServiceTest extends ItopDataTestCase { $aErrors=[]; /** @var XmlModule $oXmlModule */ foreach (iTopModulesDependencyValidationService::GetInstance()->aModules as $sModuleName => $oXmlModule) { - $aCurrentDeps = iTopModulesDependencyValidationService::GetInstance()::$aModulesDataByModuleName[$sModuleName][2]['dependencies'] ?? []; + $aCurrentDeps = iTopModulesDependencyValidationService::GetModulesDataByModuleName()[$sModuleName]['dependencies'] ?? []; $aModuleErrors=[]; foreach ($oXmlModule->aDependencyModulesNames as $sDepModuleName => $oXmlModule2){ $sXmlUIDs = implode('|', $oXmlModule->aXMlMetaInfosByModuleNames[$sDepModuleName]);