From 271ff62c21c70cf247bf9c79d8ac069bfd96ae83 Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Mon, 17 Feb 2020 17:57:20 +0100 Subject: [PATCH] FEAT #13049 TIME 0:10 put check required fields in separate function --- .../action/controllers/ActionController.php | 26 +++++++++++++++++++ .../controllers/IndexingController.php | 20 +++----------- .../controllers/ResourceListController.php | 20 +++----------- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/app/action/controllers/ActionController.php b/src/app/action/controllers/ActionController.php index c7d299b1f48..8895ad36003 100755 --- a/src/app/action/controllers/ActionController.php +++ b/src/app/action/controllers/ActionController.php @@ -18,9 +18,11 @@ use Group\controllers\GroupController; use Group\controllers\PrivilegeController; use Group\models\GroupModel; use History\controllers\HistoryController; +use IndexingModel\models\IndexingModelFieldModel; use Resource\models\ResModel; use Respect\Validation\Validator; use Action\models\ActionModel; +use SrcCore\models\ValidatorModel; use Status\models\StatusModel; use Slim\Http\Request; use Slim\Http\Response; @@ -345,4 +347,28 @@ class ActionController } return $request; } + + public static function checkRequiredFields(array $args) + { + ValidatorModel::notEmpty($args, ['resId', 'actionRequiredFields']); + ValidatorModel::intVal($args, ['resId']); + + $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['model_id', 'custom_fields']]); + $model = $resource['model_id']; + $resourceCustomFields = json_decode($resource['custom_fields'], true); + $modelFields = IndexingModelFieldModel::get([ + 'select' => ['identifier'], + 'where' => ['model_id = ?', "identifier LIKE 'indexingCustomField_%'"], + 'data' => [$model] + ]); + $modelFields = array_column($modelFields, 'identifier'); + + foreach ($args['actionRequiredFields'] as $actionRequiredField) { + $idCustom = explode("_", $actionRequiredField)[1]; + if (in_array($actionRequiredField, $modelFields) && empty($resourceCustomFields[$idCustom])) { + return ['errors' => 'Missing required custom field to do action']; + } + } + return ['success' => true]; + } } diff --git a/src/app/resource/controllers/IndexingController.php b/src/app/resource/controllers/IndexingController.php index 4d07dd32ccb..306fe6a4fb7 100755 --- a/src/app/resource/controllers/IndexingController.php +++ b/src/app/resource/controllers/IndexingController.php @@ -14,12 +14,12 @@ namespace Resource\controllers; +use Action\controllers\ActionController; use Action\controllers\ActionMethodController; use Action\models\ActionModel; use Doctype\models\DoctypeModel; use Entity\models\EntityModel; use Group\models\GroupModel; -use IndexingModel\models\IndexingModelFieldModel; use Parameter\models\ParameterModel; use Priority\models\PriorityModel; use Resource\models\ResModel; @@ -98,21 +98,9 @@ class IndexingController $body['note'] = empty($body['note']) ? null : $body['note']; if (!empty($actionRequiredFields)) { - $resource = ResModel::getById(['resId' => $body['resource'], 'select' => ['model_id', 'custom_fields']]); - $model = $resource['model_id']; - $resourceCustomFields = json_decode($resource['custom_fields'], true); - $modelFields = IndexingModelFieldModel::get([ - 'select' => ['identifier'], - 'where' => ['model_id = ?', "identifier LIKE 'indexingCustomField_%'"], - 'data' => [$model] - ]); - $modelFields = array_column($modelFields, 'identifier'); - - foreach ($actionRequiredFields as $actionRequiredField) { - $idCustom = explode("_", $actionRequiredField)[1]; - if (in_array($actionRequiredField, $modelFields) && empty($resourceCustomFields[$idCustom])) { - return $response->withStatus(400)->withJson(['errors' => 'Missing required custom field to do action']); - } + $requiredFieldsValid = ActionController::checkRequiredFields(['resId' => $body['resource'], 'actionRequiredFields' => $actionRequiredFields]); + if (!empty($requiredFieldsValid['errors'])) { + return $response->withStatus(400)->withJson($requiredFieldsValid); } } diff --git a/src/app/resource/controllers/ResourceListController.php b/src/app/resource/controllers/ResourceListController.php index 0bad972e988..39e4d7ec1f0 100644 --- a/src/app/resource/controllers/ResourceListController.php +++ b/src/app/resource/controllers/ResourceListController.php @@ -14,6 +14,7 @@ namespace Resource\controllers; +use Action\controllers\ActionController; use Action\controllers\ActionMethodController; use Action\models\ActionModel; use Attachment\models\AttachmentModel; @@ -26,7 +27,6 @@ use Entity\models\EntityModel; use Entity\models\ListInstanceModel; use Folder\models\FolderModel; use Group\models\GroupModel; -use IndexingModel\models\IndexingModelFieldModel; use Note\models\NoteModel; use Priority\models\PriorityModel; use Resource\models\ResModel; @@ -438,21 +438,9 @@ class ResourceListController $methodResponses = []; foreach ($resourcesForAction as $key => $resId) { if (!empty($actionRequiredFields)) { - $resource = ResModel::getById(['resId' => $resId, 'select' => ['model_id', 'custom_fields']]); - $model = $resource['model_id']; - $resourceCustomFields = json_decode($resource['custom_fields'], true); - $modelFields = IndexingModelFieldModel::get([ - 'select' => ['identifier'], - 'where' => ['model_id = ?', "identifier LIKE 'indexingCustomField_%'"], - 'data' => [$model] - ]); - $modelFields = array_column($modelFields, 'identifier'); - - foreach ($actionRequiredFields as $actionRequiredField) { - $idCustom = explode("_", $actionRequiredField)[1]; - if (in_array($actionRequiredField, $modelFields) && empty($resourceCustomFields[$idCustom])) { - return $response->withStatus(400)->withJson(['errors' => 'Missing required custom field to do action']); - } + $requiredFieldsValid = ActionController::checkRequiredFields(['resId' => $resId, 'actionRequiredFields' => $actionRequiredFields]); + if (!empty($requiredFieldsValid['errors'])) { + return $response->withStatus(400)->withJson($requiredFieldsValid); } } -- GitLab