diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php
index 945e913225..2dd8a66d39 100644
--- a/setup/runtimeenv.class.inc.php
+++ b/setup/runtimeenv.class.inc.php
@@ -1029,4 +1029,4 @@ public function CheckMetaModel()
return sprintf("Checked %d classes in %.1f ms. No error found.\n", $iCount, $fDuration * 1000.0);
}
-} // End of class
\ No newline at end of file
+} // End of class
diff --git a/setup/wizardsteps.class.inc.php b/setup/wizardsteps.class.inc.php
index 148da3011e..88ce73756a 100644
--- a/setup/wizardsteps.class.inc.php
+++ b/setup/wizardsteps.class.inc.php
@@ -1368,6 +1368,52 @@ public function GetPossibleSteps()
return ['WizStepModulesChoice', 'WizStepSummary'];
}
+ public function GetAddedAndRemovedExtensions($aSelectedExtensions)
+ {
+ $aExtensionsAdded = [];
+ $aExtensionsRemoved = [];
+ $aExtensionsNotUninstallable = [];
+ foreach ($this->oExtensionsMap->GetAllExtensionsWithPreviouslyInstalled() as $oExtension) {
+ /* @var \iTopExtension $oExtension */
+ $bSelected = in_array($oExtension->sCode, $aSelectedExtensions);
+ if ($oExtension->bInstalled && !$bSelected) {
+ $aExtensionsRemoved[$oExtension->sCode] = $oExtension->sLabel;
+ if (!$oExtension->CanBeUninstalled()) {
+ $aExtensionsNotUninstallable[$oExtension->sCode] = true;
+ }
+ } elseif (!$oExtension->bInstalled && $bSelected) {
+ $aExtensionsAdded[$oExtension->sCode] = $oExtension->sLabel;
+ }
+ }
+
+ $sExtensionsAdded = '';
+ if (count($aExtensionsAdded) > 0) {
+ $sExtensionsAdded = '
';
+ foreach ($aExtensionsAdded as $sExtensionCode) {
+ $sExtensionsAdded .= '- '.$sExtensionCode.'
';
+ }
+ $sExtensionsAdded .= '
';
+ } else {
+ $sExtensionsAdded = '';
+ }
+
+ $sExtensionsRemoved = '';
+ if (count($aExtensionsRemoved) > 0) {
+ $sExtensionsRemoved = '';
+ foreach ($aExtensionsRemoved as $sCode => $sExtensionCode) {
+ $sForcedUninstall = '';
+ if (isset($aExtensionsNotUninstallable[$sCode])) {
+ $sForcedUninstall = ' (forced uninstallation)';
+ }
+ $sExtensionsRemoved .= '- '.$sExtensionCode.$sForcedUninstall.'
';
+ }
+ $sExtensionsRemoved .= '
';
+ } else {
+ $sExtensionsRemoved = '';
+ }
+ return [$sExtensionsAdded, $sExtensionsRemoved];
+ }
+
public function ProcessParams($bMoveForward = true)
{
// Accumulates the selected modules:
@@ -1397,9 +1443,14 @@ public function ProcessParams($bMoveForward = true)
if (class_exists('CreateITILProfilesInstaller')) {
$this->oWizard->SetParameter('old_addon', true);
}
+
+ [$sExtensionsAdded, $sExtensionsRemoved] = $this->GetAddedAndRemovedExtensions($aExtensions);
+
$this->oWizard->SetParameter('selected_modules', json_encode(array_keys($aModules)));
$this->oWizard->SetParameter('selected_extensions', json_encode($aExtensions));
$this->oWizard->SetParameter('display_choices', $sDisplayChoices);
+ $this->oWizard->SetParameter('extensions_added', $sExtensionsAdded);
+ $this->oWizard->SetParameter('extensions_removed', $sExtensionsRemoved);
return ['class' => 'WizStepSummary', 'state' => ''];
}
@@ -2217,6 +2268,14 @@ public function Display(WebPage $oPage)
$oPage->add('