diff --git a/src/Bundle/ChillDocStoreBundle/Service/Signature/PDFSignatureZoneParser.php b/src/Bundle/ChillDocStoreBundle/Service/Signature/PDFSignatureZoneParser.php index 450d65807..082d1afa2 100644 --- a/src/Bundle/ChillDocStoreBundle/Service/Signature/PDFSignatureZoneParser.php +++ b/src/Bundle/ChillDocStoreBundle/Service/Signature/PDFSignatureZoneParser.php @@ -49,7 +49,7 @@ class PDFSignatureZoneParser foreach ($page->getDataTm() as $dataTm) { if (str_starts_with($dataTm[1], self::ZONE_SIGNATURE_START)) { - $zones[] = new PDFSignatureZone((int) $zoneIndex, (float) $dataTm[0][4], (float) $dataTm[0][5], $this->defaultHeight, $this->defaultWidth, $pdfPage); + $zones[] = new PDFSignatureZone($zoneIndex, (float) $dataTm[0][4], (float) $dataTm[0][5], $this->defaultHeight, $this->defaultWidth, $pdfPage); ++$zoneIndex; } } diff --git a/src/Bundle/ChillMainBundle/Controller/WorkflowController.php b/src/Bundle/ChillMainBundle/Controller/WorkflowController.php index cdd432cf7..7d277ef0e 100644 --- a/src/Bundle/ChillMainBundle/Controller/WorkflowController.php +++ b/src/Bundle/ChillMainBundle/Controller/WorkflowController.php @@ -11,6 +11,8 @@ declare(strict_types=1); namespace Chill\MainBundle\Controller; +use Chill\DocStoreBundle\Service\StoredObjectManagerInterface; +use Chill\DocStoreBundle\Service\Signature\PDFSignatureZoneParser; use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; use Chill\MainBundle\Entity\Workflow\EntityWorkflowStep; @@ -32,6 +34,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Workflow\Registry; @@ -44,6 +47,7 @@ class WorkflowController extends AbstractController private readonly EntityWorkflowManager $entityWorkflowManager, private readonly EntityWorkflowRepository $entityWorkflowRepository, private readonly ValidatorInterface $validator, + private readonly StoredObjectManagerInterface $storedObjectManagerInterface, private readonly PaginatorFactory $paginatorFactory, private readonly Registry $registry, private readonly EntityManagerInterface $entityManager, @@ -51,6 +55,7 @@ class WorkflowController extends AbstractController private readonly ChillSecurity $security, private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry, private readonly ClockInterface $clock, + private readonly PDFSignatureZoneParser $PDFSignatureZoneParser, ) {} #[Route(path: '/{_locale}/main/workflow/create', name: 'chill_main_workflow_create')] @@ -377,7 +382,7 @@ class WorkflowController extends AbstractController $signature = $this->entityManager->getRepository(EntityWorkflowStepSignature::class)->find($signature_id); if ($signature->getSigner() instanceof User) { - return $this->redirectToRoute('signature_route_user'); + return $this->redirectToRoute('chill_main_workflow_signature', ['signature_id' => $signature_id]); } $metadataForm = $this->createForm(WorkflowSignatureMetadataType::class); @@ -401,8 +406,7 @@ class WorkflowController extends AbstractController $this->entityManager->persist($signature); $this->entityManager->flush(); - // Todo should redirect to document for actual signing? To be adjusted still - return $this->redirectToRoute('chill_main_workflow_show', ['id' => $signature->getStep()->getEntityWorkflow()->getId()]); + return $this->redirectToRoute('chill_main_workflow_signature', ['signature_id' => $signature_id]); } return $this->render( @@ -413,4 +417,36 @@ class WorkflowController extends AbstractController ] ); } + + #[Route(path: '/{_locale}/main/workflow/signature/{signature_id}/sign', name: 'chill_main_workflow_signature', methods: 'GET')] + public function addSignature(int $signature_id, Request $request): Response + { + $signature = $this->entityManager->getRepository(EntityWorkflowStepSignature::class)->find($signature_id); + $entityWorkflow = $signature->getStep()->getEntityWorkflow(); + + $storedObject = $this->entityWorkflowManager->getAssociatedStoredObject($entityWorkflow); + if (null === $storedObject) { + throw new NotFoundHttpException('No stored object found'); + } + + $zones = []; + $content = $this->storedObjectManagerInterface->read($storedObject); + if (null != $content) { + $zones = $this->PDFSignatureZoneParser->findSignatureZones($content); + } + + $signatureClient = []; + $signatureClient['id'] = $signature->getId(); + $signatureClient['storedObject'] = [ + 'filename' => $storedObject->getFilename(), + 'iv' => $storedObject->getIv(), + 'keyInfos' => $storedObject->getKeyInfos(), + ]; + $signatureClient['zones'] = $zones; + + return $this->render( + '@ChillMain/Workflow/_signature_sign.html.twig', + ['signature' => $signatureClient] + ); + } } diff --git a/src/Bundle/ChillMainBundle/Resources/views/Workflow/_signature_sign.html.twig b/src/Bundle/ChillMainBundle/Resources/views/Workflow/_signature_sign.html.twig new file mode 100644 index 000000000..8b2770952 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/views/Workflow/_signature_sign.html.twig @@ -0,0 +1,37 @@ + + + + + + + + Signature + + {{ encore_entry_link_tags('mod_bootstrap') }} + {{ encore_entry_link_tags('mod_forkawesome') }} + {{ encore_entry_link_tags('chill') }} + {{ encore_entry_link_tags('vue_document_signature') }} + + + + + + {% block js %} + {{ encore_entry_script_tags('mod_document_action_buttons_group') }} + + {{ encore_entry_script_tags('vue_document_signature') }} + {% endblock %} + +
+
+
+
+
+
+
+
+
+ + \ No newline at end of file