diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php b/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php index a8340d7381..bdfecdf049 100644 --- a/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php +++ b/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php @@ -364,10 +364,8 @@ class DataFeatureRemovalController extends Controller private function GetAvailableExtensions(bool $bIncludePackageExtensions = false): array { $aExtensionsData = []; - $oExtensionMap = DataFeatureRemoverExtensionService::GetInstance()->GetExtensionMap(); - $aBasePackageModules = $this->GetBasePackageModules(); if ($bIncludePackageExtensions) { - $aExtensionsRef = $oExtensionMap->GetAllExtensionsWithPreviouslyInstalled(); + $aExtensionsRef = DataFeatureRemoverExtensionService::GetInstance()->GetExtensionMap()->GetAllExtensionsWithPreviouslyInstalled(); } else { $aExtensionsRef = DataFeatureRemoverExtensionService::GetInstance()->ReadItopExtensions(); } @@ -375,7 +373,7 @@ class DataFeatureRemovalController extends Controller foreach ($aExtensionsRef as $oExtension) { /** @var \iTopExtension $oExtension */ $aMetaData = [$oExtension->sVersion, $oExtension->GetExtensionSourceLabel(), $oExtension->sCode]; - $bIsPackageExtension = SetupUtils::IsIncludedInPackage($oExtension, $aBasePackageModules); + $bIsPackageExtension = $this->IsIncludedInPackage($oExtension); $aExtensionsData[$oExtension->sCode] = [ 'version' => $oExtension->sVersion, @@ -399,6 +397,29 @@ class DataFeatureRemovalController extends Controller return $aExtensionsData; } + /** + * Returns true when all modules of a non-package extension are already included in base package modules. + */ + public function IsIncludedInPackage(iTopExtension $oExtension): bool + { + if ($oExtension->sSource === iTopExtension::SOURCE_WIZARD) { + return false; + } + + $aModules = $oExtension->aModules ?? []; + if (!is_array($aModules) || empty($aModules)) { + return false; + } + + $aBasePackageModules = $this->GetBasePackageModules(); + foreach ($aModules as $sModuleId) { + if (!in_array($sModuleId, $aBasePackageModules)) { + return false; + } + } + return true; + } + private function GetBasePackageModules(): array { if ($this->aBasePackageModules !== null) { @@ -417,10 +438,9 @@ class DataFeatureRemovalController extends Controller $sSourceEnv = MetaModel::GetEnvironment(); $oRuntimeEnvironment = new RunTimeEnvironment($sSourceEnv, false); - $aSelectedModules = $oRuntimeEnvironment->GetModulesToLoadFromSelectedExtensions($oConfig, $aSelectedExtensions); - $this->aBasePackageModules = $aSelectedModules; - return $aSelectedModules; + $this->aBasePackageModules = $oRuntimeEnvironment->GetModulesToLoadFromSelectedExtensions($oConfig, $aSelectedExtensions); + return $this->aBasePackageModules; } private function GetExtensionsDiff(array $aAddedExtensions, array $aRemovedExtensions): array diff --git a/setup/setuputils.class.inc.php b/setup/setuputils.class.inc.php index 5c7c662a06..6ea940733b 100644 --- a/setup/setuputils.class.inc.php +++ b/setup/setuputils.class.inc.php @@ -1705,68 +1705,6 @@ JS return array_key_exists('itsm-designer-connector', $aModules); } - /** - * Build a map of module IDs that belong to the package base scope. - * - * @param array $aAnalyzeInstallationModules Output from AnalyzeInstallation method - * @param string $sSourceDir Base directory used as package scope - * - * @return array - */ - 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 IsIncludedInPackage(?iTopExtension $oExtension, array $aBasePackageModules): bool - { - 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 (!in_array($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 * diff --git a/setup/wizardsteps/WizStepModulesChoice.php b/setup/wizardsteps/WizStepModulesChoice.php index da113f760d..a6171ae19e 100644 --- a/setup/wizardsteps/WizStepModulesChoice.php +++ b/setup/wizardsteps/WizStepModulesChoice.php @@ -1000,7 +1000,7 @@ EOF $sTooltip .= '
cannot be installed
'; } if ($aFlags['already_included']) { - $sTooltip .= '
already part of iTop
'; + $sTooltip .= '
already part of iTop
'; } $sMetadata = '';