Skip to content

Commit fcd4831

Browse files
committed
Refactroed the Referential, Measure, SoaCategory functionality, other improvements.
1 parent dbfec07 commit fcd4831

File tree

66 files changed

+1721
-1223
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1721
-1223
lines changed

config/module.config.php

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@
5353
'id' => '[0-9]+',
5454
],
5555
'defaults' => [
56-
'controller' => PipeSpec::class,
57-
'middleware' => new PipeSpec(Controller\ApiAdminUsersRolesController::class),
56+
'controller' => Controller\ApiAdminUsersRolesController::class,
5857
],
5958
],
6059
],
@@ -67,8 +66,7 @@
6766
'id' => '[0-9]+',
6867
],
6968
'defaults' => [
70-
'controller' => PipeSpec::class,
71-
'middleware' => new PipeSpec(Controller\ApiAdminUsersController::class),
69+
'controller' => Controller\ApiAdminUsersController::class,
7270
],
7371
],
7472
],
@@ -81,8 +79,7 @@
8179
'id' => '[0-9]+',
8280
],
8381
'defaults' => [
84-
'controller' => PipeSpec::class,
85-
'middleware' => new PipeSpec(Controller\ApiAdminUsersController::class),
82+
'controller' => Controller\ApiAdminUsersController::class,
8683
'action' => 'resetPassword',
8784
],
8885
],
@@ -109,8 +106,7 @@
109106
'id' => '[0-9]+',
110107
],
111108
'defaults' => [
112-
'controller' => PipeSpec::class,
113-
'middleware' => new PipeSpec(Controller\ApiModelsController::class),
109+
'controller' => Controller\ApiModelsController::class,
114110
],
115111
],
116112
],
@@ -120,7 +116,7 @@
120116
'options' => [
121117
'route' => '/api/referentials',
122118
'defaults' => [
123-
'controller' => Controller\ApiReferentialsController::class,
119+
'controller' => Controller\ApiCoreReferentialsController::class,
124120
],
125121
],
126122
],
@@ -165,8 +161,7 @@
165161
'route' => '/api/admin/passwords',
166162
'constraints' => [],
167163
'defaults' => [
168-
'controller' => PipeSpec::class,
169-
'middleware' => new PipeSpec(Controller\ApiAdminPasswordsController::class),
164+
'controller' => Controller\ApiAdminPasswordsController::class,
170165
],
171166
],
172167
],
@@ -1382,7 +1377,7 @@
13821377
Controller\ApiAnrController::class => AutowireFactory::class,
13831378
Controller\ApiConfigController::class => AutowireFactory::class,
13841379
Controller\ApiClientsController::class => AutowireFactory::class,
1385-
Controller\ApiReferentialsController::class => AutowireFactory::class,
1380+
Controller\ApiCoreReferentialsController::class => AutowireFactory::class,
13861381
Controller\ApiUserPasswordController::class => AutowireFactory::class,
13871382
Controller\ApiUserTwoFAController::class => AutowireFactory::class,
13881383
Controller\ApiUserRecoveryCodesController::class => AutowireFactory::class,
@@ -1457,20 +1452,14 @@
14571452
DbCli::class => Service\Model\DbCliFactory::class,
14581453

14591454
DeprecatedTable\InterviewTable::class => AutowireFactory::class,
1460-
DeprecatedTable\MeasureTable::class => AutowireFactory::class,
1461-
DeprecatedTable\MeasureMeasureTable::class => AutowireFactory::class,
1462-
DeprecatedTable\RolfRiskTable::class => AutowireFactory::class,
1463-
DeprecatedTable\RolfTagTable::class => AutowireFactory::class,
14641455
DeprecatedTable\RecordActorTable::class => AutowireFactory::class,
14651456
DeprecatedTable\RecordDataCategoryTable::class => AutowireFactory::class,
14661457
DeprecatedTable\RecordInternationalTransferTable::class => AutowireFactory::class,
14671458
DeprecatedTable\RecordPersonalDataTable::class => AutowireFactory::class,
14681459
DeprecatedTable\RecordProcessorTable::class => AutowireFactory::class,
14691460
DeprecatedTable\RecordRecipientTable::class => AutowireFactory::class,
14701461
DeprecatedTable\RecordTable::class => AutowireFactory::class,
1471-
DeprecatedTable\ReferentialTable::class => AutowireFactory::class,
14721462
DeprecatedTable\SoaTable::class => AutowireFactory::class,
1473-
DeprecatedTable\SoaCategoryTable::class => AutowireFactory::class,
14741463
DeprecatedTable\QuestionTable::class => AutowireFactory::class,
14751464
DeprecatedTable\QuestionChoiceTable::class => AutowireFactory::class,
14761465
Table\AnrTable::class => ClientEntityManagerFactory::class,
@@ -1489,6 +1478,8 @@
14891478
Table\ScaleImpactTypeTable::class => ClientEntityManagerFactory::class,
14901479
Table\ClientTable::class => ClientEntityManagerFactory::class,
14911480
Table\MonarcObjectTable::class => ClientEntityManagerFactory::class,
1481+
Table\MeasureTable::class => ClientEntityManagerFactory::class,
1482+
Table\MeasureMeasureTable::class => ClientEntityManagerFactory::class,
14921483
Table\ObjectCategoryTable::class => ClientEntityManagerFactory::class,
14931484
Table\ObjectObjectTable::class => ClientEntityManagerFactory::class,
14941485
Table\OperationalRiskScaleTable::class => ClientEntityManagerFactory::class,
@@ -1499,6 +1490,10 @@
14991490
Table\RecommendationHistoryTable::class => ClientEntityManagerFactory::class,
15001491
Table\RecommendationRiskTable::class => ClientEntityManagerFactory::class,
15011492
Table\RecommendationSetTable::class => ClientEntityManagerFactory::class,
1493+
Table\RolfRiskTable::class => ClientEntityManagerFactory::class,
1494+
Table\RolfTagTable::class => ClientEntityManagerFactory::class,
1495+
Table\ReferentialTable::class => ClientEntityManagerFactory::class,
1496+
Table\SoaCategoryTable::class => ClientEntityManagerFactory::class,
15021497
Table\SnapshotTable::class => ClientEntityManagerFactory::class,
15031498
Table\SoaScaleCommentTable::class => ClientEntityManagerFactory::class,
15041499
Table\ThemeTable::class => ClientEntityManagerFactory::class,
@@ -1519,20 +1514,12 @@
15191514
Entity\RecordProcessor::class => ModelFactory\RecordProcessorServiceModelEntity::class,
15201515
Entity\RecordRecipient::class => ModelFactory\RecordRecipientServiceModelEntity::class,
15211516
Entity\Record::class => ModelFactory\RecordServiceModelEntity::class,
1522-
Entity\Referential::class => ModelFactory\ReferentialServiceModelEntity::class,
1523-
Entity\Measure::class => ModelFactory\MeasureServiceModelEntity::class,
1524-
Entity\MeasureMeasure::class => ModelFactory\MeasureMeasureServiceModelEntity::class,
1525-
Entity\RolfRisk::class => ModelFactory\RolfRiskServiceModelEntity::class,
1526-
Entity\RolfTag::class => ModelFactory\RolfTagServiceModelEntity::class,
15271517
Entity\Soa::class => ModelFactory\SoaServiceModelEntity::class,
1528-
Entity\SoaCategory::class => ModelFactory\SoaCategoryServiceModelEntity::class,
15291518
Entity\Question::class => ModelFactory\QuestionServiceModelEntity::class,
15301519
Entity\QuestionChoice::class => ModelFactory\QuestionChoiceServiceModelEntity::class,
15311520

