From 69d90db87b17d9b15bd692b825bcb94ca4c41fe0 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Tue, 28 Jan 2020 12:07:12 +0100 Subject: [PATCH] FEAT #12346 TIME 0:45 Modify constraint + Thumbnail --- migration/20.03/2003.sql | 2 + sql/structure.sql | 2 +- src/app/convert/models/AdrModel.php | 37 +------------------ .../resource/controllers/ResController.php | 34 ++++++++--------- 4 files changed, 19 insertions(+), 56 deletions(-) diff --git a/migration/20.03/2003.sql b/migration/20.03/2003.sql index 412b01c4a89..b0b80f58006 100644 --- a/migration/20.03/2003.sql +++ b/migration/20.03/2003.sql @@ -473,6 +473,8 @@ ALTER TABLE adr_letterbox DROP COLUMN IF EXISTS relation; ALTER TABLE adr_letterbox ADD COLUMN relation integer; UPDATE adr_letterbox SET relation = 1; ALTER TABLE adr_letterbox ALTER COLUMN relation SET NOT NULL; +ALTER TABLE adr_letterbox DROP CONSTRAINT adr_letterbox_unique_key; +ALTER TABLE adr_letterbox ADD CONSTRAINT adr_letterbox_unique_key UNIQUE (res_id, type, relation); ALTER TABLE res_letterbox DROP COLUMN IF EXISTS integrations; ALTER TABLE res_letterbox ADD COLUMN integrations jsonb DEFAULT '{}' NOT NULL; diff --git a/sql/structure.sql b/sql/structure.sql index 7d0adcee6fa..d95f2d321a8 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -985,7 +985,7 @@ CREATE TABLE adr_letterbox filename character varying(255) NOT NULL, fingerprint character varying(255) DEFAULT NULL, CONSTRAINT adr_letterbox_pkey PRIMARY KEY (id), - CONSTRAINT adr_letterbox_unique_key UNIQUE (res_id, type) + CONSTRAINT adr_letterbox_unique_key UNIQUE (res_id, type, relation) ) WITH (OIDS=FALSE); diff --git a/src/app/convert/models/AdrModel.php b/src/app/convert/models/AdrModel.php index 436dc743aa2..8c4df7f8514 100755 --- a/src/app/convert/models/AdrModel.php +++ b/src/app/convert/models/AdrModel.php @@ -63,28 +63,7 @@ class AdrModel return $document[0]; } - - public static function getTypedDocumentAdrByResId(array $aArgs) - { - ValidatorModel::notEmpty($aArgs, ['resId', 'type']); - ValidatorModel::intVal($aArgs, ['resId']); - ValidatorModel::stringType($aArgs, ['type']); - ValidatorModel::arrayType($aArgs, ['select']); - - $adr = DatabaseModel::select([ - 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], - 'table' => ['adr_letterbox'], - 'where' => ['res_id = ?', 'type = ?'], - 'data' => [$aArgs['resId'], $aArgs['type']] - ]); - - if (empty($adr[0])) { - return []; - } - - return $adr[0]; - } - + public static function getTypedAttachAdrByResId(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['resId', 'type']); @@ -148,20 +127,6 @@ class AdrModel return true; } - public static function deleteDocumentAdr(array $args) - { - ValidatorModel::notEmpty($args, ['where', 'data']); - ValidatorModel::arrayType($args, ['where', 'data']); - - DatabaseModel::delete([ - 'table' => 'adr_letterbox', - 'where' => $args['where'], - 'data' => $args['data'] - ]); - - return true; - } - public static function deleteAttachmentAdr(array $args) { ValidatorModel::notEmpty($args, ['where', 'data']); diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index d3c7cdc3a96..28886df5bd1 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -577,41 +577,37 @@ class ResController return $response->withHeader('Content-Type', $mimeType); } - public function getThumbnailContent(Request $request, Response $response, array $aArgs) + public function getThumbnailContent(Request $request, Response $response, array $args) { - if (!Validator::intVal()->validate($aArgs['resId'])) { + if (!Validator::intVal()->validate($args['resId'])) { return $response->withStatus(403)->withJson(['errors' => 'resId param is not an integer']); } $pathToThumbnail = 'apps/maarch_entreprise/img/noThumbnail.png'; - $document = ResModel::getById(['select' => ['filename'], 'resId' => $aArgs['resId']]); + $document = ResModel::getById(['select' => ['filename'], 'resId' => $args['resId']]); if (empty($document)) { return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']); } - if (!empty($document['filename']) && ResController::hasRightByResId(['resId' => [$aArgs['resId']], 'userId' => $GLOBALS['id']])) { - $tnlAdr = AdrModel::getTypedDocumentAdrByResId([ - 'select' => ['docserver_id', 'path', 'filename'], - 'resId' => $aArgs['resId'], - 'type' => 'TNL' - ]); - if (empty($tnlAdr)) { - ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => $aArgs['resId']]); - $tnlAdr = AdrModel::getTypedDocumentAdrByResId([ - 'select' => ['docserver_id', 'path', 'filename'], - 'resId' => $aArgs['resId'], - 'type' => 'TNL' - ]); + if (!empty($document['filename']) && ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) { + $relation = AdrModel::getDocuments(['select' => ['MAX(relation)'], 'where' => ['res_id = ?'], 'data' => [$args['resId']]]); + $relation = $relation[0]['max']; + + $tnlAdr = AdrModel::getDocuments(['select' => ['docserver_id', 'path', 'filename'], 'where' => ['res_id = ?', 'type = ?', 'relation = ?'], 'data' => [$args['resId'], 'TNL', $relation]]); + + if (empty($tnlAdr[0])) { + ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => $args['resId']]); + $tnlAdr = AdrModel::getDocuments(['select' => ['docserver_id', 'path', 'filename'], 'where' => ['res_id = ?', 'type = ?', 'relation = ?'], 'data' => [$args['resId'], 'TNL', $relation]]); } - if (!empty($tnlAdr)) { - $docserver = DocserverModel::getByDocserverId(['docserverId' => $tnlAdr['docserver_id'], 'select' => ['path_template']]); + if (!empty($tnlAdr[0])) { + $docserver = DocserverModel::getByDocserverId(['docserverId' => $tnlAdr[0]['docserver_id'], 'select' => ['path_template']]); if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) { return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']); } - $pathToThumbnail = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $tnlAdr['path']) . $tnlAdr['filename']; + $pathToThumbnail = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $tnlAdr[0]['path']) . $tnlAdr[0]['filename']; } } -- GitLab