From 8637eb099fb67c53ac8051396e813dc3b92e85ed Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Thu, 14 Feb 2019 17:52:42 +0100 Subject: [PATCH] FEAT #9349 User isDeletable --- modules/entities/class/EntityControler.php | 1 - rest/index.php | 7 +- .../controllers/ListInstanceController.php | 29 -------- .../controllers/ListTemplateController.php | 13 +--- src/app/entity/models/EntityModelAbstract.php | 14 +++- .../models/ListInstanceModelAbstract.php | 19 +++-- src/app/user/controllers/UserController.php | 72 +++++++++++++++++++ 7 files changed, 96 insertions(+), 59 deletions(-) diff --git a/modules/entities/class/EntityControler.php b/modules/entities/class/EntityControler.php index 570e8383deb..425a70c7d9c 100755 --- a/modules/entities/class/EntityControler.php +++ b/modules/entities/class/EntityControler.php @@ -23,7 +23,6 @@ * * * @file -* @author Claire Figueras <dev@maarch.org> * @date $date$ * @version $Revision$ * @ingroup core diff --git a/rest/index.php b/rest/index.php index 9aeb0b4b83d..c7075e4a634 100755 --- a/rest/index.php +++ b/rest/index.php @@ -201,7 +201,6 @@ $app->get('/listinstance/{id}', \Entity\controllers\ListInstanceController::clas $app->get('/res/{resId}/listinstance', \Entity\controllers\ListInstanceController::class . ':getListByResId'); $app->get('/res/{resId}/visaCircuit', \Entity\controllers\ListInstanceController::class . ':getVisaCircuitByResId'); $app->get('/res/{resId}/avisCircuit', \Entity\controllers\ListInstanceController::class . ':getAvisCircuitByResId'); -$app->get('/listinstances/dest/itemId/{itemId}', \Entity\controllers\ListInstanceController::class . ':getListWhereUserIsDest'); $app->put('/listinstances', \Entity\controllers\ListInstanceController::class . ':update'); //ListTemplates @@ -210,7 +209,6 @@ $app->post('/listTemplates', \Entity\controllers\ListTemplateController::class . $app->get('/listTemplates/{id}', \Entity\controllers\ListTemplateController::class . ':getById'); $app->put('/listTemplates/{id}', \Entity\controllers\ListTemplateController::class . ':update'); $app->delete('/listTemplates/{id}', \Entity\controllers\ListTemplateController::class . ':delete'); -$app->get('/listTemplates/entityDest/itemId/{itemId}', \Entity\controllers\ListTemplateController::class . ':getByUserWithEntityDest'); $app->put('/listTemplates/entityDest/itemId/{itemId}', \Entity\controllers\ListTemplateController::class . ':updateByUserWithEntityDest'); $app->get('/listTemplates/types/{typeId}/roles', \Entity\controllers\ListTemplateController::class . ':getTypeRoles'); $app->put('/listTemplates/types/{typeId}/roles', \Entity\controllers\ListTemplateController::class . ':updateTypeRoles'); @@ -300,13 +298,14 @@ $app->get('/administration/templates/new', \Template\controllers\TemplateControl //Users $app->get('/users', \User\controllers\UserController::class . ':get'); $app->post('/users', \User\controllers\UserController::class . ':create'); -$app->get('/users/{id}/details', \User\controllers\UserController::class . ':getDetailledById'); $app->put('/users/{id}', \User\controllers\UserController::class . ':update'); +$app->delete('/users/{id}', \User\controllers\UserController::class . ':delete'); +$app->get('/users/{id}/isDeletable', \User\controllers\UserController::class . ':isDeletable'); +$app->get('/users/{id}/details', \User\controllers\UserController::class . ':getDetailledById'); $app->put('/users/{id}/password', \User\controllers\UserController::class . ':resetPassword'); $app->get('/users/{userId}/status', \User\controllers\UserController::class . ':getStatusByUserId'); $app->put('/users/{id}/status', \User\controllers\UserController::class . ':updateStatus'); $app->put('/users/{id}/maarchParapheur', \User\controllers\UserController::class . ':sendToMaarchParapheur'); -$app->delete('/users/{id}', \User\controllers\UserController::class . ':delete'); $app->post('/users/{id}/groups', \User\controllers\UserController::class . ':addGroup'); $app->put('/users/{id}/groups/{groupId}', \User\controllers\UserController::class . ':updateGroup'); $app->delete('/users/{id}/groups/{groupId}', \User\controllers\UserController::class . ':deleteGroup'); diff --git a/src/app/entity/controllers/ListInstanceController.php b/src/app/entity/controllers/ListInstanceController.php index 0ab30cbe222..70af8e8ae86 100755 --- a/src/app/entity/controllers/ListInstanceController.php +++ b/src/app/entity/controllers/ListInstanceController.php @@ -75,35 +75,6 @@ class ListInstanceController return $response->withJson($listinstances); } - public function getListWhereUserIsDest(Request $request, Response $response, array $aArgs) - { - if (!ServiceModel::hasService(['id' => 'admin_users', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { - return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); - } - - $data = ListInstanceModel::getListWhereUserIsDest(['select' => ['li.*'], 'id' => $aArgs['itemId']]); - - $listinstances = []; - - if (!empty($data)) { - $res_id = 0; - $array = []; - foreach ($data as $value) { - if ($res_id == 0) { - $res_id = $value['res_id']; - } elseif ($res_id != $value['res_id']) { - $listinstances[] = ['resId' => $res_id, "listinstances" => $array]; - $res_id = $value['res_id']; - $array = []; - } - $array[] = $value; - } - $listinstances[] = ['resId' => $res_id, "listinstances" => $array]; - } - - return $response->withJson($listinstances); - } - public function update(Request $request, Response $response) { $data = $request->getParams(); diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php index d837bdb33b2..d65586a9905 100755 --- a/src/app/entity/controllers/ListTemplateController.php +++ b/src/app/entity/controllers/ListTemplateController.php @@ -257,17 +257,6 @@ class ListTemplateController return $response->withJson(['success' => 'success']); } - public function getByUserWithEntityDest(Request $request, Response $response, array $aArgs) - { - $listTemplates = ListTemplateModel::get([ - 'select' => ['object_id', 'title'], - 'where' => ['item_id = ?', 'object_type = ?', 'item_mode = ?'], - 'data' => [$aArgs['itemId'], 'entity_id', 'dest'] - ]); - - return $response->withJson(['listTemplates' => $listTemplates]); - } - public function updateByUserWithEntityDest(Request $request, Response $response) { if (!ServiceModel::hasService(['id' => 'admin_users', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { @@ -330,7 +319,7 @@ class ListTemplateController $roles[$key]['usedIn'] = []; $listTemplates = ListTemplateModel::get(['select' => ['object_id'], 'where' => ['object_type = ?', 'item_mode = ?'], 'data' => [$aArgs['typeId'], $roles[$key]['id']]]); foreach ($listTemplates as $listTemplate) { - $entity = entitymodel::getByEntityId(['select' => ['short_label'], 'entityId' => $listTemplate['object_id']]); + $entity = Entitymodel::getByEntityId(['select' => ['short_label'], 'entityId' => $listTemplate['object_id']]); $roles[$key]['usedIn'][] = $entity['short_label']; } } diff --git a/src/app/entity/models/EntityModelAbstract.php b/src/app/entity/models/EntityModelAbstract.php index 9475e1d1825..acdb9f9425e 100755 --- a/src/app/entity/models/EntityModelAbstract.php +++ b/src/app/entity/models/EntityModelAbstract.php @@ -247,14 +247,22 @@ abstract class EntityModelAbstract return $entities; } - public static function getAllEntitiesByUserId(array $aArgs = []) + public static function getAllEntitiesByUserId(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['userId']); ValidatorModel::stringType($aArgs, ['userId']); - $aReturn = UserModel::getEntitiesById(['userId' => $aArgs['userId']]); - $entities = []; + + if ($aArgs['userId'] == 'superadmin') { + $rawEntities = EntityModel::get(['select' => ['entity_id'], 'where' => ['enabled = ?'], 'data' => ['Y']]); + foreach ($rawEntities as $value) { + $entities[] = $value['entity_id']; + } + return $entities; + } + + $aReturn = UserModel::getEntitiesById(['userId' => $aArgs['userId']]); foreach ($aReturn as $value) { $entities = array_merge($entities, EntityModel::getEntityChildren(['entityId' => $value['entity_id']])); } diff --git a/src/app/entity/models/ListInstanceModelAbstract.php b/src/app/entity/models/ListInstanceModelAbstract.php index b610ae22d71..73712f4ac91 100755 --- a/src/app/entity/models/ListInstanceModelAbstract.php +++ b/src/app/entity/models/ListInstanceModelAbstract.php @@ -205,21 +205,20 @@ abstract class ListInstanceModelAbstract return $aListInstances; } - public static function getListWhereUserIsDest(array $aArgs) + public static function getWhenOpenMailsByLogin(array $aArgs) { - ValidatorModel::notEmpty($aArgs, ['id']); - ValidatorModel::stringType($aArgs, ['id']); + ValidatorModel::notEmpty($aArgs, ['login', 'itemMode']); + ValidatorModel::stringType($aArgs, ['login', 'itemMode']); ValidatorModel::arrayType($aArgs, ['select']); - $aListinstance = DatabaseModel::select([ + $listInstances = DatabaseModel::select([ 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], - 'table' => ['listinstance li', 'res_letterbox res', 'mlb_coll_ext mlb'], - 'left_join' => ['li.res_id = res.res_id', 'res.res_id = mlb.res_id'], - 'where' => ['res.dest_user = ?', 'li.difflist_type = ?', 'mlb.closing_date is null', 'res.status not in (?)'], - 'data' => [$aArgs['id'], 'entity_id', ['END', 'DEL']], - 'order_by' => ['res_id ASC'] + 'table' => ['listinstance', 'res_letterbox', 'mlb_coll_ext'], + 'left_join' => ['listinstance.res_id = res_letterbox.res_id', 'res_letterbox.res_id = mlb_coll_ext.res_id'], + 'where' => ['listinstance.item_id = ?', 'listinstance.difflist_type = ?', 'listinstance.item_type = ?', 'listinstance.item_mode = ?', 'mlb_coll_ext.closing_date is null', 'res_letterbox.status != ?'], + 'data' => [$aArgs['login'], 'entity_id', 'user_id', $aArgs['itemMode'], 'DEL'] ]); - return $aListinstance; + return $listInstances; } } diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 8f78b4d7e43..8ba9b81801b 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -28,6 +28,7 @@ use History\controllers\HistoryController; use History\models\HistoryModel; use Notification\controllers\NotificationsEventsController; use Parameter\models\ParameterModel; +use Resource\controllers\ResController; use Resource\models\ResModel; use Respect\Validation\Validator; use Slim\Http\Request; @@ -256,6 +257,77 @@ class UserController return $response->withJson(['success' => 'success']); } + public function isDeletable(Request $request, Response $response, array $aArgs) + { + $error = $this->hasUsersRights(['id' => $aArgs['id'], 'delete' => true, 'himself' => true]); + if (!empty($error['error'])) { + return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); + } + + $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['firstname', 'lastname', 'user_id']]); + + $isListInstanceDeletable = true; + $isListTemplateDeletable = true; + + $listInstanceEntities = []; + $listInstanceResIds = []; + $listInstances = ListInstanceModel::getWhenOpenMailsByLogin(['select' => ['listinstance.res_id', 'res_letterbox.destination'], 'login' => $user['user_id'], 'itemMode' => 'dest']); + foreach ($listInstances as $listInstance) { + if (!ResController::hasRightByResId(['resId' => $listInstance['res_id'], 'userId' => $GLOBALS['userId']])) { + $isListInstanceDeletable = false; + } + $listInstanceResIds[] = $listInstance['res_id']; + $listInstanceEntities[] = $listInstance['destination']; + } + + $listTemplateEntities = []; + $listTemplates = ListTemplateModel::get([ + 'select' => ['object_id', 'title'], + 'where' => ['item_id = ?', 'object_type = ?', 'item_mode = ?', 'item_type = ?'], + 'data' => [$user['user_id'], 'entity_id', 'dest', 'user_id'] + ]); + $allEntities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]); + foreach ($listTemplates as $listTemplate) { + if (!in_array($listTemplate['object_id'], $allEntities)) { + $isListTemplateDeletable = false; + } + $listTemplateEntities[] = $listTemplate['object_id']; + } + + if (!$isListInstanceDeletable || !$isListTemplateDeletable) { + $formattedLIEntities = []; + $listInstanceEntities = array_unique($listInstanceEntities); + foreach ($listInstanceEntities as $listInstanceEntity) { + $entity = Entitymodel::getByEntityId(['select' => ['short_label'], 'entityId' => $listInstanceEntity]); + $formattedLIEntities[] = $entity['short_label']; + } + $formattedLTEntities = []; + $listTemplateEntities = array_unique($listTemplateEntities); + foreach ($listTemplateEntities as $listTemplateEntity) { + $entity = Entitymodel::getByEntityId(['select' => ['short_label'], 'entityId' => $listTemplateEntity]); + $formattedLTEntities[] = $entity['short_label']; + } + + return $response->withJson(['isDeletable' => false, 'listInstanceEntities' => $formattedLIEntities, 'listTemplateEntities' => $formattedLTEntities]); + } + + $listInstances = []; + foreach ($listInstanceResIds as $listInstanceResId) { + $rawListInstances = ListInstanceModel::get([ + 'select' => ['*'], + 'where' => ['res_id = ?', 'difflist_type = ?'], + 'data' => [$listInstanceResId, 'entity_id'], + 'orderBy' => ['listinstance_id'] + ]); + $listInstances[] = [ + 'resId' => $listInstanceResId, + 'listInstances' => $rawListInstances + ]; + } + + return $response->withJson(['isDeletable' => true, 'listTemplates' => $listTemplates, 'listInstances' => $listInstances]); + } + public function delete(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'delete' => true, 'himself' => true]); -- GitLab