diff --git a/sql/develop.sql b/sql/develop.sql index 5ab9b70cbfb4100a2bd62fefd8e0abefe604b803..9f4c6eda34b150c6ccec3da0d643b69753168dbb 100755 --- a/sql/develop.sql +++ b/sql/develop.sql @@ -36,7 +36,7 @@ ALTER TABLE usergroups ADD COLUMN indexation_parameters jsonb NOT NULL DEFAULT ' /* BASKETS LIST EVENT */ ALTER TABLE groupbasket DROP COLUMN IF EXISTS list_event; ALTER TABLE groupbasket ADD COLUMN list_event character varying(255); -UPDATE groupbasket SET list_event = 'processDoc' +UPDATE groupbasket SET list_event = 'processDocument' FROM ( SELECT basket_id, group_id FROM actions_groupbaskets ag @@ -52,7 +52,7 @@ FROM ( WHERE ag.default_action_list = 'Y' AND a.component = 'viewDoc' ) AS subquery WHERE groupbasket.basket_id = subquery.basket_id AND groupbasket.group_id = subquery.group_id; -UPDATE groupbasket SET list_event = 'visaMail' +UPDATE groupbasket SET list_event = 'signatureBookAction' FROM ( SELECT basket_id, group_id FROM actions_groupbaskets ag @@ -80,6 +80,7 @@ CREATE TABLE folders public boolean NOT NULL, user_id INTEGER NOT NULL, parent_id INTEGER, + level INTEGER, CONSTRAINT folders_pkey PRIMARY KEY (id) ) WITH (OIDS=FALSE); diff --git a/sql/structure.sql b/sql/structure.sql index 37b0d3012c2fe62d7cf175a8c9bcd064b817fa17..fcf1ca88e5254e45ac4bdfc67b87c7f2532667b1 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -565,6 +565,7 @@ CREATE TABLE folders public boolean NOT NULL, user_id INTEGER NOT NULL, parent_id INTEGER, + level INTEGER, CONSTRAINT folders_pkey PRIMARY KEY (id) ) WITH (OIDS=FALSE); diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php index 6b4fb1f70d13ec377b3486dde3951f09acb451d3..54d4c3549cc075f7e3b5fde865e5d715dc80cd1f 100755 --- a/src/app/folder/controllers/FolderController.php +++ b/src/app/folder/controllers/FolderController.php @@ -20,27 +20,38 @@ use History\controllers\HistoryController; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; -use User\models\UserModel; class FolderController { public function get(Request $request, Response $response) { - $folders = FolderModel::get(); - - foreach ($folders as $key => $value) { - $folders[$key]['icon'] = "fa fa-folder-open"; - if (empty($value['parent_id'])) { - $folders[$key]['parent'] = '#'; + $folders = FolderModel::get(['order_by' => ['level']]); + + $tree = []; + foreach ($folders as $folder) { + $insert = [ + 'name' => $folder['label'], + 'expandable' => true, + 'id' => $folder['id'], + 'label' => $folder['label'], + 'public' => $folder['public'], + 'user_id' => $folder['user_id'], + 'parent_id' => $folder['parent_id'], + 'level' => $folder['level'], + ]; + if ($folder['level'] == 0) { + $tree[] = $insert; } else { - $folders[$key]['parent'] = $value['parent_id']; + foreach ($tree as $key => $branch) { + if ($branch['id'] == $folder['parent_id']) { + array_splice($tree, $key + 1, 0, [$insert]); + break; + } + } } - - $folders[$key]['state']['opened'] = true; - $folders[$key]['text'] = $value['label']; } - return $response->withJson(['folders' => $folders]); + return $response->withJson(['folders' => $tree]); } public function getById(Request $request, Response $response, array $aArgs) @@ -77,25 +88,32 @@ class FolderController if (!empty($data['parent_id']) && !Validator::intval()->validate($data['parent_id'])) { return $response->withStatus(400)->withJson(['errors' => 'Body parent_id is not a numeric']); } - if (!Validator::boolVal()->validate($data['public'])) { - return $response->withStatus(400)->withJson(['errors' => 'Body public is empty or not a boolean']); - } - - $currentUser = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]); //TODO Check rights + if (empty($data['parent_id'])) { + $data['parent_id'] = 0; + $level = 0; + $owner = $GLOBALS['id']; + $public = false; + } else { + $folder = FolderModel::getById(['id' => $data['parent_id'], 'select' => ['user_id', 'public', 'level']]); + $owner = $folder['user_id']; + $public = $folder['public']; + $level = $folder['level'] + 1; + } + $id = FolderModel::create([ - 'label' => $data['label'], - 'public' => $data['public'], - 'user_id' => $currentUser['id'], - 'parent_id' => $data['parent_id'] + 'label' => $data['label'], + 'public' => $public, + 'user_id' => $owner, + 'parent_id' => $data['parent_id'], + 'level' => $level ]); - if (!empty($data['sharing']['entities'])) { - //TODO check entities exists - - foreach ($data['sharing']['entities'] as $entity) { + if (!empty($entitiesSharing)) { + //TODO $entitiesSharing = Get entities sharing from n-1 + foreach ($entitiesSharing as $entity) { EntityFolderModel::create([ 'folder_id' => $id, 'entity_id' => $entity['entity_id'], @@ -135,11 +153,23 @@ class FolderController //TODO Check rights + if (empty($data['parent_id'])) { + $data['parent_id'] = 0; + $level = 0; + $public = false; + } else { + $folder = FolderModel::getById(['id' => $data['parent_id'], 'select' => ['public', 'level']]); + $public = $folder['public']; + $level = $folder['level'] + 1; + // Get entities sharing from n-1 + } + FolderModel::update([ 'set' => [ 'label' => $data['label'], - 'public' => empty($data['public']) ? 'false' : 'true', - 'parent_id' => $data['parent_id'] + 'public' => empty($public) ? 'false' : 'true', + 'parent_id' => $data['parent_id'], + 'level' => $level ], 'where' => ['id = ?'], 'data' => [$aArgs['id']] @@ -194,7 +224,7 @@ class FolderController 'tableName' => 'folder', 'recordId' => $aArgs['id'], 'eventType' => 'DEL', - 'info' => _BASKET_SUPPRESSION . " : {$aArgs['id']}", + 'info' => _FOLDER_SUPPRESSION . " : {$aArgs['id']}", 'moduleId' => 'folder', 'eventId' => 'folderSuppression', ]); diff --git a/src/app/folder/models/FolderModelAbstract.php b/src/app/folder/models/FolderModelAbstract.php index f9ec8bc5206723ef4d2167597249c1f7daa978b8..795d1c3b395673325c785e35990ddff496a2cb68 100755 --- a/src/app/folder/models/FolderModelAbstract.php +++ b/src/app/folder/models/FolderModelAbstract.php @@ -22,7 +22,8 @@ class FolderModelAbstract $folders = DatabaseModel::select([ 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], - 'table' => ['folders'] + 'table' => ['folders'], + 'order_by' => empty($aArgs['order_by']) ? ['label'] : $aArgs['order_by'] ]); return $folders; @@ -47,7 +48,7 @@ class FolderModelAbstract { ValidatorModel::notEmpty($aArgs, ['user_id', 'label']); ValidatorModel::stringType($aArgs, ['label']); - ValidatorModel::intVal($aArgs, ['user_id', 'parent_id']); + ValidatorModel::intVal($aArgs, ['user_id', 'parent_id', 'level']); ValidatorModel::boolType($aArgs, ['public']); $nextSequenceId = DatabaseModel::getNextSequenceValue(['sequenceId' => 'folders_id_seq']); @@ -59,7 +60,8 @@ class FolderModelAbstract 'label' => $aArgs['label'], 'public' => empty($aArgs['public']) ? 'false' : 'true', 'user_id' => $aArgs['user_id'], - 'parent_id' => $aArgs['parent_id'] + 'parent_id' => $aArgs['parent_id'], + 'level' => $aArgs['level'] ] ]); diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php index 30263060feaa0b8c67237ff21277996a8f828726..3ca28b8b3ded42d7c12782cbe46c34f46bd18631 100755 --- a/src/core/lang/lang-en.php +++ b/src/core/lang/lang-en.php @@ -497,3 +497,7 @@ define("_SIGNATORY", "Signatory"); define("_VISA_USER_MIN", "Visa user"); define("_NOTE_USER", "Note user"); define("_WF_SEND_TO", "Send to : "); + +define("_FOLDER_CREATION", "Folder creation"); +define("_FOLDER_MODIFICATION", "Folder modification"); +define("_FOLDER_SUPPRESSION", "Folder suppression"); \ No newline at end of file diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php index 9c92b056a4617e6a71f48c4662b8a3af996d788b..7554199f89ec38c165e52c7dc11b0766109431dc 100755 --- a/src/core/lang/lang-fr.php +++ b/src/core/lang/lang-fr.php @@ -496,3 +496,7 @@ define("_SIGNATORY", "Signataire"); define("_VISA_USER_MIN", "Viseur"); define("_NOTE_USER", "Annotateur"); define("_WF_SEND_TO", "Envoyé à : "); + +define("_FOLDER_CREATION", "Dossier créé"); +define("_FOLDER_MODIFICATION", "Dossier modifié"); +define("_FOLDER_SUPPRESSION", "Dossier supprimé"); diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php index f0ba7717b0de9cfc5ae503ff1f910cd055bfa622..790339006a954b82fd75c6a2f00948e4d6de47cd 100755 --- a/src/core/lang/lang-nl.php +++ b/src/core/lang/lang-nl.php @@ -501,3 +501,7 @@ define("_SIGNATORY", "Signatory_TO_TRANSLATE"); define("_VISA_USER_MIN", "Visa user_TO_TRANSLATE"); define("_NOTE_USER", "Note user_TO_TRANSLATE"); define("_WF_SEND_TO", "Send to : _TO_TRANSLATE"); + +define("_FOLDER_CREATION", "Folder creation_TO_TRANSLATE"); +define("_FOLDER_MODIFICATION", "Folder modification_TO_TRANSLATE"); +define("_FOLDER_SUPPRESSION", "Folder suppression_TO_TRANSLATE"); \ No newline at end of file