From 03e46dc87a9e7fbd00fcab3a25103550f0e697f5 Mon Sep 17 00:00:00 2001 From: "florian.azizian" <florian.azizian@maarch.org> Date: Fri, 10 Jan 2020 16:01:12 +0100 Subject: [PATCH] FEAT #11695 TIME 1:30 second refactoring list_templates --- .../entity/controllers/EntityController.php | 27 +++- .../controllers/ListTemplateController.php | 2 +- src/app/user/controllers/UserController.php | 23 ++-- .../app/entity/ListTemplateControllerTest.php | 122 ++++++++---------- 4 files changed, 90 insertions(+), 84 deletions(-) diff --git a/src/app/entity/controllers/EntityController.php b/src/app/entity/controllers/EntityController.php index bca2211b034..250e6d8555d 100755 --- a/src/app/entity/controllers/EntityController.php +++ b/src/app/entity/controllers/EntityController.php @@ -318,9 +318,9 @@ class EntityController } } - $children = EntityModel::get(['select' => [1], 'where' => ['parent_entity_id = ?'], 'data' => [$aArgs['id']]]); + $children = EntityModel::get(['select' => [1], 'where' => ['parent_entity_id = ?'], 'data' => [$aArgs['id']]]); $documents = ResModel::get(['select' => [1], 'where' => ['destination = ?'], 'data' => [$aArgs['id']]]); - $users = EntityModel::getUsersById(['select' => [1], 'id' => $aArgs['id']]); + $users = EntityModel::getUsersById(['select' => [1], 'id' => $aArgs['id']]); $templates = TemplateAssociationModel::get(['select' => [1], 'where' => ['value_field = ?'], 'data' => [$aArgs['id']]]); $instances = ListInstanceModel::get(['select' => [1], 'where' => ['item_id = ?', 'item_type = ?'], 'data' => [$aArgs['id'], 'entity_id']]); $redirects = GroupBasketRedirectModel::get(['select' => [1], 'where' => ['entity_id = ?'], 'data' => [$aArgs['id']]]); @@ -339,7 +339,17 @@ class EntityController $entities['deleted'] = $control['deleted']; } - ListTemplateModel::delete(['where' => ['object_id = ?'], 'data' => [$aArgs['id']]]); + $templateLists = ListTemplateModel::get(['select' => ['id'], 'where' => ['entity_id = ?'], 'data' => [$entity['id']]]); + if (!empty($templateLists)) { + foreach ($templateLists as $templateList) { + ListTemplateModel::delete([ + 'where' => ['id = ?'], + 'data' => [$templateList['id']] + ]); + ListTemplateItemModel::delete(['where' => ['list_template_id = ?'], 'data' => [$templateList['id']]]); + } + } + GroupModel::update([ 'postSet' => ['indexation_parameters' => "jsonb_set(indexation_parameters, '{entities}', (indexation_parameters->'entities') - '{$entity['id']}')"], 'where' => ['1=1'] @@ -426,7 +436,16 @@ class EntityController //ListInstances ListInstanceModel::update(['set' => ['item_id' => $aArgs['newEntityId']], 'where' => ['item_id = ?', 'item_type = ?'], 'data' => [$aArgs['id'], 'entity_id']]); //ListTemplates - ListTemplateModel::delete(['where' => ['object_id = ?'], 'data' => [$aArgs['id']]]); + $templateLists = ListTemplateModel::get(['select' => ['id'], 'where' => ['entity_id = ?'], 'data' => [$dyingEntity['id']]]); + if (!empty($templateLists)) { + foreach ($templateLists as $templateList) { + ListTemplateModel::delete([ + 'where' => ['id = ?'], + 'data' => [$templateList['id']] + ]); + ListTemplateItemModel::delete(['where' => ['list_template_id = ?'], 'data' => [$templateList['id']]]); + } + } //Templates TemplateAssociationModel::update(['set' => ['value_field' => $aArgs['newEntityId']], 'where' => ['value_field = ?'], 'data' => [$aArgs['id']]]); //GroupIndexing diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php index 78864a9f549..448d7a15d2c 100755 --- a/src/app/entity/controllers/ListTemplateController.php +++ b/src/app/entity/controllers/ListTemplateController.php @@ -379,7 +379,7 @@ class ListTemplateController $queryParams = $request->getQueryParams(); - $listTemplates = ListTemplateModel::get(['select' => ['*'], 'where' => ['object_id = ?'], 'data' => [$entity['entity_id']]]); + $listTemplates = ListTemplateModel::get(['select' => ['*'], 'where' => ['entity_id = ?'], 'data' => [$args['entityId']]]); foreach ($listTemplates as $key => $value) { if ($value['item_type'] == 'entity_id') { diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 5aa5ac2e585..8a7471d1503 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -1274,7 +1274,7 @@ class UserController if (!empty($error['error'])) { return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); } - if (empty(entitymodel::getByEntityId(['entityId' => $aArgs['entityId']]))) { + if (empty(EntityModel::getByEntityId(['entityId' => $aArgs['entityId']]))) { return $response->withStatus(400)->withJson(['errors' => 'Entity not found']); } @@ -1290,7 +1290,8 @@ class UserController if (!empty($error['error'])) { return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); } - if (empty(entitymodel::getByEntityId(['entityId' => $aArgs['entityId']]))) { + $entityInfo = EntityModel::getByEntityId(['entityId' => $aArgs['entityId'], 'select' => ['id']]); + if (empty($entityInfo)) { return $response->withStatus(400)->withJson(['errors' => 'Entity not found']); } @@ -1298,12 +1299,15 @@ class UserController $data = $request->getParams(); if (!empty($data['mode'])) { + $templateLists = ListTemplateModel::get(['select' => ['id'], 'where' => ['entity_id = ?'], 'data' => [$entityInfo['id']]]); + if (!empty($templateLists)) { + foreach ($templateLists as $templateList) { + ListTemplateItemModel::delete(['where' => ['list_template_id = ?'], 'data' => [$templateList['id']]]); + } + } + if ($data['mode'] == 'reaffect') { - ListTemplateModel::update([ - 'set' => ['item_id' => $data['newUser']], - 'where' => ['object_id = ?', 'item_id = ?'], - 'data' => [$aArgs['entityId'], $user['user_id']] - ]); + $listInstances = ListInstanceModel::getWithConfidentiality(['select' => ['listinstance.res_id'], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]); $resIdsToReplace = []; foreach ($listInstances as $listInstance) { @@ -1317,11 +1321,6 @@ class UserController ]); } } else { - ListTemplateModel::delete([ - 'where' => ['object_id = ?', 'item_id = ?', 'item_mode != ?'], - 'data' => [$aArgs['entityId'], $user['user_id'], 'dest'] - ]); - $ressources = ResModel::getOnView([ 'select' => ['res_id'], 'where' => ['confidentiality = ?', 'destination = ?', 'closing_date is null'], diff --git a/test/unitTests/app/entity/ListTemplateControllerTest.php b/test/unitTests/app/entity/ListTemplateControllerTest.php index f8ba260f989..8cfce771c94 100755 --- a/test/unitTests/app/entity/ListTemplateControllerTest.php +++ b/test/unitTests/app/entity/ListTemplateControllerTest.php @@ -22,27 +22,27 @@ class ListTemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'object_type' => 'VISA_CIRCUIT', + 'type' => 'visaCircuit', 'title' => 'TEST-LISTTEMPLATE123-TITLE', 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', 'items' => [ [ 'sequence' => 0, - 'item_id' => 'bbain', - 'item_type' => 'user_id', - 'item_mode' => 'visa' + 'id' => 1, + 'type' => 'user', + 'mode' => 'visa' ], [ 'sequence' => 1, - 'item_id' => 'ssissoko', - 'item_type' => 'user_id', - 'item_mode' => 'visa' + 'id' => 2, + 'type' => 'user', + 'mode' => 'visa' ], [ 'sequence' => 0, - 'item_id' => 'bboule', - 'item_type' => 'user_id', - 'item_mode' => 'sign' + 'id' => 3, + 'type' => 'user', + 'mode' => 'sign' ] ], ]; @@ -62,8 +62,8 @@ class ListTemplateControllerTest extends TestCase foreach ($responseBody->listTemplates as $listTemplate) { if ($listTemplate->title == 'TEST-LISTTEMPLATE123-TITLE') { self::$id = $listTemplate->id; - $this->assertSame('VISA_CIRCUIT', $listTemplate->object_type); - $this->assertSame('VISA_CIRCUIT_', substr($listTemplate->object_id, 0, 13)); + $this->assertSame('visaCircuit', $listTemplate->type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $listTemplate->title); $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $listTemplate->description); } } @@ -76,32 +76,24 @@ class ListTemplateControllerTest extends TestCase $response = $listTemplateController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); $responseBody = json_decode((string)$response->getBody()); - $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate->diffusionList[0]->object_type); - $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate->diffusionList[0]->title); - $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate->diffusionList[0]->description); - $this->assertSame(0, $responseBody->listTemplate->diffusionList[0]->sequence); - $this->assertSame('bbain', $responseBody->listTemplate->diffusionList[0]->item_id); - $this->assertSame('user_id', $responseBody->listTemplate->diffusionList[0]->item_type); - $this->assertSame('visa', $responseBody->listTemplate->diffusionList[0]->item_mode); - $this->assertSame('Y', $responseBody->listTemplate->diffusionList[0]->visible); - - $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate->diffusionList[1]->object_type); - $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate->diffusionList[1]->title); - $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate->diffusionList[1]->description); - $this->assertSame(1, $responseBody->listTemplate->diffusionList[1]->sequence); - $this->assertSame('ssissoko', $responseBody->listTemplate->diffusionList[1]->item_id); - $this->assertSame('user_id', $responseBody->listTemplate->diffusionList[1]->item_type); - $this->assertSame('visa', $responseBody->listTemplate->diffusionList[1]->item_mode); - $this->assertSame('Y', $responseBody->listTemplate->diffusionList[1]->visible); - - $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate->diffusionList[2]->object_type); - $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate->diffusionList[2]->title); - $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate->diffusionList[2]->description); - $this->assertSame(0, $responseBody->listTemplate->diffusionList[2]->sequence); - $this->assertSame('bboule', $responseBody->listTemplate->diffusionList[2]->item_id); - $this->assertSame('user_id', $responseBody->listTemplate->diffusionList[2]->item_type); - $this->assertSame('sign', $responseBody->listTemplate->diffusionList[2]->item_mode); - $this->assertSame('Y', $responseBody->listTemplate->diffusionList[2]->visible); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate->description); + $this->assertSame('visaCircuit', $responseBody->listTemplate->type); + + $this->assertSame(0, $responseBody->listTemplate->items[0]->sequence); + $this->assertSame(1, $responseBody->listTemplate->items[0]->item_id); + $this->assertSame('user', $responseBody->listTemplate->items[0]->item_type); + $this->assertSame('visa', $responseBody->listTemplate->items[0]->item_mode); + + $this->assertSame(1, $responseBody->listTemplate->items[1]->sequence); + $this->assertSame(2, $responseBody->listTemplate->items[1]->item_id); + $this->assertSame('user', $responseBody->listTemplate->items[1]->item_type); + $this->assertSame('visa', $responseBody->listTemplate->items[1]->item_mode); + + $this->assertSame(2, $responseBody->listTemplate->items[2]->sequence); + $this->assertSame(3, $responseBody->listTemplate->items[2]->item_id); + $this->assertSame('user', $responseBody->listTemplate->items[2]->item_type); + $this->assertSame('sign', $responseBody->listTemplate->items[2]->item_mode); } public function testUpdate() @@ -117,15 +109,15 @@ class ListTemplateControllerTest extends TestCase 'items' => [ [ 'sequence' => 0, - 'item_id' => 'kkaar', - 'item_type' => 'user_id', - 'item_mode' => 'visa' + 'id' => 4, + 'type' => 'user', + 'mode' => 'visa' ], [ 'sequence' => 0, - 'item_id' => 'ppetit', - 'item_type' => 'user_id', - 'item_mode' => 'sign' + 'id' => 5, + 'type' => 'user', + 'mode' => 'sign' ] ], ]; @@ -135,7 +127,7 @@ class ListTemplateControllerTest extends TestCase $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); $responseBody = json_decode((string)$response->getBody()); - $this->assertInternalType('int', $responseBody->id); + $this->assertSame(204, $response->getStatusCode()); // READ $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); @@ -147,8 +139,8 @@ class ListTemplateControllerTest extends TestCase foreach ($responseBody->listTemplates as $listTemplate) { if ($listTemplate->title == 'TEST-LISTTEMPLATE123-TITLE-UPDATED') { self::$id = $listTemplate->id; - $this->assertSame('VISA_CIRCUIT', $listTemplate->object_type); - $this->assertSame('VISA_CIRCUIT_', substr($listTemplate->object_id, 0, 13)); + $this->assertSame('visaCircuit', $listTemplate->type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $listTemplate->title); $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $listTemplate->description); } } @@ -160,25 +152,21 @@ class ListTemplateControllerTest extends TestCase $response = $listTemplateController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); $responseBody = json_decode((string)$response->getBody()); - $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate->diffusionList[0]->object_type); - $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody->listTemplate->diffusionList[0]->title); - $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody->listTemplate->diffusionList[0]->description); - $this->assertSame(0, $responseBody->listTemplate->diffusionList[0]->sequence); - $this->assertSame('kkaar', $responseBody->listTemplate->diffusionList[0]->item_id); - $this->assertSame('user_id', $responseBody->listTemplate->diffusionList[0]->item_type); - $this->assertSame('visa', $responseBody->listTemplate->diffusionList[0]->item_mode); - $this->assertSame('Y', $responseBody->listTemplate->diffusionList[0]->visible); - - $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate->diffusionList[1]->object_type); - $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody->listTemplate->diffusionList[1]->title); - $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody->listTemplate->diffusionList[1]->description); - $this->assertSame(0, $responseBody->listTemplate->diffusionList[1]->sequence); - $this->assertSame('ppetit', $responseBody->listTemplate->diffusionList[1]->item_id); - $this->assertSame('user_id', $responseBody->listTemplate->diffusionList[1]->item_type); - $this->assertSame('sign', $responseBody->listTemplate->diffusionList[1]->item_mode); - $this->assertSame('Y', $responseBody->listTemplate->diffusionList[1]->visible); - - $this->assertSame(null, $responseBody->listTemplate->diffusionList[2]); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody->listTemplate->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody->listTemplate->description); + $this->assertSame('visaCircuit', $responseBody->listTemplate->type); + + $this->assertSame(0, $responseBody->listTemplate->items[0]->sequence); + $this->assertSame(4, $responseBody->listTemplate->items[0]->item_id); + $this->assertSame('user', $responseBody->listTemplate->items[0]->item_type); + $this->assertSame('visa', $responseBody->listTemplate->items[0]->item_mode); + + $this->assertSame(1, $responseBody->listTemplate->items[1]->sequence); + $this->assertSame(5, $responseBody->listTemplate->items[1]->item_id); + $this->assertSame('user', $responseBody->listTemplate->items[1]->item_type); + $this->assertSame('sign', $responseBody->listTemplate->items[1]->item_mode); + + $this->assertSame(null, $responseBody->listTemplate->items[2]); } public function testDelete() @@ -191,7 +179,7 @@ class ListTemplateControllerTest extends TestCase $response = $listTemplateController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); $responseBody = json_decode((string)$response->getBody()); - $this->assertSame('success', $responseBody->success); + $this->assertSame(204, $response->getStatusCode()); // READ $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); -- GitLab