From 9fbc53cf007d787a329186810fbb4e8c8f4aff73 Mon Sep 17 00:00:00 2001 From: Lenaick Date: Fri, 17 Jul 2026 09:42:58 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B09679=20-=20Forced=20uninstallation=20is?= =?UTF-8?q?=20not=20logged=20when=20done=20by=20extensions=20management=20?= =?UTF-8?q?(#956)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/DataFeatureRemovalController.php | 7 +++++++ setup/wizardsteps/WizStepInstall.php | 16 ++++++++++++++++ setup/wizardsteps/WizStepLandingBeforeAudit.php | 2 +- setup/wizardsteps/WizStepSummary.php | 2 +- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php b/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php index 9c2b098d03..df201f23df 100644 --- a/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php +++ b/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php @@ -127,6 +127,9 @@ class DataFeatureRemovalController extends Controller $aRemovedExtensions = $this->aExtensionsToCheck['to_be_removed']; $aHiddenInputs['removed_extensions'] = $this->ConvertIntoSetupFormat($aRemovedExtensions); + + $aExtensionsNotUninstallable = $this->aExtensionsToCheck['extensions_not_uninstallable']; + $aHiddenInputs['extensions_not_uninstallable'] = $this->ConvertIntoSetupFormat($aExtensionsNotUninstallable); } $aParams['aAddedExtensions'] = $aAddedExtensions; @@ -425,6 +428,7 @@ class DataFeatureRemovalController extends Controller $this->aExtensionsToCheck = [ 'to_be_installed' => [], 'to_be_removed' => [], + 'extensions_not_uninstallable' => [], ]; foreach ($aAvailableExtensions as $sCode => &$aExtensionData) { if (!isset($aSelectedExtensionsFromUI[$sCode])) { @@ -438,6 +442,9 @@ class DataFeatureRemovalController extends Controller if (! $this->bForcedUninstallation && $aExtensionData['extra_flags']['uninstallable']) { $this->bForcedUninstallation = true; } + if (false === $aExtensionData['extra_flags']['uninstallable']) { + $this->aExtensionsToCheck['extensions_not_uninstallable'][] = $sCode; + } } elseif (!$aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCode] === 'on') { $aExtensionData['extra_flags']['selected'] = true; $sLabel = $aAvailableExtensions[$sCode]['label']; diff --git a/setup/wizardsteps/WizStepInstall.php b/setup/wizardsteps/WizStepInstall.php index 6ea4d5ab57..ca49ecba2d 100644 --- a/setup/wizardsteps/WizStepInstall.php +++ b/setup/wizardsteps/WizStepInstall.php @@ -112,6 +112,22 @@ JS); return; } + // When the setup reach this step, it already checked whether extensions were uninstallable (during WizStepModulesChoice or combodo-data-feature-removal). We only need to log what has been done. + if ($this->oWizard->GetParameter('force-uninstall', false)) { + SetupLog::Warning("User disabled uninstallation checks"); + } + $aExtensionsRemoved = json_decode($this->oWizard->GetParameter('removed_extensions'), true) ?? []; + $aExtensionsNotUninstallable = json_decode($this->oWizard->GetParameter('extensions_not_uninstallable'), true) ?? []; + $aExtensionsForceUninstalled = []; + foreach ($aExtensionsRemoved as $sExtensionCode => $sLabel) { + if (in_array($sExtensionCode, $aExtensionsNotUninstallable)) { + $aExtensionsForceUninstalled[] = $sExtensionCode; + } + } + if (count($aExtensionsForceUninstalled)) { + SetupLog::Warning("Extensions uninstalled forcefully : ".implode(',', $aExtensionsForceUninstalled)); + } + $oPage->add_ready_script(<<SetParameter('db_tls_enabled', $this->oConfig->Get('db_tls.enabled')); $oWizard->SetParameter('db_tls_ca', $this->oConfig->Get('db_tls.ca') ?? ''); $oWizard->SetParameter('display_choices', ''); - $oWizard->SetParameter('extensions_not_uninstallable', '[]'); + $oWizard->SaveParameter('extensions_not_uninstallable', '[]'); $oWizard->SaveParameter('use_symbolic_links', MFCompiler::UseSymbolicLinks()); $oWizard->SaveParameter('force-uninstall', false); $oWizard->SaveParameter('skip_wizard', false); diff --git a/setup/wizardsteps/WizStepSummary.php b/setup/wizardsteps/WizStepSummary.php index 4357a74e9b..034e9925ac 100644 --- a/setup/wizardsteps/WizStepSummary.php +++ b/setup/wizardsteps/WizStepSummary.php @@ -116,7 +116,7 @@ class WizStepSummary extends AbstractWizStepInstall $oPage->add('
Extensions to be uninstalled'); $aExtensionsRemoved = json_decode($this->oWizard->GetParameter('removed_extensions'), true) ?? []; - $aExtensionsNotUninstallable = json_decode($this->oWizard->GetParameter('extensions_not_uninstallable')) ?? []; + $aExtensionsNotUninstallable = json_decode($this->oWizard->GetParameter('extensions_not_uninstallable'), true) ?? []; if (count($aExtensionsRemoved) > 0) { $sExtensionsRemoved = '
    '; foreach ($aExtensionsRemoved as $sExtensionCode => $sLabel) {