diff --git a/rest/index.php b/rest/index.php index 5c722e2522fff3d9edbfdd560134c84a661f9652..e84d6d64e1490ed0476afcd7ce1653bbefefe7a3 100755 --- a/rest/index.php +++ b/rest/index.php @@ -172,6 +172,20 @@ $app->put('/entities/{id}/status', \Entity\controllers\EntityController::class . $app->get('/entityTypes', \Entity\controllers\EntityController::class . ':getTypes'); $app->post('/entitySeparators', \Entity\controllers\EntitySeparatorController::class . ':create'); +//ExternalSignatoryBook +$app->get('/xParaphWorkflow', \ExternalSignatoryBook\controllers\XParaphController::class . ':getWorkflow'); +$app->post('/xParaphAccount', \ExternalSignatoryBook\controllers\XParaphController::class . ':createXparaphAccount'); +$app->delete('/xParaphAccount', \ExternalSignatoryBook\controllers\XParaphController::class . ':deleteXparaphAccount'); + +//Folders +$app->get('/folders', \Folder\controllers\FolderController::class . ':get'); +$app->post('/folders', \Folder\controllers\FolderController::class . ':create'); +$app->get('/folders/{id}', \Folder\controllers\FolderController::class . ':getById'); +$app->put('/folders/{id}', \Folder\controllers\FolderController::class . ':update'); +$app->delete('/folders/{id}', \Folder\controllers\FolderController::class . ':delete'); +$app->get('/folders/{id}/resources', \Folder\controllers\FolderController::class . ':getResourcesById'); +$app->put('/folders/{id}/sharing', \Folder\controllers\FolderController::class . ':sharing'); + //Groups $app->get('/groups', \Group\controllers\GroupController::class . ':get'); $app->post('/groups', \Group\controllers\GroupController::class . ':create'); @@ -184,14 +198,6 @@ $app->put('/groups/{id}/indexing', \Group\controllers\GroupController::class . ' $app->put('/groups/{id}/services/{serviceId}', \Group\controllers\GroupController::class . ':updateService'); $app->put('/groups/{id}/reassign/{newGroupId}', \Group\controllers\GroupController::class . ':reassignUsers'); -//Folders -$app->get('/folders', \Folder\controllers\FolderController::class . ':get'); -$app->post('/folders', \Folder\controllers\FolderController::class . ':create'); -$app->get('/folders/{id}', \Folder\controllers\FolderController::class . ':getById'); -$app->put('/folders/{id}', \Folder\controllers\FolderController::class . ':update'); -$app->put('/folders/{id}/sharing', \Folder\controllers\FolderController::class . ':sharing'); -$app->delete('/folders/{id}', \Folder\controllers\FolderController::class . ':delete'); - //Histories $app->get('/histories', \History\controllers\HistoryController::class . ':get'); $app->get('/histories/users/{userSerialId}', \History\controllers\HistoryController::class . ':getByUserId'); @@ -257,7 +263,7 @@ $app->delete('/priorities/{id}', \Priority\controllers\PriorityController::class $app->get('/sortedPriorities', \Priority\controllers\PriorityController::class . ':getSorted'); $app->put('/sortedPriorities', \Priority\controllers\PriorityController::class . ':updateSort'); -// Reconciliation +//Reconciliation $app->post('/reconciliation/add', \Attachment\controllers\ReconciliationController::class . ':create'); $app->get('/reconciliation/check', \Attachment\controllers\ReconciliationController::class . ':checkAttachment'); @@ -399,8 +405,4 @@ $app->post('/saveMessageExchangeReview', \Sendmail\Controllers\MessageExchangeRe $app->get('/maarchParapheur/user/{id}/picture', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':getUserPicture'); -$app->get('/xParaphWorkflow', \ExternalSignatoryBook\controllers\XParaphController::class . ':getWorkflow'); -$app->post('/xParaphAccount', \ExternalSignatoryBook\controllers\XParaphController::class . ':createXparaphAccount'); -$app->delete('/xParaphAccount', \ExternalSignatoryBook\controllers\XParaphController::class . ':deleteXparaphAccount'); - $app->run(); diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php index 5d0758e3033ebff25e1535d02c2cf6586b164973..78a5f06ce88dae453d9dce462f42c8f57314bff1 100755 --- a/src/app/folder/controllers/FolderController.php +++ b/src/app/folder/controllers/FolderController.php @@ -27,6 +27,7 @@ use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; use SrcCore\models\DatabaseModel; +use SrcCore\models\ValidatorModel; use User\models\UserModel; class FolderController @@ -110,78 +111,6 @@ class FolderController } } - $foldersResources = ResourceFolderModel::get(['select' => ['res_id'], 'where' => ['folder_id = ?'], 'data' => [$args['id']]]); - $foldersResources = array_column($foldersResources, 'res_id'); - - $queryParams = $request->getQueryParams(); - $queryParams['offset'] = (empty($queryParams['offset']) || !is_numeric($queryParams['offset']) ? 0 : (int)$queryParams['offset']); - $queryParams['limit'] = (empty($queryParams['limit']) || !is_numeric($queryParams['limit']) ? 10 : (int)$queryParams['limit']); - - $allQueryData = ResourceListController::getResourcesListQueryData(['data' => $queryParams]); - if (!empty($allQueryData['order'])) { - $data['order'] = $allQueryData['order']; - } - - $rawResources = ResourceListModel::getOnView([ - 'select' => ['res_id'], - 'table' => $allQueryData['table'], - 'leftJoin' => $allQueryData['leftJoin'], - 'where' => array_merge(['res_id in (?)'], $allQueryData['where']), - 'data' => array_merge([$foldersResources], $allQueryData['queryData']), - 'orderBy' => empty($data['order']) ? ['creation_date'] : [$data['order']] - ]); - - $resIds = ResourceListController::getIdsWithOffsetAndLimit(['resources' => $rawResources, 'offset' => $queryParams['offset'], 'limit' => $queryParams['limit']]); - - $formattedResources = []; - if (!empty($resIds)) { - $excludeAttachmentTypes = ['converted_pdf', 'print_folder']; - if (!ServiceModel::hasService(['id' => 'view_documents_with_notes', 'userId' => $GLOBALS['userId'], 'location' => 'attachments', 'type' => 'use'])) { - $excludeAttachmentTypes[] = 'document_with_notes'; - } - - $attachments = AttachmentModel::getOnView([ - 'select' => ['COUNT(res_id)', 'res_id_master'], - 'where' => ['res_id_master in (?)', 'status not in (?)', 'attachment_type not in (?)', '((status = ? AND typist = ?) OR status != ?)'], - 'data' => [$resIds, ['DEL', 'OBS'], $excludeAttachmentTypes, 'TMP', $GLOBALS['userId'], 'TMP'], - 'groupBy' => ['res_id_master'] - ]); - - $select = [ - 'res_letterbox.res_id', 'res_letterbox.subject', 'res_letterbox.barcode', 'mlb_coll_ext.alt_identifier', - 'status.label_status AS "status.label_status"', 'status.img_filename AS "status.img_filename"' - ]; - $tableFunction = ['status', 'mlb_coll_ext']; - $leftJoinFunction = ['res_letterbox.status = status.id', 'res_letterbox.res_id = mlb_coll_ext.res_id']; - - $order = 'CASE res_letterbox.res_id '; - foreach ($resIds as $key => $resId) { - $order .= "WHEN {$resId} THEN {$key} "; - } - $order .= 'END'; - - $resources = ResourceListModel::getOnResource([ - 'select' => $select, - 'table' => $tableFunction, - 'leftJoin' => $leftJoinFunction, - 'where' => ['res_letterbox.res_id in (?)'], - 'data' => [$resIds], - 'orderBy' => [$order] - ]); - - $formattedResources = ResourceListController::getFormattedResources([ - 'resources' => $resources, - 'userId' => $GLOBALS['id'], - 'attachments' => $attachments, - 'checkLocked' => false - ]); - } - - $folder['resources'] = $formattedResources; - $folder['countResources'] = count($rawResources); - - //TODO Get default action - return $response->withJson(['folder' => $folder]); } @@ -418,6 +347,92 @@ class FolderController return true; } + public function getResourcesById(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'); + + $formattedResources = []; + $count = 0; + if (!empty($foldersResources)) { + $queryParams = $request->getQueryParams(); + $queryParams['offset'] = (empty($queryParams['offset']) || !is_numeric($queryParams['offset']) ? 0 : (int)$queryParams['offset']); + $queryParams['limit'] = (empty($queryParams['limit']) || !is_numeric($queryParams['limit']) ? 10 : (int)$queryParams['limit']); + + $allQueryData = ResourceListController::getResourcesListQueryData(['data' => $queryParams]); + if (!empty($allQueryData['order'])) { + $data['order'] = $allQueryData['order']; + } + + $rawResources = ResourceListModel::getOnView([ + 'select' => ['res_id'], + 'table' => $allQueryData['table'], + 'leftJoin' => $allQueryData['leftJoin'], + 'where' => array_merge(['res_id in (?)'], $allQueryData['where']), + 'data' => array_merge([$foldersResources], $allQueryData['queryData']), + 'orderBy' => empty($data['order']) ? ['creation_date'] : [$data['order']] + ]); + + $resIds = ResourceListController::getIdsWithOffsetAndLimit(['resources' => $rawResources, 'offset' => $queryParams['offset'], 'limit' => $queryParams['limit']]); + + $formattedResources = []; + if (!empty($resIds)) { + $excludeAttachmentTypes = ['converted_pdf', 'print_folder']; + if (!ServiceModel::hasService(['id' => 'view_documents_with_notes', 'userId' => $GLOBALS['userId'], 'location' => 'attachments', 'type' => 'use'])) { + $excludeAttachmentTypes[] = 'document_with_notes'; + } + + $attachments = AttachmentModel::getOnView([ + 'select' => ['COUNT(res_id)', 'res_id_master'], + 'where' => ['res_id_master in (?)', 'status not in (?)', 'attachment_type not in (?)', '((status = ? AND typist = ?) OR status != ?)'], + 'data' => [$resIds, ['DEL', 'OBS'], $excludeAttachmentTypes, 'TMP', $GLOBALS['userId'], 'TMP'], + 'groupBy' => ['res_id_master'] + ]); + + $select = [ + 'res_letterbox.res_id', 'res_letterbox.subject', 'res_letterbox.barcode', 'mlb_coll_ext.alt_identifier', + 'status.label_status AS "status.label_status"', 'status.img_filename AS "status.img_filename"', 'priorities.color AS "priorities.color"' + ]; + $tableFunction = ['status', 'mlb_coll_ext', 'priorities']; + $leftJoinFunction = ['res_letterbox.status = status.id', 'res_letterbox.res_id = mlb_coll_ext.res_id', 'res_letterbox.priority = priorities.id']; + + $order = 'CASE res_letterbox.res_id '; + foreach ($resIds as $key => $resId) { + $order .= "WHEN {$resId} THEN {$key} "; + } + $order .= 'END'; + + $resources = ResourceListModel::getOnResource([ + 'select' => $select, + 'table' => $tableFunction, + 'leftJoin' => $leftJoinFunction, + 'where' => ['res_letterbox.res_id in (?)'], + 'data' => [$resIds], + 'orderBy' => [$order] + ]); + + $formattedResources = ResourceListController::getFormattedResources([ + 'resources' => $resources, + 'userId' => $GLOBALS['id'], + 'attachments' => $attachments, + 'checkLocked' => false + ]); + } + + $count = count($rawResources); + } + + return $response->withJson(['resources' => $formattedResources, 'count' => $count]); + } + // login (string) : Login of user connected // folderId (integer) : Check specific folder // edition (boolean) : whether user can edit or not @@ -459,4 +474,32 @@ class FolderController return $folders; } + + private static function hasFolder(array $args) + { + ValidatorModel::notEmpty($args, ['id', 'userId']); + ValidatorModel::intVal($args, ['id', 'userId']); + + + $user = UserModel::getById(['id' => $args['userId'], 'select' => ['user_id']]); + + $entities = UserModel::getEntitiesById(['userId' => $user['user_id']]); + $entities = array_column($entities, 'id'); + + if (empty($entities)) { + $entities = [0]; + } + + $folders = FolderModel::getWithEntities([ + 'select' => [1], + 'where' => ['folders.id = ?', '(user_id = ? OR entity_id in (?))'], + 'data' => [$args['id'], $args['userId'], $entities] + ]); + + if (empty($folders)) { + return false; + } + + return true; + } } diff --git a/src/app/folder/models/FolderModelAbstract.php b/src/app/folder/models/FolderModelAbstract.php index 0db2fae9ce8e00afe25ac907621ddd4eca731bce..65c487bee02ce10ff3ff63fed2e49168b90fd7ac 100755 --- a/src/app/folder/models/FolderModelAbstract.php +++ b/src/app/folder/models/FolderModelAbstract.php @@ -120,6 +120,21 @@ class FolderModelAbstract return true; } + public static function getWithEntities(array $args = []) + { + ValidatorModel::arrayType($args, ['select', 'where', 'data']); + + $folders = DatabaseModel::select([ + 'select' => empty($args['select']) ? ['*'] : $args['select'], + 'table' => ['folders', 'entities_folders'], + 'left_join' => ['folders.id = entities_folders.folder_id'], + 'where' => empty($args['where']) ? [] : $args['where'], + 'data' => empty($args['data']) ? [] : $args['data'], + ]); + + return $folders; + } + public static function getWithEntitiesAndResources(array $args = []) { ValidatorModel::arrayType($args, ['select', 'where', 'data']); diff --git a/src/app/resource/controllers/ResourceListController.php b/src/app/resource/controllers/ResourceListController.php index 3b7f0518e3980f50da1fd00d6617c3c58d235e9c..f1b19c05b44ed801c811e5b056c5d9e1bb11ce5e 100644 --- a/src/app/resource/controllers/ResourceListController.php +++ b/src/app/resource/controllers/ResourceListController.php @@ -980,7 +980,6 @@ class ResourceListController public static function getIdsWithOffsetAndLimit(array $args) { - ValidatorModel::notEmpty($args, ['resources']); ValidatorModel::arrayType($args, ['resources']); ValidatorModel::intVal($args, ['offset', 'limit']);