N°9134 - Detect extension with no code when installing by data feature removal extension

This commit is contained in:
lenaick.moreira
2026-08-24 16:24:21 +02:00
parent 9c6baaeef4
commit f40217db71
3 changed files with 11 additions and 6 deletions

View File

@@ -24,6 +24,7 @@ use ContextTag;
use CoreException;
use Dict;
use Exception;
use iTopExtension;
use MetaModel;
use MFCompiler;
use RunTimeEnvironment;
@@ -464,13 +465,14 @@ class DataFeatureRemovalController extends Controller
'extensions_not_uninstallable' => [],
];
foreach ($aAvailableExtensions as $sCode => &$aExtensionData) {
if (!isset($aSelectedExtensionsFromUI[$sCode])) {
$sCodeFromUI = $sCode !== '' ? $sCode : iTopExtension::CODE_NO_CODE;
if (!isset($aSelectedExtensionsFromUI[$sCodeFromUI])) {
continue;
}
if ($aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCode] !== 'on') {
if ($aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCodeFromUI] !== 'on') {
$aExtensionData['extra_flags']['selected'] = false;
$sLabel = $aAvailableExtensions[$sCode]['label'];
$sLabel = $aExtensionData['label'];
$this->aExtensionsToCheck['to_be_removed'][$sCode] = $sLabel;
if (! $this->bForcedUninstallation && $aExtensionData['extra_flags']['uninstallable']) {
$this->bForcedUninstallation = true;
@@ -478,9 +480,9 @@ class DataFeatureRemovalController extends Controller
if (false === $aExtensionData['extra_flags']['uninstallable'] || true === $aExtensionData['extra_flags']['remote']) {
$this->aExtensionsToCheck['extensions_not_uninstallable'][] = $sCode;
}
} elseif (!$aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCode] === 'on') {
} elseif (!$aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCodeFromUI] === 'on') {
$aExtensionData['extra_flags']['selected'] = true;
$sLabel = $aAvailableExtensions[$sCode]['label'];
$sLabel = $aExtensionData['label'];
$this->aExtensionsToCheck['to_be_installed'][$sCode] = $sLabel;
}
}

View File

@@ -13,6 +13,7 @@ class iTopExtension
public const SOURCE_WIZARD = 'datamodels';
public const SOURCE_MANUAL = 'extensions';
public const SOURCE_REMOTE = 'data';
public const CODE_NO_CODE = 'error-extension-code-missing';
/**
* @var string

View File

@@ -9,6 +9,7 @@ use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenu;
use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenuItem\PopoverMenuItemFactory;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
use Dict;
use iTopExtension;
use JSButtonItem;
class ExtensionDetails extends UIContentBlock
@@ -179,7 +180,8 @@ class ExtensionDetails extends UIContentBlock
protected function InitializeToggler()
{
$sName = 'aSelectedExtensions['.$this->GetCode().']';
$sCode = $this->GetCode() !== '' ? $this->GetCode() : iTopExtension::CODE_NO_CODE;
$sName = 'aSelectedExtensions['.$sCode.']';
$this->oToggler = new Toggler();
$this->oToggler->SetName($sName);
$this->oToggler->SetTooltip(Dict::Format('UI:Layout:ExtensionsDetails:TogglerTooltip', $this->GetLabel()));