AddLinkedStylesheet(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/css/DataFeatureRemoval.css'); $this->AddLinkedScript(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/js/DataFeatureRemoval.js'); $aParams['sTransactionId'] = utils::GetNewTransactionId(); $this->AddFeatureParams($aParams); $this->AddAnalyzeParams($aParams); $aParams['DataFeatureRemovalErrorMessage'] = $sErrorMessage; $this->DisplayPage($aParams); } public function AddFeatureParams(array &$aParams) { $aParams['aExtensions'] = $this->GetExtensionsTable(); $aParams['sModule'] = DataFeatureRemovalHelper::MODULE_NAME; } public function AddAnalyzeParams(array &$aParams) { $iTotalCount = 0; $aData = []; $aColumns = []; foreach (DataFeatureRemoverAuditRuleService::GetInstance()->ReadCheckRules() as $oRule) { $sContent = $oRule->Get('class_name'); $sModuleName = MetaModel::GetModuleName($sContent); $aExtensions = DataFeatureRemoverExtensionService::GetInstance()->GetIncludingExtensions($sModuleName); $sExtensions = implode(' ', $aExtensions); $sTypeName = $oRule->Get('rule_name'); $sTypeDesc = \Dict::S("DataFeatureRemoval:Table:Analysis:RemovalType:$sTypeName"); $iCount = $oRule->Get('count'); $iTotalCount += $iCount; $aColumns = ['ClassName', 'RemovalType','FeatureName','Occurence']; $aData[] = [ <<$sContent HTML, <<$sTypeDesc HTML, <<$sExtensions HTML, <<$iCount HTML, ]; } $aParams['aCheckRules'] = $this->GetTableData('Analysis', $aColumns, $aData); $aParams['rule_count'] = $iTotalCount; } public function OperationAnalyze() { $aSelectedExtensionsFromUI = utils::ReadPostedParam('aExtensions', []); $this->aSelectedExtensionsForCheck = []; foreach ($aSelectedExtensionsFromUI as $sCode => $aData) { $sValue = $aData['enable'] ?? 'off'; if (($sValue) === 'on') { $this->aSelectedExtensionsForCheck[] = $sCode; } } $this->m_sOperation = 'Main'; try { $this->Analyze(); $this->OperationMain(); } catch (Exception $e) { \IssueLog::Error(__METHOD__, null, ['stack' => $e->getTraceAsString(), 'exception' => $e->getMessage()]); $this->OperationMain($e->getMessage()); } } private function GetExtensionsTable(): array { $aExtensions = []; $aColumns = ['', 'Version', 'Name', 'Code']; $this->aSelectedExtensionsForCheck = DataFeatureRemoverExtensionService::GetInstance()->ReadAuditedExtensions(); foreach (DataFeatureRemoverExtensionService::GetInstance()->ReadItopExtensions() as $sCode => $oExtension) { /** @var \iTopExtension $oExtension */ $sChecked = "checked"; $sDisabledHtml = ''; if ($oExtension->bRemovedFromDisk) { $sDisabledHtml = 'disabled=""'; } elseif (! array_key_exists($sCode, $this->aSelectedExtensionsForCheck)) { $sChecked = ""; } $sLabel = $oExtension->sLabel; $sVersion = $oExtension->sVersion; $sIdEnable = "aExtensions[$sCode][enable]"; $aExtensions[] = [ << HTML, <<$sVersion HTML, <<$sLabel HTML, <<$sCode HTML, ]; } return $this->GetTableData('Extensions', $aColumns, $aExtensions); } public function GetTableData(string $sTableName, array $aColumns, array $aData): array { if (empty($aData)) { return [ 'Type' => 'Table', 'Columns' => [['label' => '']], 'Data' => [[ Dict::S('DbCleaner:Table:Empty')]], ]; } $aNewColumns = []; foreach ($aColumns as $sColumn) { $aNewColumns[] = ['label' => Dict::S("DataFeatureRemoval:Table:$sTableName:$sColumn", $sColumn)]; } $aColumns = $aNewColumns; return [ 'Type' => 'Table', 'Columns' => $aColumns, 'Data' => $aData, ]; } private function Analyze() { DataFeatureRemoverExtensionService::GetInstance()->SaveExtensions($this->aSelectedExtensionsForCheck); $sSourceEnvt = \MetaModel::GetEnvironment(); $oDryRemovalRuntimeEnvironment = new DryRemovalRuntimeEnvironment(); $oDryRemovalRuntimeEnvironment->Prepare($sSourceEnvt, $this->aSelectedExtensionsForCheck); $oDryRemovalRuntimeEnvironment->CompileFrom($sSourceEnvt); $oSetupAudit = new SetupAudit($sSourceEnvt, DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV); $this->Save($oSetupAudit->GetIssues()); } private function Save(array $aGetRemovedClasses) { \IssueLog::Debug(__METHOD__, null, ['aGetRemovedClasses' => $aGetRemovedClasses]); DataFeatureRemoverAuditRuleService::GetInstance()->SaveChecks($aGetRemovedClasses); } }