diff --git a/rest/index.php b/rest/index.php index 667d752c521e475927f924a5fcbdbf3944c88c61..0c7970cfdee9934208e05cb51d91cd6fe5d091d3 100755 --- a/rest/index.php +++ b/rest/index.php @@ -185,6 +185,7 @@ $app->put('/folders/{id}', \Folder\controllers\FolderController::class . ':updat $app->delete('/folders/{id}', \Folder\controllers\FolderController::class . ':delete'); $app->get('/folders/{id}/resources', \Folder\controllers\FolderController::class . ':getResourcesById'); $app->post('/folders/{id}/resources', \Folder\controllers\FolderController::class . ':addResourcesById'); +$app->delete('/folders/{id}/resources', \Folder\controllers\FolderController::class . ':removeResourcesById'); $app->put('/folders/{id}/sharing', \Folder\controllers\FolderController::class . ':sharing'); //Groups diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php index ca020240559619118efcddeeda4cf78c972e46b8..c3bdb28209435a1a7b00d8c0966b1f296fda3633 100755 --- a/src/app/folder/controllers/FolderController.php +++ b/src/app/folder/controllers/FolderController.php @@ -453,6 +453,10 @@ class FolderController } $resourcesToClassify = array_diff($body['resources'], $foldersResources); + if (empty($resourcesToClassify)) { + return $response->withJson(['countResources' => count($foldersResources)]); + } + if (!ResController::hasRightByResId(['resId' => $resourcesToClassify, 'userId' => $GLOBALS['id']])) { return $response->withStatus(400)->withJson(['errors' => 'Resources out of perimeter']); } @@ -464,6 +468,40 @@ class FolderController return $response->withJson(['countResources' => count($foldersResources) + count($resourcesToClassify)]); } + public function removeResourcesById(Request $request, Response $response, array $args) + { + if (!Validator::numeric()->notEmpty()->validate($args['id'])) { + return $response->withStatus(400)->withJson(['errors' => 'Route id is not an integer']); + } + + if (!FolderController::hasFolder(['id' => $args['id'], 'userId' => $GLOBALS['id']])) { + return $response->withStatus(400)->withJson(['errors' => 'Folder out of perimeter']); + } + + $foldersResources = ResourceFolderModel::get(['select' => ['res_id'], 'where' => ['folder_id = ?'], 'data' => [$args['id']]]); + $foldersResources = array_column($foldersResources, 'res_id'); + + $body = $request->getParsedBody(); + if (!Validator::arrayType()->notEmpty()->validate($body['resources'])) { + return $response->withStatus(400)->withJson(['errors' => 'Body resources is empty or not an array']); + } + + $resourcesToUnclassify = array_intersect($foldersResources, $body['resources']); + if (empty($resourcesToUnclassify)) { + return $response->withJson(['countResources' => count($foldersResources)]); + } + + if (!ResController::hasRightByResId(['resId' => $resourcesToUnclassify, 'userId' => $GLOBALS['id']])) { + return $response->withStatus(400)->withJson(['errors' => 'Resources out of perimeter']); + } + + foreach ($resourcesToUnclassify as $value) { + ResourceFolderModel::delete(['where' => ['folder_id = ?', 'res_id = ?'], 'data' => [$args['id'], $value]]); + } + + return $response->withJson(['countResources' => count($foldersResources) - count($resourcesToUnclassify)]); + } + // login (string) : Login of user connected // folderId (integer) : Check specific folder // edition (boolean) : whether user can edit or not