15321521
// TODO: replace to autowiring.
15331522
Service\AnrInterviewService::class => Service\AnrInterviewServiceFactory::class,
1534-
Service\AnrMeasureService::class => Service\AnrMeasureServiceFactory::class,
1535-
Service\AnrMeasureMeasureService::class => Service\AnrMeasureMeasureServiceFactory::class,
15361523
Service\AnrRecordActorService::class => Service\AnrRecordActorServiceFactory::class,
15371524
Service\AnrRecordDataCategoryService::class => Service\AnrRecordDataCategoryServiceFactory::class,
15381525
Service\AnrRecordInternationalTransferService::class
@@ -1541,13 +1528,15 @@
15411528
Service\AnrRecordProcessorService::class => Service\AnrRecordProcessorServiceFactory::class,
15421529
Service\AnrRecordRecipientService::class => Service\AnrRecordRecipientServiceFactory::class,
15431530
Service\AnrRecordService::class => Service\AnrRecordServiceFactory::class,
1544-
Service\AnrReferentialService::class => Service\AnrReferentialServiceFactory::class,
15451531
Service\SoaService::class => Service\SoaServiceFactory::class,
1546-
Service\SoaCategoryService::class => Service\SoaCategoryServiceFactory::class,
15471532
Service\AnrQuestionService::class => Service\AnrQuestionServiceFactory::class,
15481533
Service\AnrQuestionChoiceService::class => Service\AnrQuestionChoiceServiceFactory::class,
1549-
Service\AnrRolfTagService::class => Service\AnrRolfTagServiceFactory::class,
1550-
Service\AnrRolfRiskService::class => Service\AnrRolfRiskServiceFactory::class,
1534+
Service\AnrMeasureService::class => AutowireFactory::class,
1535+
Service\AnrMeasureMeasureService::class => AutowireFactory::class,
1536+
Service\AnrReferentialService::class => AutowireFactory::class,
1537+
Service\SoaCategoryService::class => AutowireFactory::class,
1538+
Service\AnrRolfTagService::class => AutowireFactory::class,
1539+
Service\AnrRolfRiskService::class => AutowireFactory::class,
15511540
Service\AnrRecommendationService::class => AutowireFactory::class,
15521541
Service\AnrRecommendationHistoryService::class => AutowireFactory::class,
15531542
Service\AnrRecommendationRiskService::class => AutowireFactory::class,

