diff --git a/src/app/document/controllers/CertificateSignatureController.php b/src/app/document/controllers/CertificateSignatureController.php index 64c5a19a3dc8baf0ddb5c2a481e82fbcf720f742..81bf148b3b6d95022594abef53f8114349406706 100755 --- a/src/app/document/controllers/CertificateSignatureController.php +++ b/src/app/document/controllers/CertificateSignatureController.php @@ -25,9 +25,6 @@ class CertificateSignatureController public static function getHashedCertificate(array $args) { - $libDir = CoreConfigModel::getLibrariesDirectory(); - require_once($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'); - $adr = AdrModel::getDocumentsAdr([ 'select' => ['path', 'filename'], 'where' => ['main_document_id = ?', 'type = ?'], @@ -101,8 +98,6 @@ class CertificateSignatureController public static function signDocument($args = []) { - $libDir = CoreConfigModel::getLibrariesDirectory(); - require_once($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'); $certificateSignature = \SetaPDF_Core_Type_HexString::hex2str($args['hashSignature']); $signatureContentLength = $args['signatureContentLength']; $certificate = $args['certificate']; diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php index 2a52aa01c08bae86547752d39abd33643595403e..b18661bfbfd75bc5762e71e1968fa00a9bce2a12 100755 --- a/src/app/document/controllers/DocumentController.php +++ b/src/app/document/controllers/DocumentController.php @@ -506,8 +506,12 @@ class DocumentController $workflow = WorkflowModel::getCurrentStep(['select' => ['id', 'mode', 'user_id', 'signature_mode', 'digital_signature_id'], 'documentId' => $args['id']]); $libDir = CoreConfigModel::getLibrariesDirectory(); $loadedXml = CoreConfigModel::getConfig(); - if ($loadedXml->docaposteSignature->enable == 'true' && $workflow['signature_mode'] == 'eidas' && (empty($libDir) || !is_file($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'))) { - return $response->withStatus(500)->withJson(['errors' => 'SetaPDF-Signer library is not installed', 'lang' => 'setAPdfSignerError']); + + if ($workflow['mode'] == 'sign' && $workflow['signature_mode'] != 'stamp') { + if (empty($libDir) || !is_file($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php')) { + return $response->withStatus(500)->withJson(['errors' => 'SetaPDF-Signer library is not installed', 'lang' => 'setAPdfSignerError']); + } + require_once($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'); } $body = $request->getParsedBody(); @@ -695,68 +699,64 @@ class DocumentController ]); } elseif (DocumentController::ACTIONS[$args['actionId']] == 'VAL' && $workflow['mode'] == 'sign') { $imageSignature = false; - if (!empty($libDir) && is_file($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php')) { - require_once($libDir . 'SetaPDF-Signer/library/SetaPDF/Autoload.php'); - - $adr = AdrModel::getDocumentsAdr([ - 'select' => ['path', 'filename'], - 'where' => ['main_document_id = ?', 'type = ?'], - 'data' => [$args['id'], 'ESIGN'] - ]); - $docserver = DocserverModel::getByType(['type' => 'ESIGN', 'select' => ['path']]); - $pathToDocument = $docserver['path'] . $adr[0]['path'] . $adr[0]['filename']; - $tmpPath = CoreConfigModel::getTmpPath(); - $signedDocumentPath = $tmpPath . $GLOBALS['id'] . '_' . rand() . '_signedDocument.pdf'; - $writer = new \SetaPDF_Core_Writer_File($signedDocumentPath); - $document = \SetaPDF_Core_Document::loadByFilename($pathToDocument, $writer); - - $pages = $document->getCatalog()->getPages(); - $pageCount = $pages->count(); - - for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) { - $page = $pages->getPage($pageNumber); - - $format = \SetaPDF_Core_PageFormats::getFormat($page->getWidthAndHeight(), \SetaPDF_Core_PageFormats::ORIENTATION_AUTO); - foreach ($body['signatures'] as $key => $signature) { - if ($signature['page'] == $pageNumber) { - $image = base64_decode($signature['encodedImage']); - if ($image === false) { - return $response->withStatus(400)->withJson(['errors' => 'base64_decode failed']); - } - - $imageTmpPath = $tmpPath . $GLOBALS['id'] . '_' . rand() . '_writing.png'; - if ($signature['type'] == 'SVG') { - $Imagick = new \Imagick(); - $Imagick->readImageBlob($image); - $Imagick->setImageFormat("png24"); - $Imagick->writeImage($imageTmpPath); - $Imagick->clear(); - $Imagick->destroy(); + $adr = AdrModel::getDocumentsAdr([ + 'select' => ['path', 'filename'], + 'where' => ['main_document_id = ?', 'type = ?'], + 'data' => [$args['id'], 'ESIGN'] + ]); + $docserver = DocserverModel::getByType(['type' => 'ESIGN', 'select' => ['path']]); + $pathToDocument = $docserver['path'] . $adr[0]['path'] . $adr[0]['filename']; + $tmpPath = CoreConfigModel::getTmpPath(); + $signedDocumentPath = $tmpPath . $GLOBALS['id'] . '_' . rand() . '_signedDocument.pdf'; + $writer = new \SetaPDF_Core_Writer_File($signedDocumentPath); + $document = \SetaPDF_Core_Document::loadByFilename($pathToDocument, $writer); + + $pages = $document->getCatalog()->getPages(); + $pageCount = $pages->count(); + + for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) { + $page = $pages->getPage($pageNumber); + + $format = \SetaPDF_Core_PageFormats::getFormat($page->getWidthAndHeight(), \SetaPDF_Core_PageFormats::ORIENTATION_AUTO); + foreach ($body['signatures'] as $key => $signature) { + if ($signature['page'] == $pageNumber) { + $image = base64_decode($signature['encodedImage']); + if ($image === false) { + return $response->withStatus(400)->withJson(['errors' => 'base64_decode failed']); + } + + $imageTmpPath = $tmpPath . $GLOBALS['id'] . '_' . rand() . '_writing.png'; + if ($signature['type'] == 'SVG') { + $Imagick = new \Imagick(); + $Imagick->readImageBlob($image); + $Imagick->setImageFormat("png24"); + $Imagick->writeImage($imageTmpPath); + $Imagick->clear(); + $Imagick->destroy(); + } else { + file_put_contents($imageTmpPath, $image); + if ($signature['positionX'] == 0 && $signature['positionY'] == 0) { + $signWidth = $format['width']; + $signPosX = 0; + $signPosY = 0; } else { - file_put_contents($imageTmpPath, $image); - if ($signature['positionX'] == 0 && $signature['positionY'] == 0) { - $signWidth = $format['width']; - $signPosX = 0; - $signPosY = 0; - } else { - $signWidth = ($signature['width'] * $format['width']) / 100; - $signPosX = ($signature['positionX'] * $format['width']) / 100; - $signPosY = ($signature['positionY'] * $format['height']) / 100; - } - DigitalSignatureController::signHashes([ - 'signatureId' => $workflow['digital_signature_id'], - 'documentId' => $args['id'], - 'signatureInfo' => [ - 'page' => $signature['page'], - 'positionX' => $signPosX, - 'positionY' => $signPosY, - 'filePath' => $imageTmpPath, - 'signWidth' => $signWidth - ], - 'isLastSignature' => !isset($body['signatures'][$key + 1]) - ]); - $imageSignature = true; + $signWidth = ($signature['width'] * $format['width']) / 100; + $signPosX = ($signature['positionX'] * $format['width']) / 100; + $signPosY = ($signature['positionY'] * $format['height']) / 100; } + DigitalSignatureController::signHashes([ + 'signatureId' => $workflow['digital_signature_id'], + 'documentId' => $args['id'], + 'signatureInfo' => [ + 'page' => $signature['page'], + 'positionX' => $signPosX, + 'positionY' => $signPosY, + 'filePath' => $imageTmpPath, + 'signWidth' => $signWidth + ], + 'isLastSignature' => !isset($body['signatures'][$key + 1]) + ]); + $imageSignature = true; } } } diff --git a/src/app/search/controllers/SearchController.php b/src/app/search/controllers/SearchController.php index 3176ad022ed5185f3d1eb2e35e80341e76eb2f6a..65037dc60f5579cf023079e970f713fefc1fe870 100755 --- a/src/app/search/controllers/SearchController.php +++ b/src/app/search/controllers/SearchController.php @@ -51,7 +51,7 @@ class SearchController $whereWorkflow = []; $dataWorkflow = []; - if (Validator::arrayType()->notEmpty()->validate($body['workflowStates'])) { + if (Validator::arrayType()->notEmpty()->validate($body['workflowStates'] ?? null)) { $whereStatuses = []; if (in_array('VAL', $body['workflowStates'])) { $whereStatuses[] = "main_document_id not in (SELECT DISTINCT main_document_id FROM workflows WHERE status is null OR status in ('REF', 'END', 'STOP'))"; @@ -90,7 +90,7 @@ class SearchController $data[] = $documentIds; } - if (Validator::stringType()->notEmpty()->validate($body['title'])) { + if (Validator::stringType()->notEmpty()->validate($body['title'] ?? null)) { $requestData = SearchController::getDataForRequest([ 'search' => $body['title'], 'fields' => 'unaccent(title) ilike unaccent(?::text)', @@ -102,7 +102,7 @@ class SearchController $where[] = implode(' AND ', $requestData['where']); $data = array_merge($data, $requestData['data']); } - if (Validator::stringType()->notEmpty()->validate($body['reference'])) { + if (Validator::stringType()->notEmpty()->validate($body['reference'] ?? null)) { $where[] = 'reference ilike ?'; $data[] = "%{$body['reference']}%"; }