N°8908 Use it in ext mgmt too

This commit is contained in:
Timmy38
2026-07-31 09:41:25 +02:00
parent 899f87f163
commit 0c01be9d32
5 changed files with 113 additions and 72 deletions

View File

@@ -1707,6 +1707,74 @@ JS
return array_key_exists('itsm-designer-connector', $aModules);
}
/**
* Build a map of modules that belong to the package base scope.
*
* @param array $aAnalyzeInstallationModules Output from AnalyzeInstallation-like methods
* @param string $sSourceDir Base directory used as package scope
*
* @return array<string, bool>
*/
public static function GetBasePackageModules(array $aAnalyzeInstallationModules, string $sSourceDir): array
{
$aBasePackageModules = [];
$sNormalizedSourceDir = self::NormalizePathForComparison($sSourceDir);
if ($sNormalizedSourceDir === '') {
return $aBasePackageModules;
}
foreach ($aAnalyzeInstallationModules as $sModuleId => $aModuleInfo) {
if ($sModuleId === ROOT_MODULE) {
continue;
}
$sRootDir = $aModuleInfo['root_dir'] ?? '';
if ($sRootDir === '') {
continue;
}
$sModuleRootDir = self::NormalizePathForComparison($sRootDir);
if (utils::StartsWith($sModuleRootDir, $sNormalizedSourceDir)) {
$aBasePackageModules[$sModuleId] = true;
}
}
return $aBasePackageModules;
}
/**
* Returns true when all modules of a non-package extension are already included in base package modules.
*/
public static function IsIncludedInBasePackage(iTopExtensionsMap $oExtensionsMap, string $sExtensionCode, array $aBasePackageModules): bool
{
if ($sExtensionCode === '') {
return false;
}
$oExtension = $oExtensionsMap->GetFromExtensionCode($sExtensionCode);
if (($oExtension === null) || ($oExtension->sSource === iTopExtension::SOURCE_WIZARD)) {
return false;
}
$aModules = $oExtension->aModules ?? [];
if (!is_array($aModules) || empty($aModules)) {
return false;
}
foreach ($aModules as $sModuleId) {
if (!array_key_exists($sModuleId, $aBasePackageModules)) {
return false;
}
}
return true;
}
private static function NormalizePathForComparison(string $sPath): string
{
return rtrim(str_replace('\\', '/', $sPath), '/');
}
/**
* @param array $aModules List of available module codes
*