diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php index dcc1eda7055e2b61c1b752efb9e9ea925306f0e7..7296cf8f2a5f93512ae5e3764fae75bfeb9a4f3c 100755 --- a/src/app/folder/controllers/FolderController.php +++ b/src/app/folder/controllers/FolderController.php @@ -192,6 +192,9 @@ class FolderController if ($data['parent_id'] == $aArgs['id']) { return $response->withStatus(400)->withJson(['errors' => 'Parent_id and id can not be the same']); } + if (FolderController::isParentFolder(['parent_id' => $data['parent_id'], 'id' => $aArgs['id']])) { + return $response->withStatus(400)->withJson(['errors' => 'Id is a parent of parent_id']); + } $folder = FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $aArgs['id'], 'edition' => true]); if (empty($folder[0])) { @@ -658,4 +661,15 @@ class FolderController return true; } + + private static function isParentFolder(array $args) + { + $parentInfo = FolderModel::getById(['id' => $args['parent_id'], 'select' => ['folders.id', 'parent_id']]); + if (empty($parentInfo) || $parentInfo['id'] == $args['id']) { + return true; + } elseif (!empty($parentInfo['parent_id'])) { + return FolderController::isParentFolder(['parent_id' => $parentInfo['parent_id'], 'id' => $args['id']]); + } + return false; + } } diff --git a/src/app/folder/models/FolderModelAbstract.php b/src/app/folder/models/FolderModelAbstract.php index f5f3fa19f3a6ae8669e6a4e181b729b9b0fd80bc..c0c4f8b1825ca4ced141ce7e6fafff3c7149c550 100755 --- a/src/app/folder/models/FolderModelAbstract.php +++ b/src/app/folder/models/FolderModelAbstract.php @@ -25,7 +25,7 @@ class FolderModelAbstract 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], 'table' => ['folders', 'entities_folders'], 'left_join' => ['folders.id = entities_folders.folder_id'], - 'where' => ['id = ?'], + 'where' => ['folders.id = ?'], 'data' => [$aArgs['id']] ]);