Skip to content
Snippets Groups Projects
Commit 50878e8f authored by Guillaume Heurtier's avatar Guillaume Heurtier
Browse files

FEAT #12014 TIME 4:00 shared folders can be updated or deleted if children are shared as well

parent 6e75f3c9
No related branches found
No related tags found
No related merge requests found
......@@ -114,17 +114,7 @@ class FolderController
if ($folder['public']) {
$entitiesFolder = EntityFolderModel::getByFolderId(['folder_id' => $args['id'], 'select' => ['entities_folders.entity_id', 'entities_folders.edition', 'entities.entity_label']]);
foreach ($entitiesFolder as $value) {
$edition = $value['edition'];
// Check if parent is in perimeter
if ($edition) {
$edition = !empty(FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $folder['parent_id'], 'edition' => true]));
}
// Check if children are in perimeter
if ($edition) {
$edition = FolderController::areChildrenInPerimeter(['folderId' => $args['id']]);
}
$folder['sharing']['entities'][] = ['entity_id' => $value['entity_id'], 'edition' => $edition, 'label' => $value['entity_label']];
$folder['sharing']['entities'][] = ['entity_id' => $value['entity_id'], 'edition' => $value['edition'], 'label' => $value['entity_label']];
}
}
......@@ -217,10 +207,7 @@ class FolderController
$data['parent_id'] = null;
$level = 0;
} else {
$folderParent = FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $data['parent_id']]);
if (empty($folderParent[0])) {
return $response->withStatus(400)->withJson(['errors' => 'Parent Folder not found or out of your perimeter']);
}
$folderParent = FolderModel::getById(['id' => $data['parent_id'], 'select' => ['folders.id', 'parent_id', 'level']]);
$level = $folderParent[0]['level'] + 1;
}
......@@ -228,14 +215,29 @@ class FolderController
FolderModel::update([
'set' => [
'label' => $data['label'],
'parent_id' => $data['parent_id'],
'level' => $level
'label' => $data['label']
],
'where' => ['id = ?'],
'data' => [$aArgs['id']]
]);
if ($folder[0]['parent_id'] != $data['parent_id']) {
$childrenInPerimeter = FolderController::areChildrenInPerimeter(['folderId' => $aArgs['id']]);
if ($childrenInPerimeter) {
FolderModel::update([
'set' => [
'parent_id' => $data['parent_id'],
'level' => $level
],
'where' => ['id = ?'],
'data' => [$aArgs['id']]
]);
} else {
return $response->withStatus(400)->withJson(['errors' => 'Cannot move folder because at least one folder is out of your perimeter']);
}
}
HistoryController::add([
'tableName' => 'folders',
'recordId' => $aArgs['id'],
......@@ -262,6 +264,11 @@ class FolderController
return $response->withStatus(400)->withJson(['errors' => 'Body sharing/entities does not exists']);
}
$childrenInPerimeter = FolderController::areChildrenInPerimeter(['folderId' => $aArgs['id']]);
if (!$childrenInPerimeter) {
return $response->withStatus(400)->withJson(['errors' => 'Cannot share/unshare folder because at least one folder is out of your perimeter']);
}
DatabaseModel::beginTransaction();
$sharing = FolderController::folderSharing(['folderId' => $aArgs['id'], 'public' => $data['public'], 'sharing' => $data['sharing']]);
if (!$sharing) {
......@@ -312,10 +319,7 @@ class FolderController
$folderChild = FolderModel::getChild(['id' => $aArgs['folderId'], 'select' => ['id']]);
if (!empty($folderChild)) {
foreach ($folderChild as $child) {
$sharing = FolderController::folderSharing(['folderId' => $child['id'], 'public' => $aArgs['public'], 'sharing' => $aArgs['sharing']]);
if (!$sharing) {
return false;
}
FolderController::folderSharing(['folderId' => $child['id'], 'public' => $aArgs['public'], 'sharing' => $aArgs['sharing']]);
}
}
......
......@@ -440,8 +440,8 @@ export class FolderTreeComponent implements OnInit {
if (data.folder.user_id !== currentUserId && node.public) {
canAdd = false;
}
node.canAdd = canAdd;
node.edition = (canAdmin || data.folder.user_id === currentUserId) ? true : false;
node.canAdd = node.edition;
}),
).subscribe();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment