From 4895f953eb5711fa9874d532646ece8a7f2a5edd Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Tue, 10 Mar 2026 16:19:39 +0100 Subject: [PATCH] Analysis not stored anymore in DB --- .../composer.lock | 20 ++ ...datamodel.combodo-data-feature-removal.xml | 152 ------------- .../en.dict.combodo-data-feature-removal.php | 6 +- .../fr.dict.combodo-data-feature-removal.php | 2 - .../DataFeatureRemovalController.php | 205 ++++++++---------- .../DataFeatureRemoverAuditRuleService.php | 87 -------- .../DataFeatureRemoverExtensionService.php | 146 ------------- .../DataFeatureRemoverExtensionService.php | 81 +++++++ .../templates/ExtensionRemovalData.html.twig | 2 +- .../templates/Main.js.twig | 9 - .../templates/Main.ready.js.twig | 2 - .../vendor/autoload.php | 5 +- .../vendor/composer/autoload_classmap.php | 3 +- .../vendor/composer/autoload_static.php | 3 +- 14 files changed, 200 insertions(+), 523 deletions(-) create mode 100644 datamodels/2.x/combodo-data-feature-removal/composer.lock delete mode 100644 datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverAuditRuleService.php delete mode 100644 datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverExtensionService.php create mode 100644 datamodels/2.x/combodo-data-feature-removal/src/Service/DataFeatureRemoverExtensionService.php delete mode 100644 datamodels/2.x/combodo-data-feature-removal/templates/Main.js.twig delete mode 100644 datamodels/2.x/combodo-data-feature-removal/templates/Main.ready.js.twig diff --git a/datamodels/2.x/combodo-data-feature-removal/composer.lock b/datamodels/2.x/combodo-data-feature-removal/composer.lock new file mode 100644 index 0000000000..7245f27055 --- /dev/null +++ b/datamodels/2.x/combodo-data-feature-removal/composer.lock @@ -0,0 +1,20 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "b862a55cbf5448fb99f0905a4db6529b", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "composer-runtime-api": "^2.0" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/datamodels/2.x/combodo-data-feature-removal/datamodel.combodo-data-feature-removal.xml b/datamodels/2.x/combodo-data-feature-removal/datamodel.combodo-data-feature-removal.xml index 20970444fc..f85d4d0103 100644 --- a/datamodels/2.x/combodo-data-feature-removal/datamodel.combodo-data-feature-removal.xml +++ b/datamodels/2.x/combodo-data-feature-removal/datamodel.combodo-data-feature-removal.xml @@ -1,157 +1,5 @@ - - - - grant_by_profile - data_feature_removal_extension - - - - - - - - - - - - - extension_code - false - all - - - label - false - all - - - version - false - all - - - module_names - false - all - - - status - none - true - all - - - - - - - 10 - - - 20 - - - - - - 10 - - - 20 - - -
- - 10 - - - 20 - -
-
- -
- - - grant_by_profile - data_feature_removal_auditrule - - - - - - - - - - - - - - - rule_name - false - all - - - extension_code - false - all - - - class_name - none - true - all - - - count - 0 - all - - - - - - - 10 - - - 20 - - - 30 - - - - - - 10 - - - 20 - - - 30 - - -
- - 10 - - - 20 - - - 30 - -
-
- -
-
30 diff --git a/datamodels/2.x/combodo-data-feature-removal/dictionaries/en.dict.combodo-data-feature-removal.php b/datamodels/2.x/combodo-data-feature-removal/dictionaries/en.dict.combodo-data-feature-removal.php index 5876f3afee..becf11a285 100644 --- a/datamodels/2.x/combodo-data-feature-removal/dictionaries/en.dict.combodo-data-feature-removal.php +++ b/datamodels/2.x/combodo-data-feature-removal/dictionaries/en.dict.combodo-data-feature-removal.php @@ -30,7 +30,6 @@ Dict::Add('EN US', 'English', 'English', [ 'DataFeatureRemoval:DoDeletion:SubTitle' => 'Remove all the entries from the database', 'DataFeatureRemoval:Table:Analysis:ClassName' => 'Element to remove', - 'DataFeatureRemoval:Table:Analysis:RemovalType' => 'Type of element', 'DataFeatureRemoval:Table:Analysis:FeatureName' => 'Feature name', 'DataFeatureRemoval:Table:Analysis:Occurrence' => 'Occurrence', @@ -44,12 +43,11 @@ Dict::Add('EN US', 'English', 'English', [ 'UI:Action:ForceUninstall' => 'Force uninstall', 'UI:Action:MoreInfo' => 'More information', - 'DataFeatureRemoval:Table:Analysis:RemovalType:FINAL_CLASS' => 'Final class', 'DataFeatureRemoval:Table:Empty' => 'No data to remove', 'DataFeatureRemoval:Column:Class' => 'Class', - 'DataFeatureRemoval:Column:DeleteCount' => 'Delete count', - 'DataFeatureRemoval:Column:UpdateCount' => 'Update count', + 'DataFeatureRemoval:Column:DeleteCount' => 'Entries to delete', + 'DataFeatureRemoval:Column:UpdateCount' => 'Entries to update', 'DataFeatureRemoval:Column:Issue' => 'Issue', 'DataFeatureRemoval:Column:DeletedCount' => 'Deleted entries', diff --git a/datamodels/2.x/combodo-data-feature-removal/dictionaries/fr.dict.combodo-data-feature-removal.php b/datamodels/2.x/combodo-data-feature-removal/dictionaries/fr.dict.combodo-data-feature-removal.php index bb825f2e0a..9f5e550295 100644 --- a/datamodels/2.x/combodo-data-feature-removal/dictionaries/fr.dict.combodo-data-feature-removal.php +++ b/datamodels/2.x/combodo-data-feature-removal/dictionaries/fr.dict.combodo-data-feature-removal.php @@ -30,7 +30,6 @@ Dict::Add('FR FR', 'French', 'Français', [ 'DataFeatureRemoval:DoDeletion:SubTitle' => 'Remove all the entries from the database', 'DataFeatureRemoval:Table:Analysis:ClassName' => 'Element to remove', - 'DataFeatureRemoval:Table:Analysis:RemovalType' => 'Type of element', 'DataFeatureRemoval:Table:Analysis:FeatureName' => 'Feature name', 'DataFeatureRemoval:Table:Analysis:Occurrence' => 'Occurrence', @@ -44,7 +43,6 @@ Dict::Add('FR FR', 'French', 'Français', [ 'UI:Action:ForceUninstall' => 'Force uninstall', 'UI:Action:MoreInfo' => 'More information', - 'DataFeatureRemoval:Table:Analysis:RemovalType:FINAL_CLASS' => 'Final class', 'DataFeatureRemoval:Table:Empty' => 'No data to remove', 'DataFeatureRemoval:Column:Class' => 'Class', 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 3e12787555..1207169ab6 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 @@ -11,11 +11,9 @@ require_once APPROOT.'setup/feature_removal/SetupAudit.php'; require_once APPROOT.'setup/feature_removal/DryRemovalRuntimeEnvironment.php'; use Combodo\iTop\Application\TwigBase\Controller\Controller; -use Combodo\iTop\AuthentToken\Helper\TokenAuthLog; use Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalException; use Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalHelper; -use Combodo\iTop\DataFeatureRemoval\Model\DataFeatureRemoverAuditRuleService; -use Combodo\iTop\DataFeatureRemoval\Model\DataFeatureRemoverExtensionService; +use Combodo\iTop\DataFeatureRemoval\Service\DataFeatureRemoverExtensionService; use Combodo\iTop\DataFeatureRemoval\Service\DeletionPlanService; use Combodo\iTop\Setup\FeatureRemoval\DryRemovalRuntimeEnvironment; use Combodo\iTop\Setup\FeatureRemoval\SetupAudit; @@ -28,51 +26,38 @@ use utils; class DataFeatureRemovalController extends Controller { private array $aSelectedExtensionsForCheck = []; + private array $aCountClassesToCleanup = []; + private array $aAnalysisDataTable = []; public function OperationMain($sErrorMessage = null): void { $aParams = []; - $this->AddLinkedStylesheet(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/css/DataFeatureRemoval.css'); - $this->AddLinkedScript(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/js/DataFeatureRemoval.js'); - + $this->AddAnalyzeParams(); $aParams['sTransactionId'] = utils::GetNewTransactionId(); - $this->AddFeatureParams($aParams); - $this->AddAnalyzeParams($aParams); + $aParams['aExtensions'] = $this->GetExtensionsTable(); + $aParams['aAnalysisDataTable'] = $this->aAnalysisDataTable; + $aParams['aClasses'] = array_keys($this->aCountClassesToCleanup); $aParams['DataFeatureRemovalErrorMessage'] = $sErrorMessage; $aParams['bHasData'] = count($aParams['aClasses']) > 0; + + $this->AddLinkedStylesheet(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/css/DataFeatureRemoval.css'); + $this->AddLinkedScript(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/js/DataFeatureRemoval.js'); $this->DisplayPage($aParams); } - public function AddFeatureParams(array &$aParams): void + public function AddAnalyzeParams(): void { - $aParams['aExtensions'] = $this->GetExtensionsTable(); - $aParams['sModule'] = DataFeatureRemovalHelper::MODULE_NAME; - } - - public function AddAnalyzeParams(array &$aParams): void - { - $iTotalCount = 0; $aData = []; $aColumns = []; - $aClasses = []; - foreach (DataFeatureRemoverAuditRuleService::GetInstance()->ReadCheckRules() as $oRule) { - $sContent = $oRule->Get('class_name'); - $aClasses[] = $sContent; - $sModuleName = MetaModel::GetModuleName($sContent); + foreach ($this->aCountClassesToCleanup as $sClass => $iCount) { + $sModuleName = MetaModel::GetModuleName($sClass); $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','Occurrence']; + $aColumns = ['ClassName','FeatureName','Occurrence']; $aData[] = [ <<$sContent -HTML, - <<$sTypeDesc + HTML, <<$sExtensions @@ -83,9 +68,7 @@ HTML, ]; } - $aParams['aCheckRules'] = $this->GetTableData('Analysis', $aColumns, $aData); - $aParams['rule_count'] = $iTotalCount; - $aParams['aClasses'] = $aClasses; + $this->aAnalysisDataTable = $this->GetTableData('Analysis', $aColumns, $aData); } public function OperationAnalyze(): void @@ -103,7 +86,9 @@ HTML, $this->m_sOperation = 'Main'; try { - $this->Analyze(); + if (count($this->aSelectedExtensionsForCheck) > 0) { + $this->Analyze(); + } $this->OperationMain(); } catch (Exception $e) { IssueLog::Error(__METHOD__, null, ['stack' => $e->getTraceAsString(), 'exception' => $e->getMessage()]); @@ -111,88 +96,17 @@ HTML, } } - 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('DataFeatureRemoval:Table:Empty')]], - ]; - } - - $aNewColumns = []; - foreach ($aColumns as $sColumn) { - $aNewColumns[] = ['label' => Dict::S("DataFeatureRemoval:Table:$sTableName:$sColumn", Dict::S("DataFeatureRemoval:Column:$sColumn", $sColumn))]; - } - $aColumns = $aNewColumns; - - return [ - 'Type' => 'Table', - 'Columns' => $aColumns, - 'Data' => $aData, - ]; - } - private function Analyze(): void { - DataFeatureRemoverExtensionService::GetInstance()->SaveExtensions($this->aSelectedExtensionsForCheck); - - $sSourceEnvt = \MetaModel::GetEnvironment(); + $sSourceEnv = MetaModel::GetEnvironment(); $oDryRemovalRuntimeEnvironment = new DryRemovalRuntimeEnvironment(); - $oDryRemovalRuntimeEnvironment->Prepare($sSourceEnvt, $this->aSelectedExtensionsForCheck); - $oDryRemovalRuntimeEnvironment->CompileFrom($sSourceEnvt); + $oDryRemovalRuntimeEnvironment->Prepare($sSourceEnv, $this->aSelectedExtensionsForCheck); + $oDryRemovalRuntimeEnvironment->CompileFrom($sSourceEnv); - $oSetupAudit = new SetupAudit($sSourceEnvt, DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV); - $this->Save($oSetupAudit->GetIssues()); - } - - private function Save(array $aGetRemovedClasses): void - { + $oSetupAudit = new SetupAudit($sSourceEnv, DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV); + $aGetRemovedClasses = $oSetupAudit->GetIssues(); IssueLog::Debug(__METHOD__, null, ['aGetRemovedClasses' => $aGetRemovedClasses]); - - DataFeatureRemoverAuditRuleService::GetInstance()->SaveChecks($aGetRemovedClasses); + $this->aCountClassesToCleanup = $aGetRemovedClasses; } public function OperationDeletionPlan(): void @@ -244,11 +158,78 @@ HTML, $this->DisplayPage($aParams); } + /** + * Get installed extensions from disk + * + * @return array structure for twig datatable + */ + private function GetExtensionsTable(): array + { + $aExtensions = []; + $aColumns = ['', 'Version', 'Name', 'Code']; + + foreach (DataFeatureRemoverExtensionService::GetInstance()->ReadItopExtensions() as $sCode => $oExtension) { + /** @var \iTopExtension $oExtension */ + + $sChecked = ''; + $sDisabledHtml = ''; + if ($oExtension->bRemovedFromDisk) { + $sDisabledHtml = 'disabled=""'; + } elseif (in_array($sCode, $this->aSelectedExtensionsForCheck)) { + $sChecked = 'checked'; + } + + $sLabel = $oExtension->sLabel; + $sVersion = $oExtension->sVersion; + $sIdEnable = "aExtensions[$sCode][enable]"; + + $aExtensions[] = [ + << +HTML, + <<$sVersion +HTML, + <<$sLabel +HTML, + <<$sCode +HTML, + ]; + } + + return $this->GetTableData('Extensions', $aColumns, $aExtensions); + } + + private function GetTableData(string $sTableName, array $aColumns, array $aData): array + { + if (empty($aData)) { + return [ + 'Type' => 'Table', + 'Columns' => [['label' => '']], + 'Data' => [[ Dict::S('DataFeatureRemoval:Table:Empty')]], + ]; + } + + $aNewColumns = []; + foreach ($aColumns as $sColumn) { + $aNewColumns[] = ['label' => Dict::S("DataFeatureRemoval:Table:$sTableName:$sColumn", Dict::S("DataFeatureRemoval:Column:$sColumn", $sColumn))]; + } + $aColumns = $aNewColumns; + + return [ + 'Type' => 'Table', + 'Columns' => $aColumns, + 'Data' => $aData, + ]; + } + /** * @return void * @throws \Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalException */ - public function ValidateTransactionId(): void + private function ValidateTransactionId(): void { if (empty($_POST)) { return; diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverAuditRuleService.php b/datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverAuditRuleService.php deleted file mode 100644 index 17b5a81763..0000000000 --- a/datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverAuditRuleService.php +++ /dev/null @@ -1,87 +0,0 @@ -AllowAllData(); - $oSet = new DBObjectSet($oSearch); - - while (null != ($oObj = $oSet->Fetch())) { - $oObj->DBDelete(); - } - - foreach ($aGetRemovedClasses as $sClass => $iCount) { - $oObj = new DataFeatureRemoverAuditRule(); - $oObj->Set('rule_name', 'FINAL_CLASS'); - $oObj->Set('extension_code', $sClass); - $oObj->Set('class_name', $sClass); - $oObj->Set('count', $iCount); - $oObj->DBWrite(); - } - } - - /** - * @return array - * @throws \Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalException - */ - public function ReadCheckRules(): array - { - try { - $oSearch = DBObjectSearch::FromOQL('SELECT DataFeatureRemoverAuditRule', []); - $oSearch->AllowAllData(); - $oSet = new DBObjectSet($oSearch); - - $aRes = []; - while (null != ($oObj = $oSet->Fetch())) { - $aRes[] = $oObj; - } - - return $aRes; - } catch (Exception $e) { - throw new DataFeatureRemovalException(__FUNCTION__.' failed', 0, $e); - } - } -} diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverExtensionService.php b/datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverExtensionService.php deleted file mode 100644 index 5bed7c36eb..0000000000 --- a/datamodels/2.x/combodo-data-feature-removal/src/Model/DataFeatureRemoverExtensionService.php +++ /dev/null @@ -1,146 +0,0 @@ -ReadItopExtensions(); - - $oSearch = DBObjectSearch::FromOQL('SELECT DataFeatureRemoverExtension', []); - $oSearch->AllowAllData(); - $oSet = new DBObjectSet($oSearch); - - while (null != ($oObj = $oSet->Fetch())) { - $oObj->DBDelete(); - } - - foreach ($aSelectedExtensionsForCheck as $i => $sCode) { - $oObj = new DataFeatureRemoverExtension(); - $oObj->Set('extension_code', $sCode); - /** @var iTopExtension $oExtension */ - $oExtension = $this->aItopExtensions[$sCode]; - $oObj->Set('module_names', json_encode($oExtension->aModules)); - $oObj->Set('label', $oExtension->sLabel); - $oObj->Set('version', $oExtension->sVersion); - $oObj->DBWrite(); - } - } - - private array $aSelectedExtensions = []; - private array $aItopExtensions = []; - private array $aIncludingExtensionsByModuleName = []; - - /** - * @return array - * @throws \Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalException - */ - public function ReadAuditedExtensions(): array - { - if (count($this->aSelectedExtensions) == 0) { - try { - $oSearch = DBObjectSearch::FromOQL('SELECT DataFeatureRemoverExtension', []); - $oSearch->AllowAllData(); - $oSet = new DBObjectSet($oSearch); - - while (null != ($oObj = $oSet->Fetch())) { - $sCode = $oObj->Get('extension_code'); - $sLabel = $oObj->Get('label'); - $sVersion = $oObj->Get('version'); - - $sModuleNames = $oObj->Get('module_names'); - $aModuleNames = json_decode($sModuleNames, true); - if (is_array($aModuleNames) && count($aModuleNames) > 0) { - foreach ($aModuleNames as $sModuleName) { - $aExtensions = $this->aIncludingExtensionsByModuleName[$sModuleName] ?? []; - $aExtensions[] = "$sLabel / $sVersion"; - $this->aIncludingExtensionsByModuleName[$sModuleName] = $aExtensions; - - } - } - $this->aSelectedExtensions[$sCode] = $oObj; - } - } catch (Exception $e) { - throw new DataFeatureRemovalException(__FUNCTION__.' failed', 0, $e); - } - } - - \IssueLog::Debug(__METHOD__, null, ['aSelectedExtensionsForCheck' => $this->aSelectedExtensions]); - \IssueLog::Debug(__METHOD__, null, ['aIncludingExtensionsByModuleName' => $this->aIncludingExtensionsByModuleName]); - - return $this->aSelectedExtensions; - } - - /** - * @param string $sModuleName - * - * @return array - * @throws \Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalException - */ - public function GetIncludingExtensions(string $sModuleName): array - { - $this->ReadAuditedExtensions(); - return $this->aIncludingExtensionsByModuleName[$sModuleName] ?? []; - } - - /** - * @return iTopExtension[] - */ - public function ReadItopExtensions(): array - { - if (count($this->aItopExtensions) == 0) { - $oExtensionsMap = new iTopExtensionsMap(); - $oExtensionsMap->LoadInstalledExtensionsFromDatabase(MetaModel::GetConfig()); - $this->aItopExtensions = $oExtensionsMap->GetAllExtensionsToDisplayInSetup(true); - - uasort($this->aItopExtensions, function (iTopExtension $oiTopExtension1, iTopExtension $oiTopExtension2) { - return strcmp($oiTopExtension1->sLabel, $oiTopExtension2->sLabel); - }); - } - - return $this->aItopExtensions; - } -} diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Service/DataFeatureRemoverExtensionService.php b/datamodels/2.x/combodo-data-feature-removal/src/Service/DataFeatureRemoverExtensionService.php new file mode 100644 index 0000000000..df77c6bba7 --- /dev/null +++ b/datamodels/2.x/combodo-data-feature-removal/src/Service/DataFeatureRemoverExtensionService.php @@ -0,0 +1,81 @@ +aIncludingExtensionsByModuleName) === 0) { + foreach ($this->ReadiTopExtensions() as $oExtension) { + $aModuleNames = $oExtension->aModules; + if (is_array($aModuleNames) && count($aModuleNames) > 0) { + foreach ($aModuleNames as $sModule) { + $aExtensions = $this->aIncludingExtensionsByModuleName[$sModule] ?? []; + $aExtensions[] = $oExtension->sLabel.'/'.$oExtension->sVersion; + $this->aIncludingExtensionsByModuleName[$sModule] = $aExtensions; + } + } + } + } + + return $this->aIncludingExtensionsByModuleName[$sModuleName] ?? []; + } + + /** + * @return iTopExtension[] + */ + public function ReadItopExtensions(): array + { + if (count($this->aItopExtensions) === 0) { + $oExtensionsMap = new iTopExtensionsMap(); + $oExtensionsMap->LoadInstalledExtensionsFromDatabase(MetaModel::GetConfig()); + $this->aItopExtensions = $oExtensionsMap->GetAllExtensionsToDisplayInSetup(true); + + uasort($this->aItopExtensions, function (iTopExtension $oiTopExtension1, iTopExtension $oiTopExtension2) { + return strcmp($oiTopExtension1->sLabel, $oiTopExtension2->sLabel); + }); + } + + return $this->aItopExtensions; + } +} diff --git a/datamodels/2.x/combodo-data-feature-removal/templates/ExtensionRemovalData.html.twig b/datamodels/2.x/combodo-data-feature-removal/templates/ExtensionRemovalData.html.twig index f336f5504c..43cac91ef8 100644 --- a/datamodels/2.x/combodo-data-feature-removal/templates/ExtensionRemovalData.html.twig +++ b/datamodels/2.x/combodo-data-feature-removal/templates/ExtensionRemovalData.html.twig @@ -3,7 +3,7 @@ {% if bHasData %} {% UIPanel Neutral { sTitle:'DataFeatureRemoval:Analysis:Title'|dict_s, sSubTitle: 'DataFeatureRemoval:Analysis:SubTitle'|dict_format(rule_count) } %} - {% UIDataTable ForForm { sRef:'aCheckRules', aColumns:aCheckRules.Columns, aData:aCheckRules.Data} %}{% EndUIDataTable %} + {% UIDataTable ForForm { sRef:'aAnalysisDataTable', aColumns:aAnalysisDataTable.Columns, aData:aAnalysisDataTable.Data} %}{% EndUIDataTable %} {% EndUIPanel %} {% UIForm Standard {} %} diff --git a/datamodels/2.x/combodo-data-feature-removal/templates/Main.js.twig b/datamodels/2.x/combodo-data-feature-removal/templates/Main.js.twig deleted file mode 100644 index 2e0511669b..0000000000 --- a/datamodels/2.x/combodo-data-feature-removal/templates/Main.js.twig +++ /dev/null @@ -1,9 +0,0 @@ -{# @copyright Copyright (C) 2010-2024 Combodo SAS #} -{# @license http://opensource.org/licenses/AGPL-3.0 #} - -$(document).on('click', '#checkAllExtensions', function() { - let bChecked = this.checked; - $('.extension_check').each( function() { this.checked = bChecked }); -}); - - diff --git a/datamodels/2.x/combodo-data-feature-removal/templates/Main.ready.js.twig b/datamodels/2.x/combodo-data-feature-removal/templates/Main.ready.js.twig deleted file mode 100644 index 375c45499a..0000000000 --- a/datamodels/2.x/combodo-data-feature-removal/templates/Main.ready.js.twig +++ /dev/null @@ -1,2 +0,0 @@ -{# @copyright Copyright (C) 2010-2024 Combodo SAS #} -{# @license http://opensource.org/licenses/AGPL-3.0 #} diff --git a/datamodels/2.x/combodo-data-feature-removal/vendor/autoload.php b/datamodels/2.x/combodo-data-feature-removal/vendor/autoload.php index 43b68436c8..a18424e39d 100644 --- a/datamodels/2.x/combodo-data-feature-removal/vendor/autoload.php +++ b/datamodels/2.x/combodo-data-feature-removal/vendor/autoload.php @@ -14,10 +14,7 @@ if (PHP_VERSION_ID < 50600) { echo $err; } } - trigger_error( - $err, - E_USER_ERROR - ); + throw new RuntimeException($err); } require_once __DIR__ . '/composer/autoload_real.php'; diff --git a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php index ab40fa4f8d..e47194c953 100644 --- a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php +++ b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_classmap.php @@ -11,8 +11,7 @@ return array( 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalException' => $baseDir . '/src/Helper/DataFeatureRemovalException.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalHelper' => $baseDir . '/src/Helper/DataFeatureRemovalHelper.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalLog' => $baseDir . '/src/Helper/DataFeatureRemovalLog.php', - 'Combodo\\iTop\\DataFeatureRemoval\\Model\\DataFeatureRemoverAuditRuleService' => $baseDir . '/src/Model/DataFeatureRemoverAuditRuleService.php', - 'Combodo\\iTop\\DataFeatureRemoval\\Model\\DataFeatureRemoverExtensionService' => $baseDir . '/src/Model/DataFeatureRemoverExtensionService.php', + 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataFeatureRemoverExtensionService' => $baseDir . '/src/Service/DataFeatureRemoverExtensionService.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DeletionPlanService' => $baseDir . '/src/Service/DeletionPlanService.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', ); diff --git a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php index 8c537693db..8f127af07c 100644 --- a/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php +++ b/datamodels/2.x/combodo-data-feature-removal/vendor/composer/autoload_static.php @@ -30,8 +30,7 @@ class ComposerStaticInit4f96a7199e2c0d90e547333758b26464 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalException' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalException.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalHelper' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalHelper.php', 'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalLog' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalLog.php', - 'Combodo\\iTop\\DataFeatureRemoval\\Model\\DataFeatureRemoverAuditRuleService' => __DIR__ . '/../..' . '/src/Model/DataFeatureRemoverAuditRuleService.php', - 'Combodo\\iTop\\DataFeatureRemoval\\Model\\DataFeatureRemoverExtensionService' => __DIR__ . '/../..' . '/src/Model/DataFeatureRemoverExtensionService.php', + 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataFeatureRemoverExtensionService' => __DIR__ . '/../..' . '/src/Service/DataFeatureRemoverExtensionService.php', 'Combodo\\iTop\\DataFeatureRemoval\\Service\\DeletionPlanService' => __DIR__ . '/../..' . '/src/Service/DeletionPlanService.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', );