Skip to content

Commit 8f47ca0

Browse files
authored
N°8864 list extensions installation in setup recap
1 parent f9a1b44 commit 8f47ca0

File tree

6 files changed

+170
-22
lines changed

6 files changed

+170
-22
lines changed

setup/runtimeenv.class.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1029,4 +1029,4 @@ public function CheckMetaModel()
10291029

10301030
return sprintf("Checked %d classes in %.1f ms. No error found.\n", $iCount, $fDuration * 1000.0);
10311031
}
1032-
} // End of class
1032+
} // End of class

setup/wizardsteps.class.inc.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,52 @@ public function GetPossibleSteps()
13681368
return ['WizStepModulesChoice', 'WizStepSummary'];
13691369
}
13701370

1371+
public function GetAddedAndRemovedExtensions($aSelectedExtensions)
1372+
{
1373+
$aExtensionsAdded = [];
1374+
$aExtensionsRemoved = [];
1375+
$aExtensionsNotUninstallable = [];
1376+
foreach ($this->oExtensionsMap->GetAllExtensionsWithPreviouslyInstalled() as $oExtension) {
1377+
/* @var \iTopExtension $oExtension */
1378+
$bSelected = in_array($oExtension->sCode, $aSelectedExtensions);
1379+
if ($oExtension->bInstalled && !$bSelected) {
1380+
$aExtensionsRemoved[$oExtension->sCode] = $oExtension->sLabel;
1381+
if (!$oExtension->CanBeUninstalled()) {
1382+
$aExtensionsNotUninstallable[$oExtension->sCode] = true;
1383+
}
1384+
} elseif (!$oExtension->bInstalled && $bSelected) {
1385+
$aExtensionsAdded[$oExtension->sCode] = $oExtension->sLabel;
1386+
}
1387+
}
1388+
1389+
$sExtensionsAdded = '';
1390+
if (count($aExtensionsAdded) > 0) {
1391+
$sExtensionsAdded = '<ul>';
1392+
foreach ($aExtensionsAdded as $sExtensionCode) {
1393+
$sExtensionsAdded .= '<li>'.$sExtensionCode.'</li>';
1394+
}
1395+
$sExtensionsAdded .= '</ul>';
1396+
} else {
1397+
$sExtensionsAdded = '<ul><li>No extension added.</li></ul>';
1398+
}
1399+
1400+
$sExtensionsRemoved = '';
1401+
if (count($aExtensionsRemoved) > 0) {
1402+
$sExtensionsRemoved = '<ul>';
1403+
foreach ($aExtensionsRemoved as $sCode => $sExtensionCode) {
1404+
$sForcedUninstall = '';
1405+
if (isset($aExtensionsNotUninstallable[$sCode])) {
1406+
$sForcedUninstall = ' (forced uninstallation)';
1407+
}
1408+
$sExtensionsRemoved .= '<li>'.$sExtensionCode.$sForcedUninstall.'</li>';
1409+
}
1410+
$sExtensionsRemoved .= '</ul>';
1411+
} else {
1412+
$sExtensionsRemoved = '<ul><li>No extension removed.</li></ul>';
1413+
}
1414+
return [$sExtensionsAdded, $sExtensionsRemoved];
1415+
}
1416+
13711417
public function ProcessParams($bMoveForward = true)
13721418
{
13731419
// Accumulates the selected modules:
@@ -1397,9 +1443,14 @@ public function ProcessParams($bMoveForward = true)
13971443
if (class_exists('CreateITILProfilesInstaller')) {
13981444
$this->oWizard->SetParameter('old_addon', true);
13991445
}
1446+
1447+
[$sExtensionsAdded, $sExtensionsRemoved] = $this->GetAddedAndRemovedExtensions($aExtensions);
1448+
14001449
$this->oWizard->SetParameter('selected_modules', json_encode(array_keys($aModules)));
14011450
$this->oWizard->SetParameter('selected_extensions', json_encode($aExtensions));
14021451
$this->oWizard->SetParameter('display_choices', $sDisplayChoices);
1452+
$this->oWizard->SetParameter('extensions_added', $sExtensionsAdded);
1453+
$this->oWizard->SetParameter('extensions_removed', $sExtensionsRemoved);
14031454
return ['class' => 'WizStepSummary', 'state' => ''];
14041455
}
14051456

@@ -2217,6 +2268,14 @@ public function Display(WebPage $oPage)
22172268

22182269
$oPage->add('<fieldset id="summary"><legend>Installation Parameters</legend>');
22192270
$oPage->add('<div id="params_summary">');
2271+
2272+
$oPage->add('<div class="closed"><span class="title ibo-setup-summary-title">Extensions to be installed</span>');
2273+
$oPage->add($this->oWizard->GetParameter('extensions_added'));
2274+
$oPage->add('</div>');
2275+
$oPage->add('<div class="closed"><span class="title ibo-setup-summary-title">Extensions to be uninstalled</span>');
2276+
$oPage->add($this->oWizard->GetParameter('extensions_removed'));
2277+
$oPage->add('</div>');
2278+
22202279
$oPage->add('<div class="closed"><span class="title ibo-setup-summary-title">Database Parameters</span><ul>');
22212280
$oPage->add('<li>Server Name: '.$aInstallParams['database']['server'].'</li>');
22222281
$oPage->add('<li>DB User Name: '.$aInstallParams['database']['user'].'</li>');

tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-joker.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,26 @@
77
*
88
*
99
*/
10-
$MySettings = array(
11-
12-
10+
$MySettings = [
1311

1412
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
1513
// default: ''
1614
'app_root_url' => 'http://%server(SERVER_NAME)?:localhost%/itop/iTop/',
1715

18-
19-
);
16+
];
2017

2118
/**
2219
*
2320
* Modules specific settings
2421
*
2522
*/
26-
$MyModuleSettings = array(
27-
);
23+
$MyModuleSettings = [
24+
];
2825

2926
/**
3027
*
3128
* Data model modules to be loaded. Names are specified as relative paths
3229
*
3330
*/
34-
$MyModules = array(
35-
);
36-
?>
31+
$MyModules = [
32+
];

tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-var.php

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,26 @@
77
*
88
*
99
*/
10-
$MySettings = array(
11-
12-
10+
$MySettings = [
1311

1412
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
1513
// default: ''
16-
'app_root_url' => 'http://' . (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost') . '/itop/iTop/',
17-
14+
'app_root_url' => 'http://'.(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost').'/itop/iTop/',
1815

19-
);
16+
];
2017

2118
/**
2219
*
2320
* Modules specific settings
2421
*
2522
*/
26-
$MyModuleSettings = array(
27-
);
23+
$MyModuleSettings = [
24+
];
2825

2926
/**
3027
*
3128
* Data model modules to be loaded. Names are specified as relative paths
3229
*
3330
*/
34-
$MyModules = array(
35-
);
36-
?>
31+
$MyModules = [
32+
];

tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,99 @@ public function testComputeChoiceFlags($aExtensions, $bUpgrade, $bDisableUninsta
257257
$this->assertEquals($aExpectedFlags, $aFlags);
258258
}
259259

260+
public function ProviderGetAddedAndRemovedExtensions()
261+
{
262+
return [
263+
'no extensions' => [
264+
'aExtensions' => [],
265+
266+
'aSelected' => [],
267+
'sExpectedAddedList' => '<ul><li>No extension added.</li></ul>',
268+
'sExpectedRemovedList' => '<ul><li>No extension removed.</li></ul>',
269+
],
270+
'no extensions selected' => [
271+
'aExtensions' => [
272+
'itop-ext1' => [
273+
'installed' => false,
274+
],
275+
],
276+
'aSelected' => [],
277+
'sExpectedAddedList' => '<ul><li>No extension added.</li></ul>',
278+
'sExpectedRemovedList' => '<ul><li>No extension removed.</li></ul>',
279+
],
280+
'no extensions removed' => [
281+
'aExtensions' => [
282+
'itop-ext1' => [
283+
'installed' => true,
284+
],
285+
],
286+
'aSelected' => ['itop-ext1'],
287+
'sExpectedAddedList' => '<ul><li>No extension added.</li></ul>',
288+
'sExpectedRemovedList' => '<ul><li>No extension removed.</li></ul>',
289+
],
290+
'One added extension' => [
291+
'aExtensions' => [
292+
'itop-ext1' => [
293+
'installed' => false,
294+
],
295+
],
296+
'aSelected' => ['itop-ext1'],
297+
'sExpectedAddedList' => '<ul><li>itop-ext1</li></ul>',
298+
'sExpectedRemovedList' => '<ul><li>No extension removed.</li></ul>',
299+
],
300+
'One removed extension' => [
301+
'aExtensions' => [
302+
'itop-ext1' => [
303+
'installed' => true,
304+
],
305+
],
306+
'aSelected' => [],
307+
'sExpectedAddedList' => '<ul><li>No extension added.</li></ul>',
308+
'sExpectedRemovedList' => '<ul><li>itop-ext1</li></ul>',
309+
],
310+
'Forced removed extension' => [
311+
'aExtensions' => [
312+
'itop-ext1' => [
313+
'installed' => true,
314+
'uninstallable' => false,
315+
],
316+
],
317+
'aSelected' => [],
318+
'sExpectedAddedList' => '<ul><li>No extension added.</li></ul>',
319+
'sExpectedRemovedList' => '<ul><li>itop-ext1 (forced uninstallation)</li></ul>',
320+
],
321+
'added and removed extensions' => [
322+
'aExtensions' => [
323+
'itop-ext-added1' => [
324+
'installed' => false,
325+
],
326+
'itop-ext-added2' => [
327+
'installed' => false,
328+
],
329+
'itop-ext-removed1' => [
330+
'installed' => true,
331+
],
332+
'itop-ext-removed2' => [
333+
'installed' => true,
334+
],
335+
],
336+
'aSelected' => ['itop-ext-added1', 'itop-ext-added2'],
337+
'sExpectedAddedList' => '<ul><li>itop-ext-added1</li><li>itop-ext-added2</li></ul>',
338+
'sExpectedRemovedList' => '<ul><li>itop-ext-removed1</li><li>itop-ext-removed2</li></ul>',
339+
],
340+
341+
];
342+
}
343+
344+
/**
345+
* @dataProvider ProviderGetAddedAndRemovedExtensions
346+
*/
347+
public function testGetAddedAndRemovedExtensions($aExtensions, $aSelectedExtensions, $sExpectedAddedList, $sExpectedRemovedList)
348+
{
349+
$this->oStep->setExtensionMap(iTopExtensionsMapFake::createFromArray($aExtensions));
350+
[$sAddedList, $sRemovedList] = $this->oStep->GetAddedAndRemovedExtensions($aSelectedExtensions);
351+
$this->assertEquals($sExpectedAddedList, $sAddedList);
352+
$this->assertEquals($sExpectedRemovedList, $sRemovedList);
353+
}
354+
260355
}

tests/php-unit-tests/unitary-tests/setup/iTopExtensionsMapFake.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ public function __construct($sFromEnvironment = 'production', $aExtraDirs = [])
1212
public static function createFromArray($aExtensions)
1313
{
1414
$oMap = new static();
15+
1516
foreach ($aExtensions as $sCode => $aExtension) {
1617
$oExtension = new iTopExtension();
1718
$oExtension->sCode = $sCode;
19+
$oExtension->sLabel = $sCode;
1820
$oExtension->bInstalled = $aExtension['installed'];
1921
$oExtension->aModules = $aExtension['modules'] ?? [];
2022
$oExtension->bCanBeUninstalled = $aExtension['uninstallable'] ?? null;

0 commit comments

Comments
 (0)