diff --git a/rest/index.php b/rest/index.php index 8fd578d8236f6bce6403440e9ed89334cdb9f0b1..d5976395c2a01f69d21522b18f8d5c0baa37b253 100755 --- a/rest/index.php +++ b/rest/index.php @@ -270,6 +270,7 @@ $app->delete('/users/{id}/groups/{groupId}', \User\controllers\UserController::c $app->post('/users/{id}/entities', \User\controllers\UserController::class . ':addEntity'); $app->put('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':updateEntity'); $app->put('/users/{id}/entities/{entityId}/primaryEntity', \User\controllers\UserController::class . ':updatePrimaryEntity'); +$app->get('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':isEntityDeletable'); $app->delete('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':deleteEntity'); $app->post('/users/{id}/signatures', \User\controllers\UserController::class . ':addSignature'); $app->put('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':updateSignature'); diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php index 6b9987db8f226847e1f5d839da814db0077d3872..0f0186a1332ef0ec21cba159b51f546915c47522 100644 --- a/src/app/basket/models/BasketModelAbstract.php +++ b/src/app/basket/models/BasketModelAbstract.php @@ -385,7 +385,6 @@ class BasketModelAbstract ]); foreach ($aBaskets as $key => $value) { - $aBaskets[$key]['basketOwnerId'] = UserModel::getByUserId(['select' => ['id'], 'userId' => $value['user_abs']])['id']; $aBaskets[$key]['userToDisplay'] = UserModel::getLabelledUserById(['userId' => $value['user_abs']]); } diff --git a/src/app/entity/models/ListInstanceModelAbstract.php b/src/app/entity/models/ListInstanceModelAbstract.php index d644ed2ceb40fe7851fb3599c6f868dd98e4a742..3437a2f46f2f8db54de55fe3940e8eb96593a9a8 100644 --- a/src/app/entity/models/ListInstanceModelAbstract.php +++ b/src/app/entity/models/ListInstanceModelAbstract.php @@ -22,13 +22,16 @@ class ListInstanceModelAbstract public static function get(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['select']); - ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']); + ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']); + ValidatorModel::intType($aArgs, ['limit']); $aListInstances = DatabaseModel::select([ 'select' => $aArgs['select'], 'table' => ['listinstance'], 'where' => $aArgs['where'], - 'data' => $aArgs['data'] + 'data' => $aArgs['data'], + 'order_by' => $aArgs['orderBy'], + 'limit' => $aArgs['limit'] ]); return $aListInstances; @@ -59,7 +62,7 @@ class ListInstanceModelAbstract ValidatorModel::notEmpty($aArgs, ['set', 'where', 'data']); ValidatorModel::arrayType($aArgs, ['set', 'where', 'data']); - DatabaseModel::delete([ + DatabaseModel::update([ 'table' => 'listinstance', 'set' => $aArgs['set'], 'where' => $aArgs['where'], @@ -90,4 +93,20 @@ class ListInstanceModelAbstract return $aListinstance[0]; } + + public static function getWithConfidentiality(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['entityId', 'userId']); + ValidatorModel::stringType($aArgs, ['entityId', 'userId']); + ValidatorModel::arrayType($aArgs, ['select']); + + $aListInstances = DatabaseModel::select([ + 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'table' => ['listinstance, res_letterbox, mlb_coll_ext'], + 'where' => ['listinstance.res_id = res_letterbox.res_id', 'mlb_coll_ext.res_id = res_letterbox.res_id', 'confidentiality = ?', 'destination = ?', 'item_id = ?', 'closing_date is null'], + 'data' => ['Y', $aArgs['entityId'], $aArgs['userId']] + ]); + + return $aListInstances; + } } diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index ca951afdb19428b6c0a6f5618b4dfbd91ceb02f6..553a83dbaec7cb224be9dfae38573baa1ac97038 100644 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -16,6 +16,7 @@ namespace User\controllers; use Basket\models\BasketModel; use Basket\models\GroupBasketModel; +use Entity\models\ListInstanceModel; use Group\models\ServiceModel; use Entity\models\EntityModel; use Entity\models\ListTemplateModel; @@ -24,6 +25,7 @@ use History\controllers\HistoryController; use History\models\HistoryModel; use Notification\controllers\NotificationsEventsController; use Parameter\models\ParameterModel; +use Resource\models\ResModel; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; @@ -336,7 +338,7 @@ class UserController } return $response->withJson([ - 'baskets' => BasketModel::getBasketsByUserId(['userId' => $user['user_id']]), + 'baskets' => BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']]), 'redirectedBaskets' => BasketModel::getRedirectedBasketsByUserId(['userId' => $user['user_id']]) ]); } @@ -348,9 +350,20 @@ class UserController return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); } + $data = $request->getParams(); + + $check = Validator::stringType()->notEmpty()->validate($data['basketOwner']); + if (!$check) { + return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); + } + $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]); - BasketModel::deleteBasketRedirection(['userId' => $user['user_id'], 'basketId' => $aArgs['basketId']]); + if ($data['basketOwner'] != $user['user_id']) { + BasketModel::deleteBasketRedirection(['userId' => $data['basketOwner'], 'basketId' => $aArgs['basketId']]); + } else { + BasketModel::deleteBasketRedirection(['userId' => $user['user_id'], 'basketId' => $aArgs['basketId']]); + } HistoryController::add([ 'tableName' => 'user_abs', @@ -361,7 +374,7 @@ class UserController ]); return $response->withJson([ - 'baskets' => BasketModel::getBasketsByUserId(['userId' => $user['user_id']]), + 'baskets' => BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']]), 'redirectedBaskets' => BasketModel::getRedirectedBasketsByUserId(['userId' => $user['user_id']]) ]); } @@ -769,6 +782,69 @@ class UserController } $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]); + + $data = $request->getParams(); + if (!empty($data['mode'])) { + 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) { + $resIdsToReplace[] = $listInstance['res_id']; + } + if (!empty($resIdsToReplace)) { + ListInstanceModel::update([ + 'set' => ['item_id' => $data['newUser']], + 'where' => ['res_id in (?)', 'item_id = ?'], + 'data' => [$resIdsToReplace, $user['user_id']] + ]); + } + } else { + ListTemplateModel::delete([ + 'where' => ['object_id = ?', 'item_id = ?'], + 'data' => [$aArgs['entityId'], $user['user_id']] + ]); + + $resIds = ResModel::getOnView([ + 'select' => ['res_id'], + 'where' => ['confidentiality = ?', 'destination = ?', 'closing_date is null'], + 'data' => ['Y', $aArgs['entityId']] + ]); + foreach ($resIds as $resId) { + $listInstanceId = ListInstanceModel::get([ + 'select' => ['listinstance_id'], + 'where' => ['res_id = ?', 'item_id = ?', 'item_type = ?', 'difflist_type = ?', 'item_mode = ?'], + 'data' => [$resId, $user['user_id'], 'user_id', 'VISA_CIRCUIT', 'sign'] + ]); + + if (!empty($listInstanceId)) { + ListInstanceModel::update([ + 'set' => ['process_date' => null], + 'where' => ['res_id = ?', 'difflist_type = ?', 'listinstance_id = ?'], + 'data' => [$resId, 'VISA_CIRCUIT', $listInstanceId[0]['listinstance_id'] - 1] + ]); + } + } + + $listInstances = ListInstanceModel::getWithConfidentiality(['select' => ['listinstance.res_id', 'listinstance.difflist_type'], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]); + $resIdsToReplace = []; + foreach ($listInstances as $listInstance) { + $resIdsToReplace[] = $listInstance['res_id']; + } + if (!empty($resIdsToReplace)) { + ListInstanceModel::update([ + 'set' => ['process_comment' => '[DEL] supprimé - changement d\'entité', 'process_date' => 'CURRENT_TIMESTAMP'], + 'where' => ['res_id in (?)', 'item_id = ?'], + 'data' => [$resIdsToReplace, $user['user_id']] + ]); + } + } + } + $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $user['user_id']]); UserEntityModel::deleteUserEntity(['id' => $aArgs['id'], 'entityId' => $aArgs['entityId']]); @@ -791,6 +867,29 @@ class UserController ]); } + public function isEntityDeletable(Request $request, Response $response, array $aArgs) + { + $error = $this->hasUsersRights(['id' => $aArgs['id']]); + if (!empty($error['error'])) { + return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); + } + if (empty(EntityModel::getById(['entityId' => $aArgs['entityId']]))) { + return $response->withStatus(400)->withJson(['errors' => 'Entity not found']); + } + + $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]); + + $listInstances = ListInstanceModel::getWithConfidentiality(['select' => [1], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]); + + $listTemplates = ListTemplateModel::get(['select' => [1], 'where' => ['object_id = ?', 'item_type = ?', 'item_id = ?'], 'data' => [$aArgs['entityId'], 'user_id', $user['user_id']]]); + + if (empty($listInstances) && empty($listTemplates)) { + return $response->withJson(['isDeletable' => true]); + } else { + return $response->withJson(['isDeletable' => false]); + } + } + public function updateBasketsDisplay(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]);