N°8806 - improve GetMFModulesToCompile to handle extensions and installation choices on all setup that use compileFrom (MTP, CoreUpdate, Hub, DryRemoval)

This commit is contained in:
odain
2026-04-09 14:13:16 +02:00
parent 20e0d2dec6
commit 3e57765607
6 changed files with 93 additions and 74 deletions

View File

@@ -6,6 +6,7 @@
*/
use Combodo\iTop\Setup\ModuleDependency\DependencyExpression;
use Combodo\iTop\Setup\ModuleDependency\Module;
require_once __DIR__.'/ModuleInstallationException.php';
require_once(APPROOT.'/setup/moduledependency/module.class.inc.php');
@@ -36,11 +37,12 @@ class InstallationChoicesToModuleConverter
* @param array<string> $aInstallationChoices
* @param array<string> $aSearchDirs
* @param string|null $sInstallationFilePath
* @param array|null $aExtensionDirs : module/extension dirs to load if they are compliant with choices
*
* @return array<string>
* @throws \ModuleInstallationException
*/
public function GetModules(array $aInstallationChoices, array $aSearchDirs, ?string $sInstallationFilePath = null): array
public function GetModules(array $aInstallationChoices, array $aSearchDirs, ?string $sInstallationFilePath = null, ?array $aExtensionDirs = null): array
{
$aPackageModules = $this->GetAllModules($aSearchDirs);
@@ -61,11 +63,28 @@ class InstallationChoicesToModuleConverter
foreach (array_keys($aPackageModules) as $sModuleId) {
list($sModuleName) = ModuleDiscovery::GetModuleName($sModuleId);
if (in_array($sModuleName, $aInstalledModuleNames)) {
$aInstalledModules[] = $sModuleId;
$aInstalledModules[$sModuleName] = $sModuleId;
}
}
return $aInstalledModules;
if (!is_null($aExtensionDirs)) {
foreach (array_keys($this->GetAllModules($aExtensionDirs)) as $sModuleId) {
$oModule = new Module($sModuleId);
$sPreviousModuleId = $aInstalledModules[$oModule->GetModuleName()] ?? null;
if (is_null($sPreviousModuleId)) {
$aInstalledModules[$oModule->GetModuleName()] = $sModuleId;
continue;
}
$oPreviousModule = new Module($sPreviousModuleId);
if (version_compare($oModule->GetVersion(), $oPreviousModule->GetVersion(), '>')) {
$aInstalledModules[$oModule->GetModuleName()] = $sModuleId;
}
}
}
return array_values($aInstalledModules);
}
/**