diff --git a/src/app/resource/controllers/UsersFollowedResourcesController.php b/src/app/resource/controllers/UsersFollowedResourcesController.php index f9d4745a6ae1685358cef85a5b76301071ba099c..8e2c200e2d4f180fa33d76cf25427b037481e14f 100644 --- a/src/app/resource/controllers/UsersFollowedResourcesController.php +++ b/src/app/resource/controllers/UsersFollowedResourcesController.php @@ -15,6 +15,9 @@ namespace Resource\controllers; +use Attachment\models\AttachmentModel; +use Group\controllers\PrivilegeController; +use Resource\models\ResourceListModel; use Resource\models\UsersFollowedResourcesModel; use Slim\Http\Request; use Slim\Http\Response; @@ -34,52 +37,122 @@ class UsersFollowedResourcesController public function unFollow(Request $request, Response $response, array $args) { - UsersFollowedResourcesController::unFollowResource($args); - - return $response->withStatus(204); - } - - public function getFollowedResources(Request $request, Response $response, array $args) - { - $followed = UsersFollowedResourcesModel::get([ - 'where' => ['user_id = ?'], - 'data' => [$GLOBALS['id']] - ]); - - return $response->withJson($followed); - } + if (!ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])){ + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } - public static function followResource(array $args) - { $following = UsersFollowedResourcesModel::get([ 'where' => ['user_id = ?', 'res_id = ?'], 'data' => [$GLOBALS['id'], $args['resId']] ]); - if (!empty($following)) { - return true; + if (empty($following)) { + return $response->withStatus(204); } - UsersFollowedResourcesModel::create([ + UsersFollowedResourcesModel::delete([ 'userId' => $GLOBALS['id'], 'resId' => $args['resId'] ]); - return true; + return $response->withStatus(204); } - public static function unFollowResource(array $args) + public function getFollowedResources(Request $request, Response $response) + { + $followedResources = UsersFollowedResourcesModel::get(['select' => ['res_id'], 'where' => ['user_id = ?'], 'data' => [$GLOBALS['id']]]); + $followedResources = array_column($followedResources, 'res_id'); + + $formattedResources = []; + $allResources = []; + $count = 0; + if (!empty($followedResources)) { + $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([$followedResources], $allQueryData['queryData']), + 'orderBy' => empty($data['order']) ? ['creation_date'] : [$data['order']] + ]); + + $resIds = ResourceListController::getIdsWithOffsetAndLimit(['resources' => $rawResources, 'offset' => $queryParams['offset'], 'limit' => $queryParams['limit']]); + + foreach ($rawResources as $resource) { + $allResources[] = $resource['res_id']; + } + + $formattedResources = []; + if (!empty($resIds)) { + $excludeAttachmentTypes = ['converted_pdf', 'print_folder']; + if (!PrivilegeController::hasPrivilege(['privilegeId' => 'view_documents_with_notes', 'userId' => $GLOBALS['id']])) { + $excludeAttachmentTypes[] = 'document_with_notes'; + } + + $attachments = AttachmentModel::get([ + '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['id'], 'TMP'], + 'groupBy' => ['res_id_master'] + ]); + + $select = [ + 'res_letterbox.res_id', 'res_letterbox.subject', 'res_letterbox.barcode', 'res_letterbox.alt_identifier', + 'status.label_status AS "status.label_status"', 'status.img_filename AS "status.img_filename"', 'priorities.color AS "priorities.color"' + ]; + $tableFunction = ['status', 'priorities']; + $leftJoinFunction = ['res_letterbox.status = status.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, 'countResources' => $count, 'allResources' => $allResources]); + } + + public static function followResource(array $args) { $following = UsersFollowedResourcesModel::get([ 'where' => ['user_id = ?', 'res_id = ?'], 'data' => [$GLOBALS['id'], $args['resId']] ]); - if (empty($following)) { + if (!empty($following)) { return true; } - UsersFollowedResourcesModel::delete([ + UsersFollowedResourcesModel::create([ 'userId' => $GLOBALS['id'], 'resId' => $args['resId'] ]);