mirror of
https://github.com/Combodo/iTop.git
synced 2026-08-24 23:28:18 +02:00
Compare commits
1 Commits
develop
...
feature/91
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a687bb5812 |
@@ -24,6 +24,7 @@ use ContextTag;
|
||||
use CoreException;
|
||||
use Dict;
|
||||
use Exception;
|
||||
use iTopExtension;
|
||||
use MetaModel;
|
||||
use MFCompiler;
|
||||
use RunTimeEnvironment;
|
||||
@@ -451,13 +452,14 @@ class DataFeatureRemovalController extends Controller
|
||||
'extensions_not_uninstallable' => [],
|
||||
];
|
||||
foreach ($aAvailableExtensions as $sCode => &$aExtensionData) {
|
||||
$sCode = $sCode !== '' ? $sCode : iTopExtension::CODE_NO_CODE;
|
||||
if (!isset($aSelectedExtensionsFromUI[$sCode])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCode] !== '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;
|
||||
@@ -467,7 +469,7 @@ class DataFeatureRemovalController extends Controller
|
||||
}
|
||||
} elseif (!$aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCode] === 'on') {
|
||||
$aExtensionData['extra_flags']['selected'] = true;
|
||||
$sLabel = $aAvailableExtensions[$sCode]['label'];
|
||||
$sLabel = $aExtensionData['label'];
|
||||
$this->aExtensionsToCheck['to_be_installed'][$sCode] = $sLabel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = 'no_code';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
@@ -193,7 +194,7 @@ class iTopExtension
|
||||
|
||||
public function HasCode(): bool
|
||||
{
|
||||
return $this->sCode !== '';
|
||||
return $this->sCode !== '' && $this->sCode !== self::CODE_NO_CODE;
|
||||
}
|
||||
|
||||
public function HasLabel(): bool
|
||||
|
||||
@@ -1330,7 +1330,8 @@ class RunTimeEnvironment
|
||||
$oExtensionsMap->DeclareExtensionAsRemoved($aRemovedExtensionCodes);
|
||||
|
||||
foreach ($oExtensionsMap->GetAllExtensions() as $oExtension) {
|
||||
$oExtension->MarkAsChosen(in_array($oExtension->sCode, $aSelectedExtensionCodes));
|
||||
$sExtensionCode = $oExtension->sCode !== '' ? $oExtension->sCode : iTopExtension::CODE_NO_CODE;
|
||||
$oExtension->MarkAsChosen(in_array($sExtensionCode, $aSelectedExtensionCodes));
|
||||
}
|
||||
|
||||
// Check that all the extensions have a code
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -2,15 +2,10 @@
|
||||
|
||||
namespace Combodo\iTop\Test\UnitTest\Setup;
|
||||
|
||||
use Combodo\iTop\DataFeatureRemoval\Service\DataFeatureRemoverExtensionService;
|
||||
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
||||
use Config;
|
||||
use CoreException;
|
||||
use DOMFormatException;
|
||||
use Exception;
|
||||
use iTopExtensionsMap;
|
||||
use RunTimeEnvironment;
|
||||
use utils;
|
||||
|
||||
class RunTimeEnvironmentTest extends ItopTestCase
|
||||
{
|
||||
@@ -20,7 +15,19 @@ class RunTimeEnvironmentTest extends ItopTestCase
|
||||
$this->RequireOnceItopFile('/setup/runtimeenv.class.inc.php');
|
||||
}
|
||||
|
||||
public function testDoCompileCallCheckExtensionsValidity(): void
|
||||
public function provideDoCompileCallCheckExtensionsValidity(): array
|
||||
{
|
||||
$this->RequireOnceItopFile('/approot.inc.php');
|
||||
$this->RequireOnceItopFile('/setup/itopextension.class.inc.php');
|
||||
|
||||
return [
|
||||
'setup call DoCompile with empty string' => [['']],
|
||||
'data feature removal call DoCompile with fake code' => [[\iTopExtension::CODE_NO_CODE]],
|
||||
];
|
||||
}
|
||||
|
||||
/** @dataProvider provideDoCompileCallCheckExtensionsValidity */
|
||||
public function testDoCompileCallCheckExtensionsValidity(array $aSelectedExtensionCodes): void
|
||||
{
|
||||
[$sEnvironment, $sExtensionsDirRelative] = $this->CreateFixtureContext('env-missing-label-');
|
||||
|
||||
@@ -45,7 +52,7 @@ XML;
|
||||
$this->expectException(CoreException::class);
|
||||
|
||||
$oExtensionMap->expects($this->once())->method('CheckExtensionsValidity')->willThrowException(new CoreException(''));
|
||||
$oRuntimeEnvironment->DoCompile([""], [], [], false);
|
||||
$oRuntimeEnvironment->DoCompile($aSelectedExtensionCodes, aRemovedExtensionCodes: [], aSelectedModules: []);
|
||||
}
|
||||
|
||||
private function CreateFixtureContext(string $sEnvPrefix): array
|
||||
|
||||
Reference in New Issue
Block a user