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 f7059412d5..dfdd3d98c3 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 @@ -22,6 +22,7 @@ use Dict; use Exception; use IssueLog; use MetaModel; +use SetupUtils; use utils; class DataFeatureRemovalController extends Controller @@ -97,6 +98,50 @@ class DataFeatureRemovalController extends Controller $this->aCountClassesToCleanup = $aGetRemovedClasses; } + public function OperationAnalysisResult(): void + { + $aParams = []; + + if (SetupUtils::IsSessionSetupTokenValid()) { + //from setup wizard/mtp + SetupUtils::EraseSetupToken(); + } else { + //from same module + $this->ValidateTransactionId(); + } + + $sSourceEnv = MetaModel::GetEnvironment(); + $oSetupAudit = new SetupAudit($sSourceEnv); + $aGetRemovedClasses = array_keys($oSetupAudit->RunDataAudit()); + IssueLog::Debug(__METHOD__, null, ['aGetRemovedClasses' => $aGetRemovedClasses]); + + $oDataCleanupService = new DataCleanupService(); + $aDeletionPlanSummaryEntities = $oDataCleanupService->GetCleanupSummary($aGetRemovedClasses); + $aColumns = ['Class', 'DeleteCount' , 'UpdateCount', 'IssueCount']; + $aRows = []; + $iQueryCount = 0; + $bHasIssues = false; + foreach ($aDeletionPlanSummaryEntities as $oDeletionPlanSummaryEntity) { + $aRows[] = [ + $oDeletionPlanSummaryEntity->sClass, + $oDeletionPlanSummaryEntity->iDeleteCount, + $oDeletionPlanSummaryEntity->iUpdateCount, + $oDeletionPlanSummaryEntity->iIssueCount, + ]; + $bHasIssues |= ($oDeletionPlanSummaryEntity->iIssueCount !== 0); + $iQueryCount += $oDeletionPlanSummaryEntity->iDeleteCount; + $iQueryCount += $oDeletionPlanSummaryEntity->iUpdateCount; + } + + $aParams['sTransactionId'] = utils::GetNewTransactionId(); + $aParams['aDeletionPlanSummary'] = $this->GetTableData('Extensions', $aColumns, $aRows); + $aParams['aClasses'] = $aGetRemovedClasses; + $aParams['iQueryCount'] = $iQueryCount; + $aParams['bDeletionPossible'] = !$bHasIssues; + + $this->DisplayPage($aParams); + } + public function OperationDeletionPlan(): void { $aParams = []; diff --git a/datamodels/2.x/combodo-data-feature-removal/templates/AnalysisResult.html.twig b/datamodels/2.x/combodo-data-feature-removal/templates/AnalysisResult.html.twig new file mode 100644 index 0000000000..c37bff85a6 --- /dev/null +++ b/datamodels/2.x/combodo-data-feature-removal/templates/AnalysisResult.html.twig @@ -0,0 +1,29 @@ +{# @copyright Copyright (C) 2010-2026 Combodo SARL #} +{# @license http://opensource.org/licenses/AGPL-3.0 #} + +{% UIPanel ForInformation { sTitle:'DataFeatureRemoval:DeletionPlan:Title'|dict_s, sSubTitle: 'DataFeatureRemoval:DeletionPlan:SubTitle'|dict_format(iQueryCount) } %} + {% UIDataTable ForForm { sRef:'aDeletionPlanSummary', aColumns:aDeletionPlanSummary.Columns, aData:aDeletionPlanSummary.Data} %}{% EndUIDataTable %} +{% EndUIPanel %} + +{% if bDeletionPossible %} + {% UIForm Standard {} %} + {% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %} + {% UIInput ForHidden { sName:'operation', sValue:'DoDeletion'} %} + {% for sKey, sClass in aClasses %} + {% UIInput ForHidden { sName:"classes[" ~ sKey ~ "]", sValue:sClass } %} + {% endfor %} + {% UIToolbar ForButton {} %} + {% UIButton ForPrimaryAction {sLabel:'UI:Button:DoDeletion'|dict_s, sName:'btn_deletion', sId:'btn_deletion', bIsSubmit:true} %} + {% EndUIToolbar %} + {% EndUIForm %} +{% else %} + {{ 'DataFeatureRemoval:DeletionPlan:Error:Issues'|dict_s }} +{% endif %} + +{% UIForm Standard {} %} + {% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %} + {% UIInput ForHidden { sName:'operation', sValue:'Main'} %} + {% UIToolbar ForButton {} %} + {% UIButton ForPrimaryAction {sLabel:'UI:Button:BackToMain'|dict_s, sName:'btn_back', sId:'btn_back', bIsSubmit:true} %} + {% EndUIToolbar %} +{% EndUIForm %} \ No newline at end of file diff --git a/setup/wizardsteps/WizStepDataAudit.php b/setup/wizardsteps/WizStepDataAudit.php index 43a1e8ce99..9ee68c2def 100644 --- a/setup/wizardsteps/WizStepDataAudit.php +++ b/setup/wizardsteps/WizStepDataAudit.php @@ -18,6 +18,7 @@ * You should have received a copy of the GNU Affero General Public License */ +use Combodo\iTop\Application\Helper\Session; use Combodo\iTop\Application\WebPage\WebPage; require_once(APPROOT.'setup/sequencers/DataAuditSequencer.php'); @@ -112,11 +113,12 @@ JS); INPUT; } - + $sUID = Session::Get('setup_token'); $oPage->add( << - + + $aHiddenRemovedExtensionInputs HTML diff --git a/setup/wizardsteps/WizStepModulesChoice.php b/setup/wizardsteps/WizStepModulesChoice.php index b7bb07884d..8474588d69 100644 --- a/setup/wizardsteps/WizStepModulesChoice.php +++ b/setup/wizardsteps/WizStepModulesChoice.php @@ -509,6 +509,7 @@ EOF $sDisplayChoices .= '