migrations/db/20230901112005_fix_positions_cleanup_db.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,51 @@ public function change()
207207
$this->execute('UPDATE measures SET soacategory_id = ' . $soaCategoryIds[$anrId]
208208
. ' WHERE uuid = "' . $measureData['uuid'] . '" and anr_id = ' . $anrId);
209209
}
210+
/* Correct MeasuresMeasures table structure. */
211+
$this->table('measures_measures')
212+
->addColumn('id', 'integer', ['signed' => false, 'after' => MysqlAdapter::FIRST])
213+
->renameColumn('father_id', 'master_measure_id')
214+
->renameColumn('child_id', 'linked_measure_id')
215+
->dropForeignKey(['master_measure_id', 'linked_measure_id', 'anr_id'])
216+
->removeColumn('creator')
217+
->removeColumn('created_at')
218+
->removeColumn('updater')
219+
->removeColumn('updated_at')
220+
->update();
221+
$this->execute('SET @a = 0; UPDATE measures_measures SET id = @a := @a + 1 ORDER BY anr_id;');
222+
$this->table('measures_measures')
223+
->changePrimaryKey(['id'])
224+
->addIndex(['master_measure_id', 'linked_measure_id', 'anr_id'], ['unique' => true])
225+
->update();
226+
$this->table('measures_measures')
227+
->changeColumn('id', 'integer', ['identity' => true, 'signed' => false])
228+
->update();
229+
/* Remove unlinked measures links to measures. */
230+
$this->execute('DELETE FROM measures_measures WHERE anr_id NOT IN (SELECT id FROM anrs);');
231+
$voidMeasuresQuery = $this->query('
232+
SELECT id FROM measures_measures WHERE CONCAT(master_measure_id, anr_id) NOT IN
233+
(SELECT CONCAT(uuid, anr_id) FROM measures) OR CONCAT(linked_measure_id, anr_id)
234+
NOT IN (SELECT CONCAT(uuid, anr_id) FROM measures)
235+
');
236+
$voidMeasuresIds = [];
237+
foreach ($voidMeasuresQuery->fetchAll() as $voidMeasureData) {
238+
$voidMeasuresIds[] = $voidMeasureData['id'];
239+
}
240+
$this->execute('DELETE FROM measures_measures WHERE id IN (' . implode(',', $voidMeasuresIds) . ');');
241+
$this->table('measures_measures')
242+
->addForeignKey(['anr_id'], 'anrs', ['id'], ['delete' => 'CASCADE'])
243+
->addForeignKey(
244+
['master_measure_id', 'anr_id'],
245+
'measures',
246+
['uuid', 'anr_id'],
247+
['delete' => 'CASCADE', 'update' => 'RESTRICT']
248+
)->addForeignKey(
249+
['linked_measure_id', 'anr_id'],
250+
'measures',
251+
['uuid', 'anr_id'],
252+
['delete' => 'CASCADE', 'update' => 'RESTRICT']
253+
)->update();
254+
$this->table('measures')->addForeignKey(['anr_id'], 'anrs', ['id'], ['delete' => 'CASCADE'])->update();
210255

211256
/* Rename column of owner_id to risk_owner_id. */
212257
$this->table('instances_risks')->renameColumn('owner_id', 'risk_owner_id')->update();
@@ -368,6 +413,22 @@ public function change()
368413
->addIndex(['anr_id', 'instance_risk_op_id', 'operational_risk_scale_type_id'], ['unique' => false])
369414
->update();
370415

416+
/* Note: Temporary change fields types to avoid setting values from the code. Later will be dropped. */
417+
$this->table('operational_risks_scales_types')
418+
->changeColumn('label_translation_key', 'string', ['null' => false, 'default' => '', 'limit' => 255])
419+
->update();
420+
$this->table('operational_risks_scales_comments')
421+
->changeColumn('comment_translation_key', 'string', ['null' => false, 'default' => '', 'limit' => 255])
422+
->update();
423+
424+
/* Cleanup the table. */
425+
$this->table('rolf_risks_tags')
426+
->removeColumn('creator')
427+
->removeColumn('created_at')
428+
->removeColumn('updater')
429+
->removeColumn('updated_at')
430+
->update();
431+
371432
/* TODO: Should be added to the next release migration, to perform this release in a safe mode.
372433
$this->table('anr_instance_metadata_fields')->removeColumn('label_translation_key')->update();
373434
$this->table('instances_metadata')->removeColumn('comment_translation_key')->update();

src/Controller/ApiAdminPasswordsController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
namespace Monarc\FrontOffice\Controller;
99

10-
use Monarc\Core\Controller\Handler\AbstractRestfulControllerRequestHandler;
10+
use Laminas\Mvc\Controller\AbstractRestfulController;
1111
use Monarc\Core\Controller\Handler\ControllerRequestResponseHandlerTrait;
1212
use Monarc\Core\Exception\Exception;
1313
use Monarc\Core\Service\PasswordService;
1414

15-
class ApiAdminPasswordsController extends AbstractRestfulControllerRequestHandler
15+
class ApiAdminPasswordsController extends AbstractRestfulController
1616
{
1717
use ControllerRequestResponseHandlerTrait;
1818

@@ -32,7 +32,7 @@ public function create($data)
3232
if (!empty($data['email']) && empty($data['password'])) {
3333
try {
3434
$this->passwordService->passwordForgotten($data['email']);
35-
} catch (\Exception $e) {
35+
} catch (\Exception) {
3636
// Ignore the \Exception to avoid the data leak.
3737
}
3838
}

src/Controller/ApiAdminUsersController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77

88
namespace Monarc\FrontOffice\Controller;
99

10-
use Monarc\Core\Controller\Handler\AbstractRestfulControllerRequestHandler;
10+
use Laminas\Mvc\Controller\AbstractRestfulController;
1111
use Monarc\Core\Controller\Handler\ControllerRequestResponseHandlerTrait;
1212
use Monarc\Core\InputFormatter\User\GetUsersInputFormatter;
1313
use Monarc\Core\Service\PasswordService;
1414
use Monarc\FrontOffice\Validator\InputValidator\User\PostUserDataInputValidator;
1515
use Monarc\FrontOffice\Service\UserService;
1616

17-
class ApiAdminUsersController extends AbstractRestfulControllerRequestHandler
17+
class ApiAdminUsersController extends AbstractRestfulController
1818
{
1919
use ControllerRequestResponseHandlerTrait;
2020

src/Controller/ApiAdminUsersRolesController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
namespace Monarc\FrontOffice\Controller;
99

10-
use Monarc\Core\Controller\Handler\AbstractRestfulControllerRequestHandler;
10+
use Laminas\Mvc\Controller\AbstractRestfulController;
1111
use Monarc\Core\Controller\Handler\ControllerRequestResponseHandlerTrait;
1212
use Monarc\Core\Exception;
1313
use Monarc\FrontOffice\Service\UserRoleService;
1414

15-
class ApiAdminUsersRolesController extends AbstractRestfulControllerRequestHandler
15+
class ApiAdminUsersRolesController extends AbstractRestfulController
1616
{
1717
use ControllerRequestResponseHandlerTrait;
1818

src/Controller/ApiAnrAssetsController.php

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,26 @@ public function create($data)
5555
$anr = $this->getRequest()->getAttribute('anr');
5656

5757
$isBatchData = $this->isBatchData($data);
58-
$this->validatePostParams($this->postAssetDataInputValidator->setAnr($anr), $data, $isBatchData);
59-
60-
$assetsUuids = [];
61-
$validatedData = $isBatchData
62-
? $this->postAssetDataInputValidator->getValidDataSets()
63-
: [$this->postAssetDataInputValidator->getValidData()];
64-
$setsNum = \count($validatedData) - 1;
65-
foreach ($validatedData as $setNum => $validatedDataRow) {
66-
$assetsUuids[] = $this->anrAssetService->create($anr, $validatedDataRow, $setNum === $setsNum)->getUuid();
58+
$this->validatePostParams(
59+
$this->postAssetDataInputValidator->setIncludeFilter(['anr' => $anr]),
60+
$data,
61+
$isBatchData
62+
);
63+
64+
if ($isBatchData) {
65+
return $this->getSuccessfulJsonResponse([
66+
'id' => $this->anrAssetService->createList(
67+
$anr,
68+
$this->postAssetDataInputValidator->getValidDataSets()
69+
),
70+
]);
6771
}
6872

6973
return $this->getSuccessfulJsonResponse([
70-
'id' => \count($assetsUuids) === 1 && !$isBatchData ? current($assetsUuids) : $assetsUuids,
74+
'id' => $this->anrAssetService->create(
75+
$anr,
76+
$this->postAssetDataInputValidator->getValidData()
77+
)->getUuid(),
7178
]);
7279
}
7380

@@ -80,7 +87,7 @@ public function update($id, $data)
8087
/** @var Anr $anr */
8188
$anr = $this->getRequest()->getAttribute('anr');
8289
$this->validatePostParams(
83-
$this->postAssetDataInputValidator->setExcludeFilter(['uuid' => $id])->setAnr($anr),
90+
$this->postAssetDataInputValidator->setIncludeFilter(['anr' => $anr])->setExcludeFilter(['uuid' => $id]),
8491
$data
8592
);
8693

0 commit comments

Comments
 (0)