From 3d46e510ff095f9cd7aedac111dce16d3c08aad7 Mon Sep 17 00:00:00 2001 From: Jean-Laurent DUZANT <jean-laurent.duzant@xelians.fr> Date: Mon, 13 Mar 2023 15:54:12 +0100 Subject: [PATCH] FIX #23967 TIME 0:45 implement check before adding a watermark --- .../controllers/WatermarkController.php | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/app/document/controllers/WatermarkController.php b/src/app/document/controllers/WatermarkController.php index bc04049355..d7781cf751 100644 --- a/src/app/document/controllers/WatermarkController.php +++ b/src/app/document/controllers/WatermarkController.php @@ -60,10 +60,16 @@ class WatermarkController require_once($libPath); } + $fileContent = null; try { $watermarkFile = CoreConfigModel::getTmpPath() . "tmp_file_{$GLOBALS['id']}_" .rand(). "_watermark.pdf"; file_put_contents($watermarkFile, base64_decode($args['encodedDocument'])); + $isSigned = WatermarkController::checkDocumentSignatureField(['encodedDocument' => $args['encodedDocument']]); + if(!empty($isSigned)) { + return $fileContent; + } + $pdf = new Fpdi('P', 'pt'); $nbPages = $pdf->setSourceFile($watermarkFile); $pdf->setPrintHeader(false); @@ -81,8 +87,40 @@ class WatermarkController $fileContent = $pdf->Output('', 'S'); } catch (\Exception $e) { $fileContent = null; + var_dump($e); } return $fileContent; } + + public static function checkDocumentSignatureField(array $args) + { + $libDir = CoreConfigModel::getLibrariesDirectory(); + $alreadySigned = false; + + if (!empty($libDir) && is_file($libDir . 'SetaPDF-FormFiller-Full/library/SetaPDF/Autoload.php')) { + require_once($libDir . 'SetaPDF-FormFiller-Full/library/SetaPDF/Autoload.php'); + + $targetFile = CoreConfigModel::getTmpPath() . "tmp_file_{$GLOBALS['id']}_" . rand() . "_target_watermark.pdf"; + file_put_contents($targetFile, base64_decode($args['encodedDocument'])); + $document = \SetaPDF_Core_Document::loadByFilename($targetFile); + + $formFiller = new \SetaPDF_FormFiller($document); + $fields = $formFiller->getFields(); + $allFields = $fields->getAll(); + + foreach ($allFields as $fieldValue) { + if ($fieldValue instanceof \SetaPDF_FormFiller_Field_Signature) { + $alreadySigned = true; + break; + } + } + // Release objects to free memory and cycled references. + // After calling this method the instance of $document is unusable! + $document->cleanUp(); + unlink($targetFile); + } + + return $alreadySigned; + } } -- GitLab