N°9906 Code clean up

This commit is contained in:
Timmy38
2026-09-11 10:54:16 +02:00
parent 0c4f208ca8
commit 34d26cde6c
3 changed files with 28 additions and 70 deletions

View File

@@ -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

View File

@@ -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<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 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
*

View File

@@ -1000,7 +1000,7 @@ EOF
$sTooltip .= '<div id="badge--'.$sId.'--cannot-be-installed" class="ibo-badge ibo-block ibo-is-orange" title="This extension cannot be installed because one or more dependencies are not satisfied." >cannot be installed</div>';
}
if ($aFlags['already_included']) {
$sTooltip .= '<div id="badge--'.$sId.'--already-part-of-itop" class="ibo-badge ibo-block ibo-is-yellow" title="All the modules included in this extension are already part of iTop package choices. To uninstall this extension, you have to delete its folder." >already part of iTop</div>';
$sTooltip .= '<div id="badge--'.$sId.'--already-part-of-itop" class="ibo-badge ibo-block ibo-is-yellow" title="All modules in this extension are already part of the iTop package. To uninstall this extension, you have to delete its folder." >already part of iTop</div>';
}
$sMetadata = '';