Skip to content
Snippets Groups Projects
Verified Commit 4c390eea authored by Damien's avatar Damien
Browse files

FEAT #11586 TIME 5:00 Convert one page

parent e4268cb4
No related branches found
No related tags found
No related merge requests found
......@@ -89,7 +89,7 @@ class ConvertThumbnailController
return ['errors' => $storeInfos['errors']];
}
unlink($resource);
unlink("{$tmpPath}{$fileNameOnTmp}.png");
if ($args['type'] == 'document') {
AdrModel::createDocumentAdr([
......@@ -113,4 +113,95 @@ class ConvertThumbnailController
return true;
}
public static function convertOnePage(array $args)
{
ValidatorModel::notEmpty($args, ['id', 'type', 'page']);
ValidatorModel::stringType($args, ['type']);
ValidatorModel::intVal($args, ['id', 'page']);
if ($args['type'] == 'document') {
$adr = AdrModel::getDocumentsAdr([
'select' => ['path', 'filename'],
'where' => ['main_document_id = ?', 'type = ?'],
'data' => [$args['id'], 'DOC']
]);
$docserverType = 'DOC';
} elseif ($args['type'] == 'attachment') {
$adr = AdrModel::getAttachmentsAdr([
'select' => ['path', 'filename'],
'where' => ['attachment_id = ?', 'type = ?'],
'data' => [$args['id'], 'ATTACH']
]);
$docserverType = 'ATTACH';
}
if (empty($adr) || empty($docserverType)) {
return ['errors' => 'Document does not exist'];
}
$docserver = DocserverModel::getByType(['type' => $docserverType, 'select' => ['path']]);
if (empty($docserver['path']) || !is_dir($docserver['path'])) {
return ['errors' => 'Docserver does not exist'];
}
$pathToDocument = $docserver['path'] . $adr[0]['path'] . $adr[0]['filename'];
if (!is_file($pathToDocument) || !is_readable($pathToDocument)) {
return ['errors' => 'Document not found on docserver or not readable'];
}
$filename = pathinfo($pathToDocument, PATHINFO_FILENAME);
$tmpPath = CoreConfigModel::getTmpPath();
$img = new \Imagick();
$img->pingImage($pathToDocument);
$pageCount = $img->getNumberImages();
if ($pageCount < $args['page']) {
return ['errors' => 'Page does not exist'];
}
$fileNameOnTmp = rand() . $filename;
$convertPage = $args['page'] - 1;
$command = "convert -density 500x500 -quality 100 -background white -alpha remove "
. escapeshellarg($pathToDocument) . "[{$convertPage}] " . escapeshellarg("{$tmpPath}{$fileNameOnTmp}.png");
exec($command.' 2>&1', $output, $return);
if ($return !== 0) {
return ['errors' => "[ConvertThumbnail] Convert command failed for page {$args['page']} : ".implode(" ", $output)];
}
$resource = file_get_contents("{$tmpPath}{$fileNameOnTmp}.png");
$storeInfos = DocserverController::storeResourceOnDocServer([
'encodedFile' => base64_encode($resource),
'format' => 'png',
'docserverType' => $docserverType
]);
if (!empty($storeInfos['errors'])) {
return ['errors' => $storeInfos['errors']];
}
unlink("{$tmpPath}{$fileNameOnTmp}.png");
if ($args['type'] == 'document') {
AdrModel::createDocumentAdr([
'documentId' => $args['id'],
'type' => 'TNL' . $args['page'],
'path' => $storeInfos['path'],
'filename' => $storeInfos['filename'],
'fingerprint' => $storeInfos['fingerprint']
]);
} elseif ($args['type'] == 'attachment') {
AdrModel::createAttachmentAdr([
'attachmentId' => $args['id'],
'type' => 'TNL' . ($args['page'] + 1),
'path' => $storeInfos['path'],
'filename' => $storeInfos['filename'],
'fingerprint' => $storeInfos['fingerprint']
]);
}
return true;
}
}
......@@ -24,8 +24,9 @@ use SrcCore\models\DatabasePDO;
//id = $argv[2];
//type = $argv[3];
//userId = $argv[4];
//page = $argv[5]; Optionnal
ThumbnailScript::convert(['configPath' => $argv[1], 'id' => $argv[2], 'type' => $argv[3], 'userId' => $argv[4]]);
ThumbnailScript::convert(['configPath' => $argv[1], 'id' => $argv[2], 'type' => $argv[3], 'userId' => $argv[4], 'page' => $argv[5] ?? null]);
class ThumbnailScript
{
......@@ -36,7 +37,11 @@ class ThumbnailScript
$GLOBALS['id'] = $args['userId'];
$isConverted = ConvertThumbnailController::convert(['id' => $args['id'], 'type' => $args['type']]);
if (isset($args['page'])) {
$isConverted = ConvertThumbnailController::convertOnePage(['id' => $args['id'], 'type' => $args['type'], 'page' => $args['page']]);
} else {
$isConverted = ConvertThumbnailController::convert(['id' => $args['id'], 'type' => $args['type']]);
}
if (!empty($isConverted['errors'])) {
HistoryController::add([
'code' => 'KO',
......
......@@ -15,6 +15,7 @@
namespace Document\controllers;
use Attachment\controllers\AttachmentController;
use Convert\scripts\ThumbnailScript;
use Docserver\models\AdrModel;
use Email\controllers\EmailController;
use Group\controllers\PrivilegeController;
......@@ -421,8 +422,9 @@ class DocumentController
$tmpFilename = $tmpPath . $GLOBALS['id'] . '_' . rand() . '_' . $adr[0]['filename'];
copy($pathToDocument, $tmpFilename);
$pdf = new Fpdi('P');
$nbPages = $pdf->setSourceFile($tmpFilename);
$pages = [];
$pdf = new Fpdi('P');
$nbPages = $pdf->setSourceFile($tmpFilename);
$pdf->setPrintHeader(false);
for ($i = 1; $i <= $nbPages; $i++) {
......@@ -435,6 +437,9 @@ class DocumentController
$pdf->SetAutoPageBreak(false, 0);
foreach ($body['signatures'] as $signature) {
if ($signature['page'] == $i) {
if (!in_array($i, $pages)) {
$pages[] = $i;
}
if ($signature['positionX'] == 0 && $signature['positionY'] == 0) {
$signWidth = $size['width'];
$signPosX = 0;
......@@ -512,6 +517,22 @@ class DocumentController
'filename' => $storeInfos['filename'],
'fingerprint' => $storeInfos['fingerprint']
]);
$tnlPages = [];
foreach ($pages as $page) {
$tnlPages[] = "TNL{$page}";
}
if (!empty($tnlPages)) {
AdrModel::deleteDocumentAdr([
'where' => ['main_document_id = ?', 'type in (?)'],
'data' => [$args['id'], $tnlPages]
]);
}
$configPath = CoreConfigModel::getConfigPath();
foreach ($pages as $page) {
exec("php src/app/convert/scripts/ThumbnailScript.php '{$configPath}' {$args['id']} 'document' '{$GLOBALS['id']}' {$page} > /dev/null &");
}
}
$set = ['process_date' => 'CURRENT_TIMESTAMP', 'status' => DocumentController::ACTIONS[$args['actionId']]];
......@@ -532,14 +553,6 @@ class DocumentController
]);
}
AdrModel::deleteDocumentAdr([
'where' => ['main_document_id = ?', 'type != ?'],
'data' => [$args['id'], 'DOC']
]);
$configPath = CoreConfigModel::getConfigPath();
exec("php src/app/convert/scripts/ThumbnailScript.php '{$configPath}' {$args['id']} 'document' '{$GLOBALS['id']}' > /dev/null &");
EmailController::sendNotificationToNextUserInWorkflow(['documentId' => $args['id'], 'userId' => $GLOBALS['id']]);
HistoryController::add([
......
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