mirror of
https://github.com/Combodo/iTop.git
synced 2026-08-22 22:28:19 +02:00
N°8908 Use it in ext mgmt too
This commit is contained in:
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user