From e6f5ef91ec1aa6f206b860cd9fa286ad4e69601a Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 19 Aug 2021 15:46:27 +0200 Subject: [PATCH] =?UTF-8?q?Generation=20du=20doc=20=C3=A0pd=20du=20templat?= =?UTF-8?q?e?= 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; + } }