From e6f5ef91ec1aa6f206b860cd9fa286ad4e69601a Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 19 Aug 2021 15:46:27 +0200 Subject: [PATCH 1/5] =?UTF-8?q?Generation=20du=20doc=20=C3=A0pd=20du=20tem?= =?UTF-8?q?plate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DocGeneratorTemplateController.php | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php index 0ab610e6b..d67d9eeba 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php +++ b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php @@ -6,7 +6,15 @@ use Chill\DocGeneratorBundle\Repository\DocGeneratorTemplateRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\HeaderUtils; use Symfony\Component\Routing\Annotation\Route; +use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate; +use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlOpenstackGenerator; +use PhpOffice\PhpWord\TemplateProcessor; + +// TODO à mettre dans services +use Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext; +use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation; /** * Class DocGeneratorTemplateController @@ -38,4 +46,53 @@ class DocGeneratorTemplateController extends AbstractController return new JsonResponse(["results" => $ret]); } + + /** + * @Route( + * "{_locale}/doc/gen/generate/from/{template}/for/{entityClassName}/{entityId}", + * name="chill_docgenerator_generate_from_template" + * ) + */ + public function generateDocFromTemplateAction( + TempUrlOpenstackGenerator $tempUrlGenerator, + DocGeneratorTemplate $template, string $entityClassName, int $entityId): Response + { + $p = $tempUrlGenerator->generate( + 'GET', + $template->getFile()); + + $tmpfname = tempnam(sys_get_temp_dir(), 'DOC_TEMPLATE'); + file_put_contents($tmpfname, file_get_contents($p->{"url"})); + + $entity = $this->getDoctrine()->getRepository($entityClassName)->find($entityId); + + if ($template->getContext() == HouseholdMemberSelectionContext::class) { + $context = new HouseholdMemberSelectionContext(); + // $datas = $context->getData($entity); + $datas = []; + } else { + throw new \Exception("Not implemented", 1); + } + + $templateProcessor = new TemplateProcessor($tmpfname); + $templateProcessor->setValues(array('firstname' => 'John', 'lastname' => 'Doe')); + + $tmpfname2 = tempnam(sys_get_temp_dir(), 'DOC_GENERATED'); + $templateProcessor->saveAs($tmpfname2); + + unlink($tmpfname); + + $fileContent = fopen($tmpfname2, 'r'); // the generated file content + $response = new Response(fread($fileContent, filesize($tmpfname2))); + + $disposition = HeaderUtils::makeDisposition( + HeaderUtils::DISPOSITION_ATTACHMENT, + 'foo.docx' + ); + + $response->headers->set('Content-Disposition', $disposition); + unlink($tmpfname2); + + return $response; + } } From 237476dc281b066af6dab1e5cc3d34c31000fbd8 Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 19 Aug 2021 18:22:53 +0200 Subject: [PATCH 2/5] Save generated doc in openstack --- .../DocGeneratorTemplateController.php | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php index d67d9eeba..ab7b602d5 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php +++ b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php @@ -11,10 +11,10 @@ use Symfony\Component\Routing\Annotation\Route; use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate; use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlOpenstackGenerator; use PhpOffice\PhpWord\TemplateProcessor; +use GuzzleHttp\Client; // TODO à mettre dans services use Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext; -use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation; /** * Class DocGeneratorTemplateController @@ -57,12 +57,12 @@ class DocGeneratorTemplateController extends AbstractController TempUrlOpenstackGenerator $tempUrlGenerator, DocGeneratorTemplate $template, string $entityClassName, int $entityId): Response { - $p = $tempUrlGenerator->generate( + $getUrlGen = $tempUrlGenerator->generate( 'GET', $template->getFile()); $tmpfname = tempnam(sys_get_temp_dir(), 'DOC_TEMPLATE'); - file_put_contents($tmpfname, file_get_contents($p->{"url"})); + file_put_contents($tmpfname, file_get_contents($getUrlGen->{"url"})); $entity = $this->getDoctrine()->getRepository($entityClassName)->find($entityId); @@ -83,16 +83,36 @@ class DocGeneratorTemplateController extends AbstractController unlink($tmpfname); $fileContent = fopen($tmpfname2, 'r'); // the generated file content - $response = new Response(fread($fileContent, filesize($tmpfname2))); - $disposition = HeaderUtils::makeDisposition( - HeaderUtils::DISPOSITION_ATTACHMENT, - 'foo.docx' - ); + $genDocName = 'doc_'.sprintf( '%010d', rand()).'.docx'; + + $getUrlGen = $tempUrlGenerator->generate( + 'PUT', + $genDocName); - $response->headers->set('Content-Disposition', $disposition); unlink($tmpfname2); - return $response; + $client = new Client(); + + $putResponse = $client->request('PUT', $getUrlGen->{'url'}, [ + 'body' => $fileContent + ]); + + if ($putResponse->getStatusCode() == 201) { + return new JsonResponse( + array( + "msg" => "Document créé", + "id" => $genDocName, + "response" => array( + "reasonPhrase" => $putResponse->getReasonPhrase(), + "statusCode" => $putResponse->getStatusCode()))); + } + + return new JsonResponse( + array( + "msg" => "PBM", + "response" => array( + "reasonPhrase" => $putResponse->getReasonPhrase(), + "statusCode" => $putResponse->getStatusCode()))); } } From 4184a74e7e97254f1cd0902e386d780ec63d15b9 Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 19 Aug 2021 18:24:20 +0200 Subject: [PATCH 3/5] Styling refactoring --- .../DocGeneratorTemplateController.php | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php index ab7b602d5..62093c065 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php +++ b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php @@ -56,63 +56,63 @@ class DocGeneratorTemplateController extends AbstractController public function generateDocFromTemplateAction( TempUrlOpenstackGenerator $tempUrlGenerator, DocGeneratorTemplate $template, string $entityClassName, int $entityId): Response - { - $getUrlGen = $tempUrlGenerator->generate( - 'GET', - $template->getFile()); + { + $getUrlGen = $tempUrlGenerator->generate( + 'GET', + $template->getFile()); - $tmpfname = tempnam(sys_get_temp_dir(), 'DOC_TEMPLATE'); - file_put_contents($tmpfname, file_get_contents($getUrlGen->{"url"})); + $tmpfname = tempnam(sys_get_temp_dir(), 'DOC_TEMPLATE'); + file_put_contents($tmpfname, file_get_contents($getUrlGen->{"url"})); - $entity = $this->getDoctrine()->getRepository($entityClassName)->find($entityId); + $entity = $this->getDoctrine()->getRepository($entityClassName)->find($entityId); - if ($template->getContext() == HouseholdMemberSelectionContext::class) { - $context = new HouseholdMemberSelectionContext(); - // $datas = $context->getData($entity); - $datas = []; - } else { - throw new \Exception("Not implemented", 1); - } + if ($template->getContext() == HouseholdMemberSelectionContext::class) { + $context = new HouseholdMemberSelectionContext(); + // $datas = $context->getData($entity); + $datas = []; + } else { + throw new \Exception("Not implemented", 1); + } - $templateProcessor = new TemplateProcessor($tmpfname); - $templateProcessor->setValues(array('firstname' => 'John', 'lastname' => 'Doe')); + $templateProcessor = new TemplateProcessor($tmpfname); + $templateProcessor->setValues(array('firstname' => 'John', 'lastname' => 'Doe')); - $tmpfname2 = tempnam(sys_get_temp_dir(), 'DOC_GENERATED'); - $templateProcessor->saveAs($tmpfname2); + $tmpfname2 = tempnam(sys_get_temp_dir(), 'DOC_GENERATED'); + $templateProcessor->saveAs($tmpfname2); - unlink($tmpfname); + unlink($tmpfname); - $fileContent = fopen($tmpfname2, 'r'); // the generated file content + $fileContent = fopen($tmpfname2, 'r'); // the generated file content - $genDocName = 'doc_'.sprintf( '%010d', rand()).'.docx'; + $genDocName = 'doc_'.sprintf( '%010d', rand()).'.docx'; - $getUrlGen = $tempUrlGenerator->generate( - 'PUT', - $genDocName); + $getUrlGen = $tempUrlGenerator->generate( + 'PUT', + $genDocName); - unlink($tmpfname2); + unlink($tmpfname2); - $client = new Client(); + $client = new Client(); - $putResponse = $client->request('PUT', $getUrlGen->{'url'}, [ - 'body' => $fileContent - ]); - - if ($putResponse->getStatusCode() == 201) { - return new JsonResponse( - array( - "msg" => "Document créé", - "id" => $genDocName, - "response" => array( - "reasonPhrase" => $putResponse->getReasonPhrase(), - "statusCode" => $putResponse->getStatusCode()))); - } + $putResponse = $client->request('PUT', $getUrlGen->{'url'}, [ + 'body' => $fileContent + ]); + if ($putResponse->getStatusCode() == 201) { return new JsonResponse( array( - "msg" => "PBM", + "msg" => "Document créé", + "id" => $genDocName, "response" => array( "reasonPhrase" => $putResponse->getReasonPhrase(), "statusCode" => $putResponse->getStatusCode()))); } + + return new JsonResponse( + array( + "msg" => "PBM", + "response" => array( + "reasonPhrase" => $putResponse->getReasonPhrase(), + "statusCode" => $putResponse->getStatusCode()))); + } } From 772388298dddb345070e3dd70518fbae0d3ebcb6 Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 19 Aug 2021 18:27:16 +0200 Subject: [PATCH 4/5] Debug docgen view repository error name --- .../{view => views}/Admin/DocGeneratorTemplate/edit.twig.html | 0 .../{view => views}/Admin/DocGeneratorTemplate/index.twig.html | 0 .../{view => views}/Admin/DocGeneratorTemplate/new.twig.html | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename src/Bundle/ChillDocGeneratorBundle/Resources/{view => views}/Admin/DocGeneratorTemplate/edit.twig.html (100%) rename src/Bundle/ChillDocGeneratorBundle/Resources/{view => views}/Admin/DocGeneratorTemplate/index.twig.html (100%) rename src/Bundle/ChillDocGeneratorBundle/Resources/{view => views}/Admin/DocGeneratorTemplate/new.twig.html (100%) diff --git a/src/Bundle/ChillDocGeneratorBundle/Resources/view/Admin/DocGeneratorTemplate/edit.twig.html b/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/edit.twig.html similarity index 100% rename from src/Bundle/ChillDocGeneratorBundle/Resources/view/Admin/DocGeneratorTemplate/edit.twig.html rename to src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/edit.twig.html diff --git a/src/Bundle/ChillDocGeneratorBundle/Resources/view/Admin/DocGeneratorTemplate/index.twig.html b/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/index.twig.html similarity index 100% rename from src/Bundle/ChillDocGeneratorBundle/Resources/view/Admin/DocGeneratorTemplate/index.twig.html rename to src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/index.twig.html diff --git a/src/Bundle/ChillDocGeneratorBundle/Resources/view/Admin/DocGeneratorTemplate/new.twig.html b/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/new.twig.html similarity index 100% rename from src/Bundle/ChillDocGeneratorBundle/Resources/view/Admin/DocGeneratorTemplate/new.twig.html rename to src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/new.twig.html From 73c90f8c6a38f4de381d2c05838699965d8c9eab Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 19 Aug 2021 18:36:54 +0200 Subject: [PATCH 5/5] Debug docgen admin view error name --- .../Admin/DocGeneratorTemplate/{edit.twig.html => edit.html.twig} | 0 .../DocGeneratorTemplate/{index.twig.html => index.html.twig} | 0 .../Admin/DocGeneratorTemplate/{new.twig.html => new.html.twig} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/{edit.twig.html => edit.html.twig} (100%) rename src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/{index.twig.html => index.html.twig} (100%) rename src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/{new.twig.html => new.html.twig} (100%) diff --git a/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/edit.twig.html b/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/edit.html.twig similarity index 100% rename from src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/edit.twig.html rename to src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/edit.html.twig diff --git a/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/index.twig.html b/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/index.html.twig similarity index 100% rename from src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/index.twig.html rename to src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/index.html.twig diff --git a/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/new.twig.html b/src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/new.html.twig similarity index 100% rename from src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/new.twig.html rename to src/Bundle/ChillDocGeneratorBundle/Resources/views/Admin/DocGeneratorTemplate/new.html.